📋 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
- What fundamental patterns exist? Do high-growth stocks share similar valuation metrics, growth rates, or financial health characteristics before their surge?
- Are there technical indicators? Can we identify price/volume patterns that preceded the exceptional growth?
- What role does news/sentiment play? Are there common narrative patterns or sentiment shifts?
- Sector concentration? Are certain sectors overrepresented? Why?
- Catalyst identification? What events (earnings beats, FDA approvals, M&A, product launches) triggered the growth?
- Market conditions? Did these stocks surge during specific market regimes (bull markets, sector rotations)?
- 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:
- ✅✅ Complete price/technical analysis (full history)
- ✅✅ Complete news/catalyst analysis (full archives)
- ✅ Basic historical fundamentals (profitability, revenue, EPS)
- ✅ Current fundamental profile (comprehensive Alpha Vantage)
- ⚠️ Analyst snapshots (3-month windows)
What we CANNOT analyze historically:
- ❌ Valuation evolution (P/E, P/B, PEG over time)
- ❌ Market cap changes
- ❌ Historical analyst ratings embedded in company_info
- ❌ 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:
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:
Phase 3: News & Catalyst Analysis (STRONGEST)
Deliverable: Catalyst taxonomy and event timeline
Focus: Second primary strength of the research.
Analysis:
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:
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:
Phase 6: Sector & Market Context
Analysis:
Phase 7: Pattern Synthesis
Deliverable: Growth archetypes and screening criteria
Focus Areas (prioritized by data quality):
PRIMARY INSIGHTS (excellent data):
- ✅ Technical breakout patterns
- ✅ Catalyst types (FDA, earnings, M&A)
- ✅ Volume/volatility signals
- ✅ 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
🎯 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)
Phase 2-6: Analysis (Week 2-3)
Phase 7: Synthesis (Week 3-4)
Phase 8: Documentation (Week 4)
🎓 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
📋 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
📊 Dataset: High-Growth Stocks (50-500% Annual Return)
Initial Sample Set
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 Yto fetch and cache historical data.Example:
When running
analyze --ticker X --date Y:📊 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):
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:
What we CANNOT analyze historically:
Research Strategy:
🔬 Analysis Methodology
Phase 1: Data Collection & Preparation
Tasks:
analyze --dateat quarterly intervalsWorkarounds for Missing Historical Data:
Phase 2: Price Pattern Analysis (STRONGEST)
Deliverable: Technical pattern identification
Focus: This will be the primary strength of the research.
Analysis:
Phase 3: News & Catalyst Analysis (STRONGEST)
Deliverable: Catalyst taxonomy and event timeline
Focus: Second primary strength of the research.
Analysis:
Phase 4: Basic Fundamental Analysis (LIMITED)
Deliverable: Profitability and growth trends
Data Available Historically:
Analysis:
Profitability trends
Growth trends
Approximate valuations (calculated)
Current fundamental validation
Code Example:
Phase 5: Analyst Rating Snapshots (LIMITED)
Deliverable: Quarterly analyst coverage trends
Data: 3-month snapshots from
analyst_datasectionAnalysis:
Phase 6: Sector & Market Context
Analysis:
Phase 7: Pattern Synthesis
Deliverable: Growth archetypes and screening criteria
Focus Areas (prioritized by data quality):
PRIMARY INSIGHTS (excellent data):
SECONDARY INSIGHTS (limited data):⚠️ Profitability improvement (margins, ROE)⚠️ Growth acceleration (revenue, EPS)⚠️ Approximate valuation patterns (calculated P/E, P/B)
5.
6.
7.
Expected Patterns:
📦 Deliverables
Primary Output: Jupyter Notebook
File:
notebooks/research_high_growth_stocks.ipynbStructure:
Supporting Artifacts
data/research/high_growth_stocks_dataset.csvdocs/research_high_growth_stocks_summary.mddata/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)
analyze --date(quarterly snapshots)Phase 2-6: Analysis (Week 2-3)
Phase 7: Synthesis (Week 3-4)
Phase 8: Documentation (Week 4)
🎓 Final Data Quality Summary
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
Critical Enhancement: Data Collection Pipeline: Historical Fundamental Data Persistence #127 (Fundamental data collection)
Related: feat: Create comprehensive Jupyter notebooks for testing and exploration #126 (Notebook environment)
🏷️ Labels
research, data-analysis, investment-strategy, jupyter-notebook