TL;DR: The "Insights → Signal" page is laid out as Reference Summary — four horizon cards (Ultra-Short / Short / Mid / Long) that partition multi-faceted data by data frequency. Below the cards sit the 4 engine scores (Quality / Margin of Safety / Momentum-Flow / Risk) and the Valuation Tier (5-model 1Y percentile). Read top-to-bottom: Cards → Engines → Valuation Tier.
Concepts
Why horizon cards instead of an indicator list?
Short-term concerns differ from long-term ones. Old dashboards dumped everything on one page and made you mentally bucket "this is technical → short" / "this is valuation → long". The new view buckets it for you up-front.
Four horizons:
| Horizon | Range | Dominant signals |
|---|---|---|
| Ultra-Short | week ~ month | Trend / Price / Inst. flow 5-20d / Risk |
| Short | month ~ quarter | Trend / Price / Inst. flow 10-60d / Forecast 60d |
| Mid | quarter ~ 6M | Fundamentals / Inst. flow 20-120d / ETF / Forecast consensus |
| Long | 1Y+ | Fundamentals / Peer rank / Revenue / Inst. flow 60-250d / Valuation projection |
Each card header carries a verdict chip (Bull / Lean Bull / Neutral / Lean Bear / Bear + score). Inside, blocks render in a fixed 9-category order:
- Short horizons: Trend → Price → Inst. flow → ETF → Fundamentals → Peer → Risk → Forecast → Alerts
- Long horizons: Fundamentals → Peer → Revenue → Inst. flow → ETF → Trend → Price → Risk → Valuation projection → Alerts
How is each verdict computed?
Per horizon:
- Pull the right facets (technical momentum, VWAP deviation, N-day inst. cumulative, risk, fundamentals, peer rank, ETF, revenue) — each 0-100.
- Weight by horizon: ultra/short emphasize technicals & flow (weight 0.5); mid/long emphasize fundamentals / peer / ETF.
- Score 0-100 → direction: ≥75 Bull · 60-75 Lean Bull · 50-60 Neutral · 40-50 Wait · 25-40 Lean Bear · <25 Bear.
What does "⚠ Divergence" mean?
If a card contains both "Bull / Low risk" (+) and "Bear / High risk" (-) blocks, the header lights up "⚠ Divergence". Example: ultra-short Trend "Lean Bull" + Risk "High risk" → diverge.
We don't smooth this away. The signal "technicals are strong but risk is climbing" is meaningful — your call whether to act.
4 Engines (refreshed daily)
Below the horizon cards: four independent 0-100 scores, each expanding into its constituent indicators.
| Engine | Measures | Coverage |
|---|---|---|
| 💪 Quality | Statement strength | 5 dims (profit / growth / financials / cash flow / dividend); growth weighted 40% |
| ⚖️ Margin of Safety | Valuation level | 5-model implied price percentile (P/E, P/B, EV-EBITDA, DCF, DDM, GGM — 1Y P-rank) |
| 🚀 Momentum-Flow | Market action + flows | 23 technical indicators (MA, MACD, RSI, Bollinger…) bull/bear ratio |
| 🛡️ Risk | Drawdown sensitivity | 39 risk indicators (vol / VaR / CVaR / MDD / Sharpe / Beta / Altman Z…) |
Valuation Tier (5 models, 1Y percentile)
At the page bottom: 5 horizontal bars — P/E, P/B, EV/EBITDA, DCF-implied, DDM-implied — showing each model's 1Y percentile (P0–P100) with min/max anchors. Instant read on "where is this stock vs. its own 1Y history?"
How to use it
- Scan the 4 verdicts top-to-bottom. All Lean Bull → coherent trend; divergent → caution.
- Drill into your horizon's card. Short-term traders read ultra/short cards; long-term holders read mid/long.
- Cross-check with engines. Card direction matches engine bias → strong signal; conflicts → prefer the card consensus.
- Anchor on Valuation Tier. Cheap or expensive? "Bull at low percentile" is different from "Bull at top".
- Click "↗" inside any block to jump to the deep page (Trend / Risk / Chip / Profile).
"Alerts" inside Mid/Long cards
The Alerts block in Mid/Long cards is generated by a rule engine: red dot = caution, yellow = watch, green = positive. Examples: "FCF negative — cash flow deterioration", "P/E at 1Y P100 top", "ROE in peer P92 top tier".
Alerts are not recommendations — they surface red/yellow/green flags from the data for you to consider.
FAQ
Why might the 4 cards point in different directions?
Normal. Short-term reflects technicals/flow (can be bullish on momentum); long-term reflects fundamentals (can be neutral on high valuation). That's the whole point of horizon slicing.
Why does a card skip certain blocks?
If the relevant data frequency doesn't apply, the block is omitted. Example: Ultra-Short never has "YoY annual revenue" (annual data); Long never emphasizes "VWAP 5d deviation" (daily data).
How exactly is the score computed?
Each card's verdict comes from calc_horizon.py with a WEIGHT_MATRIX that aggregates facet scores into a 0–100 number, then maps to a direction. Engine scores come from 4 separate scoring models and do not interfere with verdicts.