Skip to content

Market Research: Pattern Analysis of 50-500% Annual Return Stocks #128

Description

@ironcladgeek

📋 Research Objective

Conduct comprehensive market research on stocks that achieved exceptional returns (50-500%) over 1 year to identify common patterns, catalysts, and characteristics that may explain their extraordinary growth.

🎯 Research Questions

  1. What fundamental patterns exist? Do high-growth stocks share similar valuation metrics, growth rates, or financial health characteristics before their surge?
  2. Are there technical indicators? Can we identify price/volume patterns that preceded the exceptional growth?
  3. What role does news/sentiment play? Are there common narrative patterns or sentiment shifts?
  4. Sector concentration? Are certain sectors overrepresented? Why?
  5. Catalyst identification? What events (earnings beats, FDA approvals, M&A, product launches) triggered the growth?
  6. Market conditions? Did these stocks surge during specific market regimes (bull markets, sector rotations)?
  7. Predictability? Can we identify early warning signals that a stock might be poised for exceptional growth?

📊 Dataset: High-Growth Stocks (50-500% Annual Return)

Initial Sample Set

Ticker Company 1-Year Return Sector Notes
PTHS Pelthos Therapeutics ~389% Healthcare - Biotech Clinical trial results?
AU Anglogold Ashanti ~269% Materials - Gold Mining Gold price surge?
SLS SELLAS Life Sciences ~262% Healthcare - Biotech Cancer therapy breakthrough?
KOD Kodiak Sciences ~181% Healthcare - Biotech Ophthalmology drug development?
GRDX GridAI Technologies ~149% Technology - AI AI boom beneficiary?
BBVA Banco Bilbao ADR ~140% Financials - Banking European banking recovery?
TYRA Tyra Biosciences ~89% Healthcare - Biotech Precision oncology?

Note: Expand this dataset to 50-100 stocks for statistical significance.

🔬 Data Collection Strategy

How Historical Data Works

Key Mechanism: Run analyze --ticker X --date Y to fetch and cache historical data.

Example:

# Fetch data for GOOG as of September 1, 2025
uv run python -m src.main analyze --ticker GOOG --date 2025-09-01

# Creates cached files:
# - data/cache/prices/GOOG.csv (full price history)
# - data/cache/GOOG_fundamental_2025-09-01.json (partial fundamentals)
# - data/cache/GOOG_news-finbert_*.json (news data)

⚠️ CRITICAL: Actual Data Availability

When running analyze --ticker X --date Y:

Data Type Availability Completeness Source
Price Data ✅✅ Full Complete historical prices Yahoo Finance
News Data ✅✅ Full Complete news archives News APIs
Fundamentals (Historical) ⚠️ Partial Yahoo Finance quarterly only Yahoo Finance
Fundamentals (Current) Comprehensive Alpha Vantage full data Alpha Vantage
Analyst Ratings ⚠️ Limited 3-month lookback Finnhub

📊 Fundamental Data Comparison

Historical Data (Yahoo Finance - Limited)

Cache: data/cache/TICKER_fundamental_HISTORICAL-DATE.json

{
  "company_info": {
    "ticker": "GOOG",
    "name": "Alphabet Inc.",
    "sector": "COMMUNICATION SERVICES",
    "industry": "INTERNET CONTENT & INFORMATION",
    "book_value": 29.98,
    "shares_outstanding": 12104000000.0,
    "revenue_ttm": 371399000000.0,
    "gross_profit_ttm": 218912000000.0,
    "ebitda": 157748000000.0,
    "eps": 9.55,
    "profit_margin": 0.311,
    "operating_margin": 0.327,
    "return_on_equity": 0.318,
    "data_source": "Yahoo Finance (Quarterly)",
    
    // ❌ MISSING for historical:
    // - P/E ratio, P/B ratio, P/S ratio, PEG ratio
    // - EV/EBITDA, EV/Revenue
    // - Analyst target price, analyst ratings
    // - 52-week high/low, moving averages
    // - Market cap, forward P/E
    // - Ownership data (insiders, institutions)
  }
}

Historical data includes (~15 fields):

  • ✅ Basic info: sector, industry
  • ✅ Profitability: profit margin, operating margin, ROE
  • ✅ Size: revenue, EBITDA, EPS
  • Missing: Valuation ratios (P/E, P/B, PEG, EV/EBITDA)
  • Missing: Market cap, analyst data, technical indicators

