| name | stock-evaluator-v3 |
| description | Comprehensive evaluation of potential stock investments combining valuation analysis, fundamental research, technical assessment, and clear buy/hold/sell recommendations. Use when the user asks about buying a stock, evaluating investment opportunities, analyzing watchlist candidates, or requests stock recommendations. Provides specific entry prices, position sizing, and conviction ratings. |
Stock Evaluator (Enhanced)
⚠️ CRITICAL: MANDATORY DELIVERABLES CHECKLIST
Every analysis MUST include ALL of these:
- ☐ Technical Analysis (price action, indicators, key levels, Ichimoku Cloud)
- ☐ Fundamental Analysis (business, financials, competitive position)
- ☐ Advanced Financial Metrics (F-Score, Z-Score, M-Score, Max Drawdown, Value Trap Score)
- ☐ Investor Persona Scores (8 legendary investor frameworks)
- ☐ Valuation Assessment (multiple methods with margin of safety)
- ☐ Bull vs. Bear Case (both sides with balance assessment)
- ☐ Clear Recommendation (BUY / HOLD / SELL with conviction rating)
- ☐ Alternative Candidates (if SELL: provide 3-5 better alternatives)
- ☐ Enhanced Quant-Style Dashboard (React dashboard with 60+ metrics, Ichimoku, investor personas, TOP NEWS, and key notes)
If you cannot complete any item, STOP and ask for clarification.
⚠️ CRITICAL: DATA INTEGRITY RULES
ZERO FABRICATION POLICY
NEVER fabricate, estimate, or hallucinate ANY numeric data point. Every metric in the dashboard MUST come from:
- A web search result with a cited source
- Company filings (10-K, 10-Q, earnings reports)
- Official financial data providers
If data cannot be found → Use "N/A" or "--"
MANDATORY WEB SEARCHES (minimum per analysis)
You MUST perform these searches before populating the dashboard:
| Search # | Query Template | Data Retrieved |
|---|
| 1 | "[TICKER] stock price market cap P/E ratio" | Price, Market Cap, P/E |
| 2 | "[TICKER] ROE ROA profit margin 2024 annual report" | Financial ratios |
| 3 | "[TICKER] revenue growth earnings growth FY2024" | Growth rates (REPORTED) |
| 4 | "[TICKER] Piotroski F-Score" | F-Score (or calculate) |
| 5 | "[TICKER] insider trading SEC Form 4 2025" | Insider buys/sells |
| 6 | "[TICKER] short interest percentage float" | Short interest |
| 7 | "[TICKER] RSI MACD 50-day 200-day moving average beta volatility" | Technical indicators |
| 8 | "[TICKER] analyst price target consensus" | Analyst targets |
DATA SOURCE HIERARCHY
Use sources in this priority order:
- Official company filings (SEC EDGAR, company investor relations)
- Exchange data (NYSE, NASDAQ, LSE official)
- Verified financial data (Yahoo Finance, Google Finance, MarketWatch)
- SEC Form 4 (for insider trading ONLY)
- FINRA/exchange (for short interest ONLY)
PROHIBITED
- Using training knowledge for ANY specific current numbers
- Analyst reports (per user preference)
- Estimates without sourcing
- "Common knowledge" assumptions
HANDLING UNAVAILABLE DATA
| Situation | Action | Display |
|---|
| Metric not found after searching | Display "N/A" | value: "N/A" |
| Data is outdated (>1 year old) | Note the date | value: "15.2% (2023)" |
| Conflicting sources | Use most authoritative | Note in analysis |
| Calculated metric (F-Score) | Show calculation | Explain in text |
| Insider data unavailable | Show "N/A" | insBuys: "N/A" |
CRITICAL: Zero means "zero occurred" - NEVER substitute zeros for missing data.
STANDARDIZED METRIC LABELS
Use these EXACT labels in the dashboard (matches reference screenshots):
Row 1: PRICE & VALUATION | FINANCIAL PERFORMANCE
| Label | Notes |
|---|
| Price: | $XX.XX or €XX.XX |
| Market Cap: | $XXB or €XXB |
| Trailing P/E: | XX.XX |
| Forward P/E: | XX.XX |
| Subsector P/E: | XX.XX or N/A |
| PEG (1Y): | X.XX with benchmark (<1) |
| ROE: | XX.XX% with benchmark (>20%) |
| ROA: | XX.XX% with benchmark (>10%) |
| Profit Margin: | XX.XX% with benchmark (>20%) |
| Operative Margin: | XX.XX% with benchmark (>20%) - NOTE: "Operative" not "Operating" |
| Gross Margin: | XX.XX% with benchmark (>40%) |
| ROIC: | XX.X% with benchmark (>15%) |
Row 2: GROWTH METRICS | RISK INDICATORS
| Label | Notes |
|---|
| Revenue (YoY): | XX.XX% with benchmark (>10%) - REPORTED only |
| Earning (YoY): | XX.XX% with benchmark (>0%) - REPORTED only |
| EPS (TTM): | $X.XX |
| Forward EPS: | $X.XX |
| Growth Rates: | Capped: X.X% / Uncapped: X.X% |
| Analyst Target: | $XX.XX |
| CRS (0-1): | X.XX with benchmark (Medium) |
| Debt/Equity (mrq): | X.XX with benchmark (0.5-1) |
| Piotroski F: | X with benchmark (≥7) |
| Altman Z: | X.XX with benchmark (>3) |
| Beneish M: | X.XX with benchmark (<-1.78) |
| Value Trap: | XX (Label) |
Row 3: LIQUIDITY & FREE CASH FLOW | INSIDER & SENTIMENT & CLASS
| Label | Notes |
|---|
| Current Ratio: | X.XX with benchmark (1-2) |
| Cash: | $X.XB |
| Debt: | $X.XB or N/A |
| FCF Growth 5Y: | XX.X% with benchmark (>5%) |
| FCF Yield: | X.XX% with benchmark (>4%) |
| FCF Margin: | XX.XX% with benchmark (>15%) |
| Payout Ratio: | XX.XX% with benchmark (<50%) |
| Buys (12M): | X - from SEC Form 4 or N/A |
| Sells (12M): | X - from SEC Form 4 or N/A |
| Net Shares (12M): | +/-XXK - from SEC Form 4 or N/A |
| Short Int (%): | X.X% |
| Sentiment / Articles: | +X.XXX / XX (Positive/Negative) |
| Stock: [Type] + Div Yield: | Combined: "Stock: Growth" + "Div Yield: X.XX%" |
| Sector/Industry: | Combined: "Sector / Industry" |
Row 4: QUALITY SCORES | MOAT & OTHER
| Label | Notes |
|---|
| CQVS: | XX.XX with benchmark range |
| Label: | Strong/Moderate/Weak |
| Valuation: | XX.XX |
| Quality: | XX.XX |
| Strength: | XX.XX |
| Integrity: | XX.XX |
| Buffett Moat: | X with benchmark (4-7) |
| Greenblatt (MF): | EY: X.X% / ROC: X.X% or N/A |
| Beta: + Vol 1Y: | Combined: "Beta: X.XX" + "Vol 1Y: XX.X%" |
| Earnings Predict.: | XX.X% with benchmark (>80%) |
| Drawdown (5Y): | -XX.X% with label (Low/Mid/High) |
| Completeness: + Data Quality: | Combined: "XX.X%" + "High/Medium/Low" |
STANDARDIZED BENCHMARKS (Single Source of Truth)
Use these EXACT thresholds for color coding:
| Metric | Green (Good) | Yellow (Neutral) | Red (Warning) |
|---|
| ROE | >20% | 10-20% | <10% |
| ROA | >10% | 5-10% | <5% |
| Profit Margin | >20% | 10-20% | <10% |
| Operative Margin | >20% | 10-20% | <10% |
| Gross Margin | >40% | 25-40% | <25% |
| ROIC | >15% | 8-15% | <8% |
| Debt/Equity | <1 | 1-2 | >2 |
| Current Ratio | 1-2 | 0.5-1 or 2-3 | <0.5 or >3 |
| Piotroski F | ≥7 | 4-6 | ≤3 |
| Altman Z | >2.99 | 1.81-2.99 | <1.81 |
| Beneish M | <-2.22 | -2.22 to -1.78 | >-1.78 |
| PEG (1Y) | <1 | 1-2 | >2 |
| RSI (14) | 30-50 | 50-70 | >70 or <30 |
| Short Interest | <5% | 5-10% | >10% |
| FCF Yield | >5% | 2-5% | <2% |
| FCF Margin | >15% | 10-15% | <10% |
| Dividend Yield | >2% | 1-2% | <1% or >8% |
| Value Trap | 0-39 | 40-59 | 60-100 |
| Max Drawdown | >-30% | -30% to -50% | <-50% |
| Revenue Growth | >10% | 0-10% | <0% |
| Earnings Growth |
Overview
This skill provides institutional-grade evaluation of potential stock investments. Unlike portfolio analysis which reviews existing positions, this skill evaluates stocks you're considering buying or deciding whether to purchase.
The evaluation answers:
- Should I buy this stock?
- At what price should I enter?
- How much should I allocate?
- What's my upside and downside?
- When should I sell?
Default Currency: € (Euro)
All monetary values in the dashboard should be displayed in Euro (€) as the default currency:
- Price: €42.13
- Market Cap: €78.3B
- Analyst Target: €56.45
- Entry/Stop/Target prices: €38, €35, €56
- EPS values: €1.39, €1.91
IMPORTANT: Use REPORTED Growth Rates
For the dashboard metrics "Rev Growth" and "Earn Growth":
- USE REPORTED GROWTH - not underlying, adjusted, or organic figures
- Reported figures reflect actual GAAP/IFRS numbers including FX, acquisitions, disposals
- This provides a more accurate picture of what investors actually received
- Example: If underlying growth is 7% but reported is 2.2%, use 2.2%
- Same for earnings: Use reported EPS growth, not adjusted EPS growth
Core Purpose
Stock Evaluator is for:
- ✅ Evaluating potential investments BEFORE buying
- ✅ Analyzing watchlist candidates
- ✅ Getting buy/hold/sell recommendations with specific prices
- ✅ Comparing multiple investment opportunities
- ✅ Finding better alternatives to current consideration
NOT for:
- ❌ Reviewing existing portfolio positions (use Portfolio Analyst skill)
- ❌ General stock market questions
- ❌ Stock screening or discovery from scratch
- ❌ Options, derivatives, or crypto analysis
Evaluation Framework
Five Pillars of Stock Evaluation
1. Valuation Assessment
- Is the stock undervalued, fairly valued, or overvalued?
- Multiple valuation methods (DCF, relative, Peter Lynch, asset-based)
- Margin of safety requirement (15-30%)
- Fair value estimate with confidence range
2. Quality Analysis
- Business model strength and competitive moat
- Financial health and trends (5-10 year view)
- Management quality and capital allocation
- Industry position and competitive advantages
3. Timing Assessment
- Technical setup and entry points
- Near-term catalysts and events
- Market sentiment and positioning
- Optimal entry price range
4. Position Sizing
- Allocation recommendation (% of portfolio)
- Based on conviction, risk, and diversification
- Maximum allocation limits
- Risk-adjusted sizing
5. Conviction Rating
- Strong Buy: High conviction, clear undervaluation, low risk
- Buy: Good opportunity, reasonable valuation, moderate risk
- Hold: Fairly valued, no compelling reason to buy now
- Avoid: Overvalued, significant risks, or better alternatives exist
Value Trap Indicator
What It Is
A Value Trap is when a stock appears undervalued (low P/E, low P/B) but is actually cheap for valid fundamental reasons. The stock keeps declining despite appearing "cheap."
Value Trap Score Calculation (0-100, LOWER = more genuine, HIGHER = more trap)
Components to evaluate (ADD points for trap indicators):
1. Price Momentum (25 points max)
- 6-month price change vs market: If underperforming by >20%, ADD 15-25 points
- 12-month price change: Sustained decline = ADD 10-20 points
- If price momentum is POSITIVE: ADD 0 points
2. Earnings Quality (25 points max)
- EPS trend (3 years): Declining = ADD 10-25 points
- Revenue trend: Declining = ADD 5-15 points
- Margin trend: Compressing = ADD 5-10 points
- If earnings quality is STRONG: ADD 0 points
3. Balance Sheet Health (25 points max)
- Debt levels increasing? ADD 5-15 points
- Cash flow negative or declining? ADD 10-20 points
- Working capital deteriorating? ADD 5-10 points
- If balance sheet is HEALTHY: ADD 0 points
4. Valuation Context (25 points max)
- Is low multiple justified by declining fundamentals? ADD 10-25 points
- Compare current fundamentals to when multiple was higher
- If fundamentals justify valuation: ADD 0 points
Scoring Formula
Value Trap Score = Momentum Penalty + Quality Penalty + Balance Sheet Penalty + Valuation Penalty
(Score ranges from 0 to 100, where 0 = definitely genuine value, 100 = definite value trap)
Score Interpretation
- 0-19: Genuine Value (likely undervalued, fundamentals intact) - GREEN
- 20-39: Probably Genuine (minor concerns, monitor) - LIGHT GREEN
- 40-59: Caution Zone (mixed signals, proceed carefully) - YELLOW
- 60-79: Likely Trap (multiple red flags) - ORANGE
- 80-100: Strong Trap Signal (avoid) - RED
Display Format
Value Trap: 21 (Genuine)
Color coding: green <40, yellow 40-60, red >60
Investor Persona Scores
Score each stock against 8 famous investor philosophies (0-10 scale). This helps users understand what type of investor the stock suits.
1. Warren Buffett Score
Based on "The Warren Buffett Way" - seeks durable competitive advantages
Key metrics weighted:
- ROE (>20%): 2 points
- Profit margin (>15%): 2 points
- Free cash flow positive & growing: 2 points
- Moat strength (brand, pricing power): 2 points
- Predictable earnings: 2 points
Buffett likes: Predictable businesses, pricing power, low capex needs, consistent profitability
2. Charlie Munger Score
Based on "Poor Charlie's Almanack" - mental latticework, inversion thinking
Focus on: What could go WRONG (inversion principle)
Scoring: Start at 10, subtract penalties:
- High debt (D/E > 2): -3 points
- Volatile earnings: -2 points
- Poor management history: -2 points
- No competitive moat: -2 points
- Accounting red flags: -3 points
3. Ray Dalio Score
Based on "Principles" - All-Weather portfolio, economic machine understanding
Key metrics:
- D/E ratio < 1: 2 points
- Beta < 1: 2 points
- Stable margins across cycles: 2 points
- Low earnings volatility: 2 points
- Recession resistance history: 2 points
Dalio likes: Deleveraging plays, operational efficiency, cycle resilience
4. Peter Lynch Score
Based on "One Up on Wall Street" - GARP (Growth at Reasonable Price)
Primary metric: PEG Ratio (P/E ÷ Growth Rate)
- PEG < 0.5: 10 points
- PEG 0.5-1.0: 8 points
- PEG 1.0-1.5: 6 points
- PEG 1.5-2.0: 4 points
- PEG > 2.0: 2 points
Adjustment factors:
- +1 if earnings growing consistently
- +1 if business easy to understand
- -1 if declining industry
5. Benjamin Graham Score
Based on "The Intelligent Investor" - Margin of Safety
Graham criteria (2 points each, max 10):
- P/E < 15
- P/B < 1.5
- Current ratio > 2
- Positive earnings 10 years
- Dividend paid 20+ years
6. Joel Greenblatt Score
Based on "The Little Book That Beats the Market" - Magic Formula
Combines two rankings:
- Earnings Yield (EBIT/EV): Higher = better
- Return on Capital (EBIT/Net Fixed Assets + Working Capital): Higher = better
Scoring: Combined rank in top 10% = 10 points, scaled down
7. John Templeton Score
Based on contrarian, global value investing
Key factors:
- Trading at multi-year lows: +3 points
- Out of favor with analysts: +2 points
- Strong fundamentals despite pessimism: +3 points
- Global perspective (non-US opportunity): +2 points
8. George Soros Score
Based on "The Alchemy of Finance" - Reflexivity
Key factors:
- Momentum and trend strength: 3 points
- Macro tailwinds: 3 points
- Market perception shifting: 2 points
- Inflection point catalyst: 2 points
Soros likes: Macro plays, reflexive situations, trend participation
Display Format
Show 8 badges around radar chart with scores and color coding:
- Green (7-10): Strong fit
- Yellow (4-6.9): Moderate fit
- Red (0-3.9): Poor fit
Enhanced Technical Analysis
Ichimoku Cloud Analysis
Components to Calculate:
- Tenkan-sen (Conversion Line): (9-period high + 9-period low) / 2
- Kijun-sen (Base Line): (26-period high + 26-period low) / 2
- Senkou Span A: (Tenkan-sen + Kijun-sen) / 2, plotted 26 periods ahead
- Senkou Span B: (52-period high + 52-period low) / 2, plotted 26 periods ahead
- Chikou Span (Lagging Span): Current close plotted 26 periods back
Cloud (Kumo): Area between Senkou Span A and B
Signals to Identify and Display:
- TK Bullish Cross: Tenkan-sen crosses above Kijun-sen (bullish) - mark with ◆
- TK Bearish Cross: Tenkan-sen crosses below Kijun-sen (bearish) - mark with ◆
- Kumo Twist Bullish: Cloud changes from red to green - mark with ◆
- Kumo Twist Bearish: Cloud changes from green to red - mark with ◆
- Price vs Cloud: Above cloud (bullish), Below cloud (bearish), In cloud (neutral)
Dual PEG Ratios
- PEG (1Y): P/E ÷ 1-Year Forward Growth Estimate
- PEG (5Y): P/E ÷ 5-Year Historical Growth Rate
- Both provide different perspectives on growth valuation
FCF Margin
- Formula: Free Cash Flow / Revenue × 100
- Benchmark: >15% is excellent, >10% is good
- Shows cash generation efficiency relative to sales
News Sentiment & Short Interest
- News Sentiment: -1 to +1 scale based on recent article sentiment
- Short Interest: % of float sold short (>10% = high, <5% = low)
- Both indicate market sentiment and potential squeeze/reversal
Fundamental Analysis Process
1. Business Understanding (Always First)
What to Analyze:
- What does the company do? (products, services, business model)
- Revenue sources and breakdown
- Target customers and markets
- Competitive advantages (moat sources)
- Market position and share
- Industry dynamics and trends
Management Evaluation:
- CEO background, tenure, track record
- CFO and key executives
- Capital allocation decisions (dividends, buybacks, acquisitions, R&D)
- Management compensation alignment
- Insider trading patterns (buying is bullish signal)
- Leadership quality from earnings calls and letters
Competitive Position:
- Market share and trends
- Key competitors (identify 3-5 direct peers)
- What differentiates this company?
- Sustainable competitive advantages?
2. Financial Analysis (5-10 Year View)
Research Process Order:
- Latest 10-K first - Understand current business and recent results
- Go back 5-10 years through historical 10-Ks - Understand evolution
- Review last 2-3 years of 10-Qs - Current trajectory
- Examine proxy statements - Governance and compensation
Key Metrics to Analyze:
Quality Benchmarks:
- ROE > 15% (return on equity)
- Profit Margin > 15%
- Gross Margin > 30%
- Debt < Annual Revenue
- Positive and growing Free Cash Flow
- Revenue growth over 5 years (inflation-adjusted)
Trends to Assess:
- Revenue growth trajectory (accelerating/stable/decelerating?)
- Margin expansion or contraction (why?)
- Cash flow consistency and quality
- Balance sheet strength (debt levels, liquidity)
- Return on invested capital (ROIC)
- Working capital management
Red Flags:
- Declining margins despite revenue growth
- Negative or inconsistent free cash flow
- Debt growing faster than cash generation
- Losing market share
- Chronic guidance misses
- Accounting irregularities
3. Competitive Moat Assessment
Moat Strength: Wide / Narrow / None
Evaluate Sources:
- Network effects: Product improves with more users?
- Brand loyalty: Pricing power from brand strength?
- Switching costs: Difficult/expensive to switch?
- Regulatory barriers: Licenses, patents, regulations?
- Cost advantages: Scale, technology, location?
- Intangible assets: Patents, trademarks, proprietary data?
Moat Durability:
- How long can advantages be sustained?
- What could erode the moat?
- Is moat strengthening or weakening?
Peer Comparison:
Compare this company's moat vs. 3-5 direct competitors:
- Market share trends
- Profitability metrics (margins, ROE)
- Growth rates
- Financial strength
4. Advanced Financial Health Metrics
Beyond basic quality metrics, calculate these advanced scores for deeper insight:
Piotroski F-Score (Financial Strength)
Purpose: 9-point score measuring financial strength across profitability, leverage, and operating efficiency.
Scoring (0-9, higher is better):
Profitability (4 points):
- ROA > 0: +1
- Operating Cash Flow > 0: +1
- ROA improving YoY: +1
- Cash Flow from Operations > Net Income (quality of earnings): +1
Leverage/Liquidity (3 points):
- Long-term debt decreasing YoY: +1
- Current ratio improving YoY: +1
- No new shares issued in past year: +1
Operating Efficiency (2 points):
- Gross margin improving YoY: +1
- Asset turnover ratio improving YoY: +1
Interpretation:
- 8-9: Excellent financial health
- 6-7: Good financial health
- 4-5: Adequate financial health
- 0-3: Weak financial health
Altman Z-Score (Bankruptcy Risk)
Purpose: Predicts probability of bankruptcy within 2 years.
Formula (for public manufacturing companies):
Z = 1.2(A) + 1.4(B) + 3.3(C) + 0.6(D) + 1.0(E)
Where:
- A = Working Capital / Total Assets
- B = Retained Earnings / Total Assets
- C = EBIT / Total Assets
- D = Market Cap / Total Liabilities
- E = Sales / Total Assets
Interpretation:
- Z > 2.99: Safe Zone (low bankruptcy risk)
- Z 1.81-2.99: Grey Zone (moderate risk)
- Z < 1.81: Distress Zone (high bankruptcy risk)
Note: Adjust for non-manufacturing companies (different coefficients).
Beneish M-Score (Earnings Manipulation Detection)
Purpose: Identifies likelihood of earnings manipulation.
Key Indicators (simplified approach):
- Days Sales Outstanding Index (increasing = warning)
- Gross Margin Index (declining = warning)
- Asset Quality Index (increasing = warning)
- Sales Growth Index (excessive growth = warning)
- Depreciation Index (declining = warning)
- SG&A Index (disproportionate change = warning)
- Leverage Index (increasing = warning)
- Total Accruals to Total Assets (high = warning)
Interpretation:
- M-Score > -1.78: Likely manipulator (RED FLAG)
- M-Score < -1.78: Unlikely manipulator (clean)
Practical Check (if full M-Score unavailable):
- Are accruals consistently high relative to cash flow?
- Is DSO rising faster than revenue?
- Are margins declining with revenue growth?
- Any accounting restatements or auditor changes?
Max Drawdown (5-Year)
Purpose: Measures largest peak-to-trough price decline.
Calculation:
- Identify highest price in past 5 years
- Find lowest subsequent price before recovery
- Max Drawdown % = (Low - High) / High × 100
Interpretation:
- 0-20%: Low volatility (defensive stock)
- 20-40%: Moderate volatility (typical stock)
- 40-60%: High volatility (cyclical/growth)
- >60%: Extreme volatility (speculative)
Consolidated Scores
Strength Score (0-100):
Composite of:
- Financial metrics (F-Score contribution)
- Profitability (ROE, margins)
- Growth rates
- Market position
Integrity Score (0-100):
Composite of:
- M-Score (earnings quality)
- Cash flow vs. earnings alignment
- Accounting practices
- Management transparency
Predictability Score (0-100):
Composite of:
- Revenue consistency (low volatility)
- Earnings consistency
- Business model stability
- Cyclicality assessment
Data Quality Score (0-100):
- Completeness of financial data
- Recency of filings
- Auditor quality
- Disclosure transparency
5. Risk Analysis
Company-Specific Risks:
- Execution risk (can management deliver?)
- Competition risk (share loss, new entrants)
- Product concentration (single product dependency)
- Customer concentration (few large customers)
- Key person risk (CEO dependency)
- Financial distress risk (Z-Score assessment)
- Earnings quality risk (M-Score assessment)
Industry Risks:
- Disruption (technology or business model)
- Cyclicality (economic sensitivity)
- Regulation (policy changes)
- Commoditization (pricing power erosion)
- Structural decline (secular headwinds)
Macro Risks:
- Economic (recession, inflation, rates)
- Geopolitical (trade wars, conflicts)
- Currency (FX exposure)
- Market (valuation levels, sentiment)
Overall Risk Level: Low / Moderate / High
Consolidated Risk Score: (0-1 scale, lower is better)
- Incorporates: Z-Score, volatility, leverage, earnings quality
- <0.30: Low Risk
- 0.30-0.60: Moderate Risk
-
0.60: High Risk
Valuation Assessment
Use multiple valuation methods - synthesize into fair value estimate.
Required Valuation Methods
1. DCF Analysis (Discounted Cash Flow)
- Project free cash flows (5-10 years)
- Apply appropriate discount rate (WACC)
- Calculate terminal value
- Include margin of safety: 15-30%
- Sensitivity analysis with different assumptions
2. Relative Valuation
- Compare to 3-5 direct peer companies
- Key multiples: P/E, EV/EBITDA, Price/Sales, Price/Book
- Adjust for growth differentials
- Consider industry-specific multiples
- Use both current and historical peer averages
3. Peter Lynch Fair Value
- Growth-at-reasonable-price framework
- Compare P/E to growth rate (PEG ratio)
- Fair value when P/E ≈ growth rate
- Adjust for quality factors
4. Asset-Based (When Applicable)
- For REITs, financials, asset-heavy companies
- Book value or replacement cost
- Net asset value calculations
Valuation Synthesis
Fair Value Estimate: €X.XX
Weight each method appropriately:
- DCF: 40% (if reliable cash flows)
- Relative: 30% (peer comparison)
- Peter Lynch: 30% (growth-adjusted)
Margin of Safety:
- Current Price vs. Fair Value: X% discount/premium
- Required: Minimum 15% margin of safety
- Adequate: 15-30% margin of safety
- Excellent: >30% margin of safety
Valuation Conclusion:
- UNDERVALUED: >15% below fair value (buy opportunity)
- FAIRLY VALUED: Within ±15% of fair value (hold)
- OVERVALUED: >15% above fair value (avoid/sell)
Technical Analysis (Entry Timing)
Focus on identifying optimal entry points, not full technical analysis.
Key Technical Elements
1. Price Action (Last 30-60 Days)
- Current trend: Uptrend / Downtrend / Range-bound
- Recent price pattern
- Volume trends (increasing on rallies?)
- Momentum assessment
2. Key Levels
- Support levels: Where buying interest emerges
- Primary support: €X.XX
- Secondary support: €X.XX
- Resistance levels: Where selling pressure increases
- Primary resistance: €X.XX
- Secondary resistance: €X.XX
3. Technical Indicators
- RSI (Relative Strength Index):
-
70 = Overbought (may pullback)
- <30 = Oversold (potential bounce)
- 40-60 = Neutral
- MACD (Moving Average Convergence Divergence):
- Bullish crossover / Bearish crossover / Neutral
- Momentum accelerating or decelerating?
- Moving Averages:
- 50-day MA: €X.XX (price above/below?)
- 200-day MA: €X.XX (trend indicator)
4. Entry Assessment
- Technical Setup: Bullish / Neutral / Bearish
- Optimal Entry: Wait for pullback to support / Buy at market / Wait for breakout
- Entry Price Range: €X.XX - €X.XX
- Avoid Above: €X.XX (poor risk/reward)
Bull vs. Bear Case Analysis
MANDATORY: Every analysis must present both sides fairly.
Bull Case (Optimistic Scenario)
Potential Upside: +X% to €X.XX
- [Key bull argument 1 with specific evidence]
- [Key bull argument 2 with specific evidence]
- [Key bull argument 3 with specific evidence]
For this to play out:
- [Required condition 1]
- [Required condition 2]
Bear Case (Pessimistic Scenario)
Potential Downside: -X% to €X.XX
- [Key bear argument 1 with specific evidence]
- [Key bear argument 2 with specific evidence]
- [Key bear argument 3 with specific evidence]
This happens if:
- [Risk trigger 1]
- [Risk trigger 2]
Balance Assessment
Which case is more probable: [Bull / Bear / Balanced]
[Explanation of why one case is more likely, considering:
- Quality of evidence for each side
- Historical precedent
- Management track record
- Industry dynamics
- Current valuation]
Investment Recommendation Structure
BUY Recommendation Criteria
- Fair value >15% above current price (adequate margin of safety)
- Strong or improving fundamentals
- Reasonable or bullish technical setup
- Identifiable catalysts
- Acceptable risk level
- Conviction: Strong Buy or Buy
HOLD Recommendation Criteria
- Fair value within ±15% of current price
- Stable fundamentals, no compelling catalyst
- Better opportunities may exist elsewhere
- Wait for better entry price
- Conviction: Hold
SELL/AVOID Recommendation Criteria
- Fair value <-15% below current price (overvalued)
- Deteriorating fundamentals
- Significant risks
- Better alternatives available
- Must provide 3-5 alternative candidates
- Conviction: Avoid
Position Sizing Framework
Allocation recommendation based on:
Conviction + Risk = Position Size
Strong Buy (High Conviction, Low Risk):
- Position size: 5-8% of portfolio
- Maximum: 10%
Buy (Moderate Conviction, Moderate Risk):
- Position size: 3-5% of portfolio
- Maximum: 7%
Speculative/High Risk:
- Position size: 1-3% of portfolio
- Maximum: 5%
Considerations:
- Diversification needs (avoid sector concentration)
- Correlation with existing holdings
- Overall portfolio risk
- Liquidity requirements
- User's risk tolerance (from project context)
Entry and Exit Strategy
Entry Strategy
NO scale-in strategies - recommend single entry approach:
If BUY:
- Ideal Entry Price: €X.XX - €X.XX (optimal range)
- Maximum Buy Price: €X.XX (above this, risk/reward unfavorable)
- Approach:
- "Buy now at market" (if currently at good price)
- "Wait for pullback to €X.XX support" (if extended)
- "Buy on break above €X.XX" (if breakout setup)
- "Don't buy above €X.XX" (if overvalued)
Exit Strategy
Price Target (12-month): €X.XX (+X% upside)
- Conservative: €X.XX
- Base case: €X.XX
- Optimistic: €X.XX
Stop Loss: €X.XX (-X% maximum loss)
- Technical stop: Below key support
- Fundamental stop: If thesis breaks
Sell If (Thesis-Breaking Conditions):
- [Specific fundamental deterioration]
- [Specific competitive threat]
- [Specific valuation threshold]
Hold Duration:
- Expected timeframe: [6-12 months / 1-3 years / 3-5+ years]
- Based on investment type (swing trade vs long-term hold)
Catalyst Identification
Identify specific events that could drive stock performance.
Near-Term (0-6 months):
- Upcoming earnings: [Date]
- Product launches: [Event]
- Regulatory decisions: [Expected timing]
- Industry events: [Conference, data release]
Medium-Term (6-18 months):
- Market expansion plans
- New product cycles
- Margin expansion initiatives
- Strategic partnerships
Long-Term (18+ months):
- Structural industry trends
- Market share gains
- Technological leadership
- Business model evolution
Key Analytical Constraints
Critical Principles:
-
No Press/News for Fundamental Analysis
- Use company filings only (10-K, 10-Q, 8-K, proxy)
- Use earnings call transcripts
- Do NOT rely on news articles or press releases
- Exception: News for recent developments, but verify in filings
-
Magnitude Over Precision
- Focus on stocks with good margin of safety (>15%)
- Don't need perfect forecasts
- Better to be approximately right than precisely wrong
- Conservative assumptions better than optimistic
-
Long-Term View
- Analyze 5-10 year trends, not just recent quarters
- Temporary setbacks vs. structural problems
- Sustainable competitive advantages matter most
- Short-term noise vs. long-term signal
-
Compare Apples to Apples
- Benchmark against 3-5 direct competitors
- Not just broad market indices
- Industry-specific metrics and norms
- Adjust for company size and maturity
-
Intellectual Honesty
- Acknowledge limitations and unknowns
- Present both bull and bear cases fairly
- Say "I don't know" when appropriate
- Update views when evidence changes
Output Template
# [SYMBOL] - [Company Name] Evaluation
## ⚠️ DELIVERABLES CHECKLIST ✓
☑ Technical Analysis Complete
☑ Fundamental Analysis Complete
☑ Valuation Assessment Complete
☑ Bull vs. Bear Case Complete
☑ Clear Recommendation: **[BUY / HOLD / SELL]**
☑ Alternative Candidates: [If SELL, list 3-5 alternatives below]
---
## 📊 Executive Summary
[2-3 sentence bottom-line assessment with key reasoning]
**Recommendation: [BUY / HOLD / SELL]**
**Conviction: [Strong Buy / Buy / Hold / Avoid]**
---
## 💰 Valuation Assessment
**Fair Value Estimate: €X.XX** (Current: €X.XX)
- **Margin of Safety: X%** [Adequate >15% / Insufficient <15%]
- **Valuation: [UNDERVALUED / FAIRLY VALUED / OVERVALUED]**
| Valuation Method | Fair Value | vs. Current | Weight |
|-----------------|-----------|-------------|--------|
| DCF Analysis | €X.XX | +X% | 40% |
| Peer Relative | €X.XX | +X% | 30% |
| Peter Lynch | €X.XX | +X% | 30% |
| **Weighted Average** | **€X.XX** | **+X%** | **100%** |
**Assumptions:**
- DCF: [Key assumptions - growth rate, margins, discount rate]
- Margin of safety applied: X%
---
## 🏢 Business & Competitive Analysis
### What They Do
[2-3 paragraph business model summary:
- Core products/services
- Revenue breakdown
- Target markets
- Business model]
### Competitive Advantages
**Moat Strength: [Wide / Narrow / None]**
1. **[Advantage 1]**: [Detailed explanation with evidence]
2. **[Advantage 2]**: [Detailed explanation with evidence]
3. **[Advantage 3]**: [Detailed explanation with evidence]
**Moat Durability:** [How sustainable are these advantages? 3-5 years? 10+ years?]
: [Name] - [Background, tenure]
Track record: [Achievements/concerns]
Capital allocation: [Shareholder-friendly? Smart acquisitions?]
: [Name] - [Financial stewardship]
: [Recent buying/selling activity]
: [Overall management assessment]
Market share: X% (#X in industry)
Share trend: [Gaining / Stable / Losing]
[List 3-5 direct peers]
| Company | Mkt Cap | Revenue Growth | Profit Margin | ROE | P/E | Moat |
|---------|---------|---------------|---------------|-----|-----|------|
| [Target] | €XB | X% | X% | X% | X.X | [Rating] |
| [Peer 1] | €XB | X% | X% | X% | X.X | [Rating] |
| [Peer 2] | €XB | X% | X% | X.X | X.X | [Rating] |
| [Peer 3] | €XB | X% | X% | X% | X.X | [Rating] |
[Is this the best company in the sector?]
---
| Metric | Current | 1Y Ago | 3Y Ago | 5Y Ago | Target | Status |
|--------|---------|--------|--------|--------|--------|--------|
| ROE | X% | X% | X% | X% | >15% | [✓/✗] |
| Profit Margin | X% | X% | X% | X% | >15% | [✓/✗] |
| Gross Margin | X% | X% | X% | X% | >30% | [✓/✗] |
| Revenue Growth | X% | X% | X% | X% | >0% | [✓/✗] |
| Debt/Revenue | X.X | X.X | X.X | X.X | <1.0 | [✓/✗] |
| FCF | €XM | €XM | €XM | €XM | Positive | [✓/✗] |
[Excellent 8-9 / Good 6-7 / Adequate 4-5 / Weak 0-3]
X/4
ROA positive: [✓/✗]
Operating CF positive: [✓/✗]
ROA improving: [✓/✗]
CF > Net Income: [✓/✗]
X/3
Debt decreasing: [✓/✗]
Current ratio improving: [✓/✗]
No dilution: [✓/✗]
X/2
Margin improving: [✓/✗]
Turnover improving: [✓/✗]
[Detailed interpretation of F-Score]
[Safe >2.99 / Grey 1.81-2.99 / Distress <1.81]
[Low / Moderate / High]
[Explanation of Z-Score and financial stability]
[Clean <-1.78 / Warning >-1.78]
[High / Moderate / Questionable]
[List any concerning indicators or state "None"]
[Low <20% / Moderate 20-40% / High 40-60% / Extreme >60%]
[Low/Moderate/High volatility explanation]
€X.XX ([Date])
€X.XX ([Date])
(Financial power and market position)
(Earnings quality and transparency)
(Business consistency)
(Information completeness)
[Trend description: growth rate, consistency, drivers]
[Any concerning patterns?]
Gross margin: [Expanding / Stable / Declining]
Operating margin: [Trend]
Net margin: [Trend]
Drivers: [Why are margins moving this way?]
Operating cash flow: [Trend and quality]
Free cash flow: [Consistency, conversion]
Capital allocation: [Dividends, buybacks, capex, acquisitions]
Debt levels: [Conservative / Moderate / High]
Liquidity: [Strong / Adequate / Concerning]
Trend: [Strengthening / Stable / Weakening]
[List any concerning trends or issues, or state "None identified"]
---
: €X.XX
: €X.XX - €X.XX
: [+/-X%]
: [Uptrend / Downtrend / Range-bound]
: [Increasing / Decreasing / Normal]
- [Significance/reason]
- [Significance/reason]
- [Significance/reason]
- [Significance/reason]
: X.X [Overbought >70 / Neutral 30-70 / Oversold <30]
: [Bullish crossover / Bearish crossover / Neutral]
Interpretation: [Momentum assessment]
50-day MA: €X.XX - Price is [above/below]
200-day MA: €X.XX - Price is [above/below]
Golden/Death Cross: [Any recent crossovers?]
[Buy now at market / Wait for pullback to €X.XX / Buy on breakout above €X.XX]
(avoid above this)
---
: [Specific evidence and reasoning]
: [Specific evidence and reasoning]
: [Specific evidence and reasoning]
[Required condition 1]
[Required condition 2]
: [Specific risk and reasoning]
: [Specific risk and reasoning]
: [Specific risk and reasoning]
[Risk trigger 1]
[Risk trigger 2]
[2-3 paragraph explanation of:
Weight of evidence for each side
Historical precedent
Management track record
Industry dynamics
Current valuation
Risk/reward assessment]
---
:
[Specific risk and potential impact. Probability: High/Medium/Low]
:
[Specific risk and potential impact. Probability: High/Medium/Low]
:
[Specific risk and potential impact. Probability: High/Medium/Low]
:
[Specific risk and potential impact. Probability: High/Medium/Low]
[How does the company/investment address these risks?]
[What reduces the risk in this investment?]
---
: [Specific catalyst - earnings, product launch, etc.]
: [Specific catalyst]
[Expected development 1]
[Expected development 2]
[Structural trend 1]
[Structural trend 2]
: [6-12 months / 1-3 years / 3-5+ years]
---
[2-3 paragraph synthesis of entire analysis:
Why this recommendation?
What makes it compelling (or not)?
How does valuation + fundamentals + technicals + catalysts = this conclusion?
What's the risk/reward?]
---
Reasoning: [Why this range?]
Above this: Risk/reward unfavorable
[Buy now at market / Wait for pullback to €X.XX / Buy on breakout above €X.XX]
Reasoning: [Current technical setup justification]
Price exceeds €X.XX without fundamental improvement
[Other specific condition]
---
: €X.XX (+X%)
: €X.XX (+X%)
: €X.XX (+X%)
Technical: Below €X.XX support
Fundamental: If [thesis-breaking condition]
Exit position if any of these occur:
[Specific fundamental deterioration - e.g., "ROE drops below 10% for 2 consecutive quarters"]
[Specific competitive threat - e.g., "Loses >5% market share to competitor"]
[Specific valuation threshold - e.g., "Reaches €X.XX (>50% above fair value)"]
: [6-12 months / 1-3 years / 3-5+ years]
Based on: [Investment type - swing trade vs. long-term hold]
---
Conviction level: [Strong Buy / Buy → drives size]
Risk level: [Low / Moderate / High → constrains size]
Diversification: [Sector exposure, correlation with existing holdings]
Liquidity: [Can exit position easily?]
Risk management limit
Don't exceed even if highly convicted
Strong Buy + Low Risk = 5-8% (max 10%)
Buy + Moderate Risk = 3-5% (max 7%)
Speculative + High Risk = 1-3% (max 5%)
---
[Most compelling positive factor]
[Second most compelling positive factor]
[Third most compelling positive factor]
[Biggest risk or concern]
[Second biggest risk or concern]
[Third biggest risk or concern]
[Single sentence capturing the complete investment case - why buy or avoid]
---
10-K filings: [Fiscal years reviewed - e.g., FY2020-2024]
10-Q filings: [Recent quarters - e.g., Q1-Q3 2025]
Earnings calls: [Dates reviewed]
Proxy statements: [Years reviewed]
Management letters: [Years reviewed]
Competitor analysis: [Companies benchmarked]
Historical period analyzed: [X years]
Peer companies compared: [Number and names]
Valuation methods used: [DCF, Relative, Peter Lynch, Asset-based]
: [Quality and completeness of available data]
: [Any areas where information is limited or unavailable]
: [Any constraints in the analysis]
---
[If recommending SELL or AVOID, provide 3-5 better investment alternatives with brief rationale for each]
: [1-2 paragraph comparison]
: [Valuation, growth, margins]
: [1-2 paragraph comparison]
: [Valuation, growth, margins]
: [1-2 paragraph comparison]
: [Valuation, growth, margins]
[Continue for 4-5 alternatives if SELL recommendation]
---
: [Current Date]
: [Suggested review date based on catalysts or timeline]
: Claude Stock Evaluator
---
: Create a React artifact using the standardized quant-style dashboard template with:
✅ All 48 metrics across 8 sections (calculated above)
✅ Historical price data (5 years, 6-12 points)
✅ 1-year price + 6-month forecast (4-6 points)
✅ MACD data (3-5 recent points)
✅ RSI data (3-5 recent points)
✅ Radar chart (12 metrics, normalized 0-100)
✅ Bull case (target + 5 points)
✅ Bear case (target + 5 points)
✅ Entry/exit strategy (5 values)
[Create the React artifact here using the quant-style template]
Quant-Style Dashboard Artifact
MANDATORY: After completing the full text analysis, create a React dashboard artifact using the standardized quant-style template format.
Dashboard Template Structure
The dashboard uses a specific institutional-grade format with:
1. Header Section (Orange background)
- Format:
TICKER - Company Name
2. Eight Metric Sections (2-column grid)
| Left Column | Right Column |
|---|
| Price & Valuation (blue) | Financial Performance (green) |
| Growth Metrics (emerald) | Risk Indicators (red) |
| Liquidity & FCF (cyan) | Insider & Sentiment (purple) |
| Quality Scores (orange) | Moat & Other (gray) |
Each section: 6 metric boxes with values, labels, benchmarks, color coding
3. Charts Section (3-column grid)
-
Left: Linear Price Chart + MACD
- Price, Intrinsic Value, Market Value lines
- 5-year historical data
- MACD indicator below
-
Center: Radar Chart + 1-Year Forecast
- 12-point radar (normalized 0-100)
- Consolidated advice badge
- 1-year price + 6-month forecast
-
Right: Log Price Chart + RSI
- Log-scale price history
- Intrinsic value comparison
- RSI (14) indicator below
4. Key Notes Section (Expandable accordion)
- 3-column layout: Bull Case | Bear Case | Entry/Exit Strategy
- Click to expand/collapse
5. Footer
- Analysis date, data sources, recommendation
Required Metrics by Section
Price & Valuation (6 metrics):
- Price, Market Cap, Trailing P/E, Forward P/E, Subsector Typical P/E, PEG Ratio
Financial Performance (6 metrics):
- ROE, ROA, Profit Margin, Operating Margin, Gross Margin, ROIC
Growth Metrics (6 metrics):
- Revenue Growth (5Y), Earnings Growth, EPS (TTM), Forward EPS, Analyst Rec, Target Price
Risk Indicators (6 metrics):
- Debt/Equity, Consolidated Risk, F-Score, Z-Score, M-Score, Max Drawdown (5Y)
Liquidity & FCF (6 metrics):
- Current Ratio, Total Cash, Total Debt, FCF Growth 5Y, FCF Yield, Payout Ratio
Insider & Sentiment (6 metrics):
- Insider Buys (12M), Insider Sells (12M), Net Shares (12M), RSI (14D), Stock Type, Sector
Quality Scores (6 metrics):
- CQVS, Label, Valuation Score, Quality Score, Strength Score, Integrity Score
Moat & Other (6 metrics):
- Moat Score (0-10), Beta, Predictability, Data Quality, Completeness, Dividend Yield
Radar Chart Metrics (12 points, normalized 0-100)
- Revenue Growth (normalize: X% growth → scale to 100 for 20%+)
- Operating Margin (normalize: X% → 100 for 30%+)
- Gross Margin (normalize: X% → 100 for 60%+)
- Profit Margin (normalize: X% → 100 for 25%+)
- ROE (normalize: X% → 100 for 30%+)
- Risk Score (inverse of consolidated risk: 100 - risk*100)
- Beta Score (inverse: 100 for beta=0.5, 50 for beta=1.5, 0 for beta=2.5+)
- P/Market Discount (100 = deeply undervalued, 50 = fair, 0 = overvalued)
- Moat Score (moat rating * 10)
- FCF Yield (X% → 100 for 8%+)
- ROA (X% → 100 for 20%+)
- Earnings Growth (X% → 100 for 25%+)
Color Coding Rules
ROE > 20%, ROA > 10%, Margins > 20%, ROIC > 15%
Revenue Growth > 10%, Current Ratio 1-2, Z-Score > 3
M-Score < -1.78, FCF Growth > 0%, Payout < 50%
F-Score >= 7, Quality >= 70, Strength >= 70
Max Drawdown < -50%, Beta > 2, Consolidated Risk > 0.6
Predictability < 50%, F-Score <= 3, Z-Score < 1.81
M-Score > -1.78, Quality < 50
F-Score 4-, -, -, -
-, -%
Complete Template Code
Use this exact template structure:
import React, { useState } from 'react';
import {
LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip,
ResponsiveContainer, RadarChart, PolarGrid, PolarAngleAxis,
PolarRadiusAxis, Radar, ReferenceLine, Area, ComposedChart, Scatter
} from 'recharts';
const QuantDashboard = () => {
const [showKeyNotes, setShowKeyNotes] = useState(false);
const ticker = "TICKER";
const companyName = "Company Name";
const recommendation = "BUY";
const analysisDate = "December 6, 2025";
const metrics = {
price: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: -,
: ,
: ,
: -,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
};
topNews = [
{ : , : },
{ : , : },
{ : , : },
{ : , : },
{ : , : },
];
topNewsString = topNews.( ).();
priceHistory = [
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : , : },
];
oneYearData = [
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
];
ichimokuData = [
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
{ : , : , : , : , : , : , : , : , : },
];
ichimokuSignals = {
: ,
: ,
: ,
};
macdData = [
{ : , : , : , : },
{ : , : , : , : },
{ : , : , : , : },
{ : , : , : , : },
{ : , : , : , : - },
{ : , : , : , : - },
];
rsiData = [
{ : , : },
{ : , : },
{ : , : },
{ : , : },
{ : , : },
{ : , : },
];
radarData = [
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
{ : , : , : },
];
bullCase = {
: ,
: [
,
,
,
,
]
};
bearCase = {
: ,
: [
,
,
,
,
]
};
entryStrategy = {
: ,
: ,
: ,
: ,
:
};
= () => {
(score < ) ;
(score < ) ;
;
};
= () => {
(score < ) ;
(score < ) ;
(score < ) ;
(score < ) ;
;
};
= () => {
(score >= ) ;
(score >= ) ;
;
};
= () => {
(sentiment > ) ;
(sentiment > ) ;
(sentiment > -) ;
;
};
= () => (
);
= () => {
bgColor = ;
(isGood === ) bgColor = ;
(isGood === ) bgColor = ;
(isGood === ) bgColor = ;
(
);
};
= () => (
);
(
<div className="w-full max-w-7xl mx-auto p-3 bg-white text-xs">
{/* Header */}
<div className="bg-orange-500 text-white px-3 py-2 mb-1 text-lg font-bold text-center">
{ticker} - {companyName}
</div>
{/* TOP NEWS - Pipe separated with dates at END */}
<div className="border border-gray-300 rounded p-2 mb-3 bg-gray-50">
<span className="font-bold text-[10px]">TOP NEWS:</span>
<div className="text-[9px] mt-1">{topNewsString}</div>
</div>
{/* Top 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Price & Valuation - Updated with dual PEG */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="PRICE & VALUATION" bgColor="bg-blue-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Price:" value={`€${metrics.price}`} />
<MetricBox label="Market Cap:" value={metrics.marketCap} />
<MetricBox label="Trailing P/E:" value={metrics.trailingPE} />
<MetricBox label="Forward P/E:" value={metrics.forwardPE} benchmark={`(${metrics.subsectorTypicalPE})`} isGood={metrics.forwardPE < metrics.subsectorTypicalPE} />
<MetricBox label="Subsector P/E:" value={metrics.subsectorTypicalPE} />
<MetricBox label="PEG (1Y):" value={metrics.peg1Y} benchmark="(<1.5)" isGood={metrics.peg1Y < 1.5 ? true : metrics.peg1Y < 2 ? 'neutral' : false} />
<MetricBox label="PEG (5Y):" value={metrics.peg5Y} benchmark="(<2)" isGood={metrics.peg5Y < 2 ? true : metrics.peg5Y < 3 ? 'neutral' : false} />
</div>
</div>
{/* Financial Performance */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="FINANCIAL PERFORMANCE" bgColor="bg-green-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="ROE:" value={`${metrics.roe}%`} benchmark="(>20%)" isGood={metrics.roe >= 20 ? true : metrics.roe >= 10 ? 'neutral' : false} />
<MetricBox label="ROA:" value={`${metrics.roa}%`} benchmark="(>10%)" isGood={metrics.roa >= 10} />
<MetricBox label="Profit Margin:" value={`${metrics.profitMargin}%`} benchmark="(>20%)" isGood={metrics.profitMargin >= 20 ? true : metrics.profitMargin >= 10 ? 'neutral' : false} />
<MetricBox label="Operative Margin:" value={`${metrics.opMargin}%`} benchmark="(>20%)" isGood={metrics.opMargin >= 20} />
<MetricBox label="Gross Margin:" value={`${metrics.grossMargin}%`} benchmark="(>40%)" isGood={metrics.grossMargin >= 40} />
<MetricBox label="ROIC:" value={`${metrics.roic}%`} benchmark="(>15%)" isGood={metrics.roic >= 15} />
</div>
</div>
</div>
{/* Next 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Growth Metrics */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="GROWTH METRICS" bgColor="bg-emerald-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Revenue (YoY):" value={`${metrics.revGrowth}%`} benchmark="(>10%)" isGood={metrics.revGrowth >= 10} />
<MetricBox label="Earning (YoY):" value={`${metrics.earnGrowth}%`} benchmark="(>0%)" isGood={metrics.earnGrowth >= 0} />
<MetricBox label="EPS (TTM):" value={`€${metrics.epsTTM}`} />
<MetricBox label="Forward EPS:" value={`€${metrics.forwardEPS}`} isGood={metrics.forwardEPS > metrics.epsTTM} />
<MetricBox label="Growth Rates:" value={`Capped: ${metrics.growthCapped}%`} benchmark={`Uncapped: ${metrics.growthUncapped}%`} />
<MetricBox label="Analyst Target:" value={`€${metrics.analystTarget}`} />
</div>
</div>
{/* Risk Indicators */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="RISK INDICATORS" bgColor="bg-red-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="CRS (0-1):" value={metrics.crs.toFixed(2)} benchmark="(Medium)" isGood={metrics.crs < 0.4 ? true : metrics.crs < 0.6 ? 'neutral' : false} />
<MetricBox label="Debt/Equity (mrq):" value={metrics.debtEquity} benchmark="(0.5-1)" isGood={metrics.debtEquity < 1 ? true : metrics.debtEquity < 2 ? 'neutral' : false} />
<MetricBox label="Piotroski F:" value={metrics.fScore} benchmark="(≥7)" isGood={metrics.fScore >= 7 ? true : metrics.fScore >= 4 ? 'neutral' : false} />
<MetricBox label="Altman Z:" value={metrics.zScore.toFixed(2)} benchmark="(>3)" isGood={metrics.zScore >= 2.99 ? true : metrics.zScore >= 1.81 ? 'neutral' : false} />
<MetricBox label="Beneish M:" value={metrics.mScore.toFixed(2)} benchmark="(<-1.78)" isGood={metrics.mScore < -1.78} />
<MetricBox label="Value Trap:" value={`${metrics.valueTrapScore} (${metrics.valueTrapLabel})`} isGood={metrics.valueTrapScore < 40 ? true : metrics.valueTrapScore < 60 ? 'neutral' : false} />
</div>
</div>
</div>
{/* Next 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Liquidity & Free Cash Flow */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="LIQUIDITY & FREE CASH FLOW" bgColor="bg-cyan-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Current Ratio:" value={metrics.currentRatio.toFixed(2)} benchmark="(1-2)" isGood={metrics.currentRatio >= 1 && metrics.currentRatio <= 2 ? true : 'neutral'} />
<MetricBox label="Cash:" value={metrics.totalCash} />
<MetricBox label="Debt:" value={metrics.totalDebt} />
<MetricBox label="FCF Growth 5Y:" value={`${metrics.fcfGrowth5Y}%`} benchmark="(>5%)" isGood={metrics.fcfGrowth5Y >= 5} />
<MetricBox label="FCF Yield:" value={`${metrics.fcfYield}%`} benchmark="(>4%)" isGood={metrics.fcfYield >= 4} />
<MetricBox label="FCF Margin:" value={`${metrics.fcfMargin}%`} benchmark="(>15%)" isGood={metrics.fcfMargin >= 15 ? true : metrics.fcfMargin >= 10 ? 'neutral' : false} />
<MetricBox label="Payout Ratio:" value={`${metrics.payoutRatio}%`} benchmark="(<50%)" isGood={metrics.payoutRatio < 50} />
</div>
</div>
{/* Insider & Sentiment & Class */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="INSIDER & SENTIMENT & CLASS" bgColor="bg-purple-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Buys (12M):" value={metrics.insBuys} isGood={metrics.insBuys > metrics.insSells} />
<MetricBox label="Sells (12M):" value={metrics.insSells} />
<MetricBox label="Net Shares (12M):" value={metrics.netShares} />
<MetricBox label="Short Int (%):" value={`${metrics.shortInterest}%`} isGood={metrics.shortInterest < 5 ? true : metrics.shortInterest < 10 ? 'neutral' : false} />
<MetricBox label="Sentiment / Articles:" value={`${metrics.newsSentiment > 0 ? '+' : ''}${metrics.newsSentiment.toFixed(3)} / ${metrics.newsArticleCount}`} benchmark={metrics.newsSentiment > 0 ? '(Positive)' : '(Negative)'} isGood={metrics.newsSentiment > 0} />
<MetricBox label={`Stock: ${metrics.stockType}`} value={`Div Yield: ${metrics.divYield}%`} />
<MetricBox label="Sector/Industry:" value={`${metrics.sector} /`} benchmark={metrics.industry} />
</div>
</div>
</div>
{/* Last 2 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Quality Scores */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="QUALITY SCORES" bgColor="bg-orange-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="CQVS:" value={metrics.cqvs.toFixed(1)} benchmark="(>70)" isGood={metrics.cqvs >= 70 ? true : metrics.cqvs >= 50 ? 'neutral' : false} />
<MetricBox label="Label:" value={metrics.label} />
<MetricBox label="Valuation:" value={metrics.valuation} isGood={metrics.valuation >= 70} />
<MetricBox label="Quality:" value={metrics.quality} isGood={metrics.quality >= 70 ? true : metrics.quality >= 50 ? 'neutral' : false} />
<MetricBox label="Strength:" value={metrics.strength} isGood={metrics.strength >= 70} />
<MetricBox label="Integrity:" value={metrics.integrity} isGood={metrics.integrity >= 70 ? true : metrics.integrity >= 50 ? 'neutral' : false} />
</div>
</div>
{/* Moat & Other */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="MOAT & OTHER" bgColor="bg-gray-200" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="Buffett Moat:" value={metrics.buffettMoat} benchmark="(4-7)" isGood={metrics.buffettMoat >= 7 ? true : metrics.buffettMoat >= 4 ? 'neutral' : false} />
<MetricBox label="Greenblatt (MF):" value={`EY: ${metrics.greenblattEY}%`} benchmark={metrics.greenblattROC ? `ROC: ${metrics.greenblattROC}%` : 'ROC: N/A'} isGood={metrics.greenblattEY >= 8 ? true : metrics.greenblattEY >= 4 ? 'neutral' : false} />
<MetricBox label={`Beta: ${metrics.beta}`} value={`Vol 1Y: ${metrics.vol1Y}%`} isGood={metrics.beta < 1 ? true : metrics.beta < 1.5 ? 'neutral' : false} />
<MetricBox label="Earnings Predict.:" value={`${metrics.earningsPredict}%`} benchmark="(>80%)" isGood={metrics.earningsPredict >= 80 ? true : metrics.earningsPredict >= 60 ? 'neutral' : false} />
<MetricBox label="Drawdown (5Y):" value={`${metrics.maxDrawdown}%`} benchmark={metrics.maxDrawdown > -30 ? '(Low)' : metrics.maxDrawdown > -50 ? '(Mid)' : '(High)'} isGood={metrics.maxDrawdown > -30 ? true : metrics.maxDrawdown > -50 ? 'neutral' : false} />
<MetricBox label={`Completeness: ${metrics.completeness}%`} value={`Data Quality: ${metrics.dataQuality}`} isGood={metrics.dataQuality === 'High' ? true : metrics.dataQuality === 'Medium' ? 'neutral' : false} />
</div>
</div>
</div>
{/* Charts Section - Enhanced with Legends */}
<div className="grid grid-cols-3 gap-2 mb-3">
{/* Linear Price Chart + MACD */}
<div className="border border-gray-300 rounded p-2">
<div className="text-sm font-bold mb-1 text-center">LINEAR PRICE CHART (10Y)</div>
<div className="text-[7px] text-gray-500 mb-1 pl-1">
— Close Price — Total Return<br/>
- - Market Value (Current): €{metrics.marketValueCurrent}<br/>
- - Intrinsic Value (Current): €{metrics.intrinsicValueCurrent}<br/>
- - Analyst Target: €{metrics.analystTarget}
</div>
<ResponsiveContainer width="100%" height={130}>
<LineChart data={priceHistory}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} name="Close" />
<Line type="monotone" dataKey="totalReturn" stroke="#6b7280" strokeWidth={1} strokeDasharray="2 2" dot={false} name="Total Return" />
<Line type="monotone" dataKey="intrinsicValueCurrent" stroke="#16a34a" strokeWidth={1} strokeDasharray="5 5" dot={false} name="IV Current" />
<Line type="monotone" dataKey="analystTarget" stroke="#3b82f6" strokeWidth={1} strokeDasharray="3 3" dot={false} name="Target" />
</LineChart>
</ResponsiveContainer>
<div className="text-xs font-bold mt-1 mb-1 text-center">MACD</div>
<ResponsiveContainer width="100%" height={55}>
<LineChart data={macdData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} />
<ReferenceLine y={0} stroke="#666" />
<Tooltip contentStyle={{ fontSize: 7 }} />
<Line type="monotone" dataKey="macd" stroke="#2563eb" strokeWidth={1} dot={false} name="MACD" />
<Line type="monotone" dataKey="signal" stroke="#dc2626" strokeWidth={1} dot={false} name="Signal" />
</LineChart>
</ResponsiveContainer>
</div>
{/* Radar + Investor Personas + Forecast */}
<div className="border border-gray-300 rounded p-2">
<div className="relative">
<ResponsiveContainer width="100%" height={140}>
<RadarChart data={radarData}>
<PolarGrid />
<PolarAngleAxis dataKey="metric" tick={{ fontSize: 6 }} />
<PolarRadiusAxis angle={30} domain={[0, 100]} tick={{ fontSize: 6 }} />
<Radar name={ticker} dataKey="value" stroke="#2563eb" fill="#3b82f6" fillOpacity={0.3} />
</RadarChart>
</ResponsiveContainer>
{/* Investor Persona Badges */}
<PersonaBadge name="Buffett" score={metrics.buffettScore} position="top-0 left-1/4" />
<PersonaBadge name="Lynch" score={metrics.lynchScore} position="top-0 right-1/4" />
<PersonaBadge name="Munger" score={metrics.mungerScore} position="top-1/4 -left-2" />
<PersonaBadge name="Greenblatt" score={metrics.greenblattScore} position="top-1/4 -right-2" />
<PersonaBadge name="Dalio" score={metrics.dalioScore} position="bottom-1/4 -left-2" />
<PersonaBadge name="Graham" score={metrics.grahamScore} position="bottom-1/4 -right-2" />
<PersonaBadge name="Templeton" score={metrics.templetonScore} position="bottom-0 left-1/4" />
<PersonaBadge name="Soros" score={metrics.sorosScore} position="bottom-0 right-1/4" />
</div>
<div className="text-center my-1">
<span className="bg-green-200 px-2 py-0.5 text-[10px] font-bold rounded border border-green-400">
Advice: {recommendation} (CQVS: {metrics.cqvs.toFixed(1)})
</span>
</div>
<div className="text-[8px] font-bold mb-0.5 text-center">1Y PRICE + 6-MONTH FORECAST</div>
<div className="text-[6px] text-gray-500 mb-0.5 text-center">— Close — 50-Day MA — 200-Day MA ▒ Bollinger Bands - - Forecast</div>
<ResponsiveContainer width="100%" height={70}>
<ComposedChart data={oneYearData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} />
<Tooltip contentStyle={{ fontSize: 7 }} />
<Area type="monotone" dataKey="upperBand" stroke="none" fill="#e0e0e0" fillOpacity={0.5} />
<Area type="monotone" dataKey="ci95Upper" stroke="none" fill="#dbeafe" fillOpacity={0.5} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} />
<Line type="monotone" dataKey="ma50" stroke="#f59e0b" strokeWidth={1} dot={false} />
<Line type="monotone" dataKey="ma200" stroke="#ef4444" strokeWidth={1} dot={false} />
<Line type="monotone" dataKey="forecast" stroke="#16a34a" strokeWidth={1.5} strokeDasharray="5 5" dot={false} />
</ComposedChart>
</ResponsiveContainer>
{/* Valuation Indicator */}
<div className={`text-center text-[10px] font-bold mt-1 ${metrics.valuationPercent > 10 ? 'text-green-600' : metrics.valuationPercent < -10 ? 'text-red-600' : 'text-yellow-600'}`}>
{metrics.valuationLabel} ({metrics.valuationPercent > 0 ? '+' : ''}{metrics.valuationPercent}%)
</div>
</div>
{/* Log Price + RSI */}
<div className="border border-gray-300 rounded p-2">
<div className="text-sm font-bold mb-1 text-center">LOG PRICE CHART (10Y)</div>
<div className="text-[7px] text-gray-500 mb-1 pl-1">
— Close Price — Total Return<br/>
- - Unrestr. Market Value (Current): €{metrics.unrestrictedMarketValueCurrent}<br/>
- - Unrestr. Market Value (Next Year): €{metrics.unrestrictedMarketValueNextYear}
</div>
<ResponsiveContainer width="100%" height={130}>