Current Data (Alpha Vantage - Comprehensive)

Cache: data/cache/TICKER_fundamental_CURRENT-DATE.json

{
  "company_info": {
    "ticker": "GOOG",
    "name": "Alphabet Inc Class C",
    "sector": "COMMUNICATION SERVICES",
    "industry": "INTERNET CONTENT & INFORMATION",
    
    // ✅ FULL Alpha Vantage data (~40+ fields):
    "market_cap": 3788141232000.0,
    "pe_ratio": 30.98,
    "forward_pe": 23.36,
    "peg_ratio": 1.676,
    "price_to_book": 8.21,
    "price_to_sales": 9.83,
    "ev_to_revenue": 7.85,
    "ev_to_ebitda": 18.48,
    "analyst_target_price": 328.21,
    "analyst_rating_strong_buy": 13,
    "52_week_high": 328.46,
    "52_week_low": 142.27,
    "beta": 1.07,
    // ... and much more
  }
}

🎯 Research Implications

What we CAN analyze:

  1. ✅✅ Complete price/technical analysis (full history)
  2. ✅✅ Complete news/catalyst analysis (full archives)
  3. Basic historical fundamentals (profitability, revenue, EPS)
  4. Current fundamental profile (comprehensive Alpha Vantage)
  5. ⚠️ Analyst snapshots (3-month windows)

What we CANNOT analyze historically:

  1. ❌ Valuation evolution (P/E, P/B, PEG over time)
  2. ❌ Market cap changes
  3. ❌ Historical analyst ratings embedded in company_info
  4. ❌ Technical indicators from fundamentals (52-week high/low)

Research Strategy:

  • Heavy focus: Price patterns + news catalysts (excellent data)
  • Medium focus: Basic fundamental trends (profitability, growth)
  • Light focus: Current fundamental validation (post-surge analysis)
  • Workaround: Calculate missing metrics from price data where possible

🔬 Analysis Methodology

Phase 1: Data Collection & Preparation

Tasks:

  • Identify 50-100 high-growth stocks (manual/external screening)
  • For each stock, run analyze --date at quarterly intervals
  • Extract and consolidate available data:
    • Full price history ✅
    • Full news archives ✅
    • Basic historical fundamentals (Yahoo Finance quarterly) ⚠️
    • Current comprehensive fundamentals (Alpha Vantage) ✅
    • Analyst snapshots (3-month windows) ⚠️
  • Create master dataset CSV
  • Calculate derived metrics from price data (market cap estimates, valuation proxies)

Workarounds for Missing Historical Data:

def calculate_approximate_metrics(ticker, date, price_data, fundamental_data):
    """Calculate approximate metrics from available data."""
    
    # Get price at the historical date
    price_at_date = price_data[price_data['date'] == date]['close'].iloc[0]
    
    # Approximate market cap from shares outstanding
    shares = fundamental_data.get('shares_outstanding')
    approx_market_cap = price_at_date * shares if shares else None
    
    # Approximate P/E from EPS
    eps = fundamental_data.get('eps')
    approx_pe = price_at_date / eps if eps and eps > 0 else None
    
    # Approximate P/B from book value
    book_value = fundamental_data.get('book_value')
    approx_pb = price_at_date / book_value if book_value and book_value > 0 else None
    
    return {
        'approx_market_cap': approx_market_cap,
        'approx_pe': approx_pe,
        'approx_pb': approx_pb,
        'price_at_date': price_at_date,
    }

Phase 2: Price Pattern Analysis (STRONGEST)

Deliverable: Technical pattern identification

Focus: This will be the primary strength of the research.

Analysis:

  • Complete price history analysis
  • Technical indicators (RSI, MACD, volume, moving averages)
  • Breakout patterns
  • Volume spikes
  • Volatility expansion
  • Support/resistance levels

Phase 3: News & Catalyst Analysis (STRONGEST)

Deliverable: Catalyst taxonomy and event timeline

Focus: Second primary strength of the research.

Analysis:

  • Complete news timeline
  • Catalyst identification (FDA, earnings, M&A, partnerships)
  • Sentiment analysis
  • News volume patterns
  • News-price correlation

Phase 4: Basic Fundamental Analysis (LIMITED)

Deliverable: Profitability and growth trends

Data Available Historically:

  • ✅ Profitability: profit_margin, operating_margin, ROE
  • ✅ Revenue: revenue_ttm, gross_profit_ttm, EBITDA
  • ✅ Earnings: EPS, diluted_eps_ttm
  • ✅ Size: shares_outstanding, book_value
  • ❌ Valuation ratios: P/E, P/B, PEG (must calculate approximate)

Analysis:

  • Profitability trends

    • Margin expansion during surge?
    • ROE improvement?
  • Growth trends

    • Revenue growth acceleration
    • EPS growth rate
  • Approximate valuations (calculated)

    • Estimated P/E from price/EPS
    • Estimated P/B from price/book_value
    • Were stocks undervalued before surge?
  • Current fundamental validation

    • Comprehensive Alpha Vantage data for current state
    • Post-surge valuation characteristics

Code Example:

def analyze_fundamental_trends(ticker, dates, price_data):
    """Analyze fundamental trends with available data."""
    
    snapshots = []
    
    for date in dates:
        # Get historical fundamental data (Yahoo Finance quarterly)
        fundamental_data = extract_fundamental_data(ticker, date)
        
        # Calculate approximate metrics
        derived = calculate_approximate_metrics(ticker, date, price_data, fundamental_data)
        
        snapshots.append({
            'date': date,
            # Available from Yahoo Finance
            'profit_margin': fundamental_data.get('profit_margin'),
            'operating_margin': fundamental_data.get('operating_margin'),
            'roe': fundamental_data.get('return_on_equity'),
            'revenue': fundamental_data.get('revenue_ttm'),
            'eps': fundamental_data.get('eps'),
            # Calculated approximations
            'approx_market_cap': derived['approx_market_cap'],
            'approx_pe': derived['approx_pe'],
            'approx_pb': derived['approx_pb'],
        })
    
    df = pd.DataFrame(snapshots)
    
    # Analyze trends
    return {
        'ticker': ticker,
        'margin_expanding': df['profit_margin'].diff().mean() > 0,
        'roe_improving': df['roe'].diff().mean() > 0,
        'revenue_accelerating': df['revenue'].pct_change().diff().mean() > 0,
        'approx_pe_expansion': df.iloc[-1]['approx_pe'] / df.iloc[0]['approx_pe'],
        'started_undervalued': df.iloc[0]['approx_pe'] < 15 if df.iloc[0]['approx_pe'] else None,
    }

Phase 5: Analyst Rating Snapshots (LIMITED)

Deliverable: Quarterly analyst coverage trends

Data: 3-month snapshots from analyst_data section

Analysis:

  • Analyst coverage growth
  • Rating distribution changes
  • Bullish ratio trends

Phase 6: Sector & Market Context

Analysis:

  • Sector concentration
  • Market regime (bull/bear)
  • Secular trends
  • Timing patterns

Phase 7: Pattern Synthesis

Deliverable: Growth archetypes and screening criteria

Focus Areas (prioritized by data quality):

PRIMARY INSIGHTS (excellent data):

  1. ✅ Technical breakout patterns
  2. ✅ Catalyst types (FDA, earnings, M&A)
  3. ✅ Volume/volatility signals
  4. ✅ News sentiment shifts

SECONDARY INSIGHTS (limited data):
5. ⚠️ Profitability improvement (margins, ROE)
6. ⚠️ Growth acceleration (revenue, EPS)
7. ⚠️ Approximate valuation patterns (calculated P/E, P/B)

Expected Patterns:

  • Technical: "RSI < 30 + volume spike + golden cross"
  • Catalyst: "Biotech stocks: FDA approval → 150%+ surge"
  • Fundamental: "Margin expansion + revenue acceleration"
  • Valuation: "Low approx P/E (<15) → catalyst → re-rating"

📦 Deliverables

Primary Output: Jupyter Notebook

File: notebooks/research_high_growth_stocks.ipynb

Structure:

# Market Research: 50-500% Annual Return Stocks

## Executive Summary
- Key findings (price/catalyst focused)
- Growth archetypes
- Screening criteria
- Data limitations acknowledged

## 1. Methodology & Data Constraints
- Data collection approach
- **Data availability by source**:
  - ✅✅ Price: Full (Yahoo Finance)
  - ✅✅ News: Full (News APIs)
  - ⚠️ Fundamentals: Partial (Yahoo Finance quarterly)
  - ⚠️ Analyst: 3-month snapshots (Finnhub)
- Workarounds for missing data
- Derived metric calculations

## 2. Dataset Overview
- 50-100 stocks analyzed
- Sector distribution
- Return categories
- Sample characteristics

## 3. Price Pattern Analysis (STRONGEST)
- Complete technical analysis
- Breakout patterns
- Volume signals
- Common technical characteristics

## 4. News & Catalyst Analysis (STRONGEST)
- Event timeline
- Catalyst taxonomy
- Sentiment patterns
- Catalyst-price correlation

## 5. Basic Fundamental Analysis (LIMITED)
- Profitability trends (margins, ROE)
- Growth trends (revenue, EPS)
- Approximate valuations (calculated P/E, P/B)
- Current fundamental validation (Alpha Vantage)
- ⚠️ Historical valuation limitations noted

## 6. Analyst Coverage Trends (LIMITED)
- Quarterly snapshots
- Coverage growth
- ⚠️ 3-month window limitation

## 7. Sector & Market Context
- Sector concentration
- Market regime
- Timing patterns

## 8. Pattern Synthesis
- Multi-factor patterns
- Growth archetypes (4-5 types)
- Early warning signals
- Screening criteria (price/catalyst/fundamental)

## 9. Limitations & Caveats
- ⚠️ Historical fundamentals: Yahoo Finance only (no P/E, P/B, etc.)
- ⚠️ Analyst data: 3-month windows
- ✅ Approximated metrics where possible
- Survivorship bias
- Correlation ≠ causation

## 10. Conclusions
- Key takeaways (price/catalyst focused)
- Screening model
- Future enhancement with #127

Supporting Artifacts

  • Master dataset CSV: data/research/high_growth_stocks_dataset.csv
  • Calculation notebook: Code for derived metrics
  • Summary report: docs/research_high_growth_stocks_summary.md
  • Visualizations: data/research/visualizations/

🎯 Hypotheses (Adjusted for Data Availability)

Hypothesis 1: Technical Breakout Pattern

Test: RSI, MACD, volume patterns (FULL DATA ✅)

Hypothesis 2: Biotech Catalyst Dominance

Test: Sector analysis + catalyst type (FULL DATA ✅)

Hypothesis 3: Profitability Improvement

Test: Margin expansion, ROE trends (PARTIAL DATA ⚠️)

Hypothesis 4: Approximate Valuation Re-Rating

Test: Calculated P/E expansion (DERIVED DATA ⚠️)

Hypothesis 5: Growth Acceleration

Test: Revenue/EPS growth trends (PARTIAL DATA ⚠️)

✅ Acceptance Criteria

Phase 1: Data Collection (Week 1)

  • Identify 50-100 high-growth stocks
  • Fetch data via analyze --date (quarterly snapshots)
  • Extract available fundamental data
  • Calculate derived metrics (approx P/E, P/B, market cap)
  • Create master dataset

Phase 2-6: Analysis (Week 2-3)

  • Complete price pattern analysis (PRIMARY)
  • Complete catalyst analysis (PRIMARY)
  • Complete basic fundamental analysis (with limitations noted)
  • Complete analyst snapshot analysis
  • Sector/market context

Phase 7: Synthesis (Week 3-4)

  • Identify 3-5 patterns (prioritize price/catalyst)
  • Create growth archetypes
  • Develop screening criteria
  • Document workarounds and limitations

Phase 8: Documentation (Week 4)

  • Clean notebook with methodology section
  • Document derived metric calculations
  • Create summary report
  • Visualizations

🎓 Final Data Quality Summary

Analysis Area Data Quality Approach
Price patterns ✅✅ Excellent Full historical data
News/catalysts ✅✅ Excellent Full archives
Profitability trends ✅ Good Yahoo Finance quarterly
Growth trends ✅ Good Yahoo Finance quarterly
Valuation analysis ⚠️ Fair Approximate (calculated)
Analyst trends ⚠️ Fair 3-month snapshots

Research Strength: Price/technical analysis + catalyst identification

Research Limitation: Historical valuation metrics (must approximate)

Workaround: Calculate P/E, P/B, market cap from available data

🔗 Related Issues

🏷️ Labels

research, data-analysis, investment-strategy, jupyter-notebook

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions