Skip to content
✎ FeedbackNew here?
Open the Classic Screens rosters →the live surface this page describes — data, filters and history
How well testedDescriptive onlyit describes what happened; it has never earned the right to rank or selectRecorded: DESCRIPTIVE-ONLY — public strategies run faithfully on our PIT data; proxies labeled, value shown with its recorded failure numbers

Classic Screens — Canonical Reference

1. What it is

A menu of the public, citable stock-selection strategies the professional world respects, each made concrete as a screen the analyst can actually run and inspect at /dash/classics. It is the sibling of the Factor League (/dash/factor-league): the Factor League ranks the raw factor families (momentum, value, quality, low-vol) by the return/vol + alpha we measured on 14 years of NSE data; Classic Screens implements the named, multi-signal strategies built on those factors and surfaces their current participants.

Every strategy is expressed as our closest faithful reading of the original rule, run point-in-time so a roster contains only what was knowable on the scan date.

2. Our variation vs. the standard technique

We run each rule as published where our data allows, and say so plainly where it does not. The canon splits by what our primary-source data can compute point-in-time:

Strategy (author)The ruleHow we run itFidelity
Low-Volatility (Haugen)lowest realised vol25 lowest 66-day vol among liquid namesfull
Quality / QMJ (AQR)profitable, growing, safeROCE + margin + low-leverage percentile blendfull
Coffee Can (Mukherjea)ROCE ≥15% & revenue growth ≥10%, long hold3-yr-avg ROCE ≥15 and 5-yr sales CAGR ≥10full (3y/5y proxy for the 10-yr every-year test)
CANSLIM (O'Neil)earnings + new-high + leadershipprofit acceleration + near-52w-high + RS rankfull
GARP (Lynch)growth at a reasonable pricelowest PEG (P/E ÷ 3-yr earnings growth), quality-gatedfull
Magic Formula (Greenblatt)rank ROC + earnings yieldROC = ROCE; earnings yield = E/P (see §6)proxy — no PIT enterprise value
Piotroski F-Score (Piotroski)9 accounting signals5 of 9 computable todayproxy — cash-flow trio pending
Graham Deep Value (Graham)low P/E, low P/B, current ratiolow P/E and low P/Bproxy — current-ratio leg missing
Acquirer's Multiple (Carlisle)cheapest EV/EBIT—not runnable — needs PIT enterprise value

The doctrine constraint (README §"doctrine") is enforced here: price strength is the only gross forward-return engine on our data; value and quality are context, not fundable rankers. So the value strategies are presented with their recorded results, not as recommendations.

3. How it works (methodology)

Nightly, famous_strategies.refresh takes the liquid universe from the latest momentum_scan (turnover ≥ ₹5cr), joins each name's point-in-time fundamentals via fundamentals_asof.as_of_fundamentals (with the latest bhav close as price), and applies each strategy's gate + ranking. Composite strategies rank by cross-sectional percentile blends (the pctrank helper); single-axis strategies rank by their one metric. Each produces a top-25 roster written to the isolated classic_roster table. The exact thresholds live in the code, not here (calculations-and-weights doctrine — do not restate constants).

4. Status, validation & honesty fence

DESCRIPTIVE-ONLY. These rosters are research shortlists, not signals or advice. No claim is made that any of them beats Nifty-500 buy-and-hold net of realistic cost — our own testing found the opposite for most, and the value family worst of all:

The one participation-fundable corner remains quarterly large-cap LOWVOL_MOM — see the Factor League and the momentum riskadj notes. This page may not soften any of the above without a new pre-registered, leak-free study recorded in the ledger.

5. Where it lives (code· routes· DB· timers)

6. Data & provenance

🔴 Source disclosure (Guardrail #8 — "disclose it where shown"). Split the claim in two, because they are not the same:

LayerSourceStatus
Price· momentum· volatility· turnover· universe· Nifty-500 benchmarkNSE (bhav copy 2004→, EQUITY_L, index feed)100% primary
Fundamentals — ROCE· P/E· P/B· margins· growth (i.e. every non-price number on the page)Screener.in ≈90.9% / NSE-XBRL ≈9.1%the remediating vendor exception

Measured 2026-07-15: 789,838 rows in fundamentals_history — 717,895 Screener-sourced (source IS NULL), 66,686 NSE-XBRL-CONSO, 5,257 NSE-XBRL-SA. This estate adds no new Screener dependency (it reads the existing archive; it never calls the screener code), but it does rest on one, and saying "read point-in-time through fundamentals_asof (real BSE/NSE filing date…)" describes only the timing gate — it must not be allowed to imply a primary origin. The /dash/classics page carries the same disclosure (_PROVENANCE), dated on purpose: the split shifts as XBRL lands, and an undated "91%" would itself go stale into an untruth.

This makes phase 2 a remediation, not just a feature: the annual-XBRL tags below are the route off the 91% vendor dependency (forward from 2026-04), not merely the unlock for Acquirer's Multiple.

All fundamentals are read point-in-time through fundamentals_asof (real BSE/NSE filing date where captured, else a conservative calibrated lag — no look-ahead). Price is the latest NSE bhav close (primary). Two known data gaps (Guardrail #8-clean to close via XBRL, not Screener):

1. No point-in-time enterprise value (needs PIT cash + clean share count) → blocks true Magic Formula (EBIT/EV yield → we substitute E/P) and all of Acquirer's Multiple (EV/EBIT). 2. No cash-flow statement / current-asset split → blocks Piotroski's cash-flow trio (we ship an F5-of-9) and Graham's current-ratio leg.

Closing both is the phase-2 task: add cash-flow + enterprise-value + current-asset tags to fundamentals_xbrl.extract_for and backfill — then Magic Formula, Piotroski, Graham and Acquirer's Multiple upgrade to full fidelity. This must NOT be done by extending the screener code (Guardrail #8).

✅ Feasibility SETTLED by a live probe — the ANNUAL NSE XBRL filing carries all of it. A quarterly instance is P&L-only (65 tags; SEBI LODR requires the balance sheet + cash-flow statement annually, not quarterly). An annual instance has 232 tags including CashAndCashEquivalents (→ enterprise value → true EBIT/EV and Acquirer's Multiple), CashFlowsFromUsedInOperatingActivities (→ Piotroski's missing CFO trio → the full 9), and CurrentAssets/CurrentLiabilities (→ Graham's current-ratio leg). Annual is the correct cadence — Greenblatt, Piotroski and Graham are all annual rules. Caveat: XBRL is forward-only (2026-04→), so this unblocks the RULES going forward; it does not deepen history (see §2 note on the ~2015 breadth cliff, which is a separate, unsolved data problem).

Reconstructed portfolios

Each rule also runs as a NAMED, BACKDATABLE model portfolio via the classic portfolios code — an additive sibling of the auto_portfolios engine (reusing its clock/gate/band/cost/NAV math verbatim; the classics are NOT admitted into that estate because they do not clear its "superior Sharpe + beats Nifty" bar). The missing piece it adds is a point-in-time fundamentals panel. Books are charted only with 5+ years of history (gate on YEARS, never rebalance count — 20 rebalances is 5y quarterly but 1.7y monthly). Adoptable from /dash/tracker/model-books with today as entry — a reconstruction is never written into a real book.

7. Terminology canon

Say thisMeansDo NOT confuse with
Classic Screensthe named public strategies run as rosters (/dash/classics)Factor League (the raw factor families, /dash/factor-league)
Magic Formula (proxy)ROC (=ROCE) + earnings yield (E/P) rankthe true Greenblatt EBIT/EV yield (not yet computable PIT)
F5our 5-of-9 Piotroski sub-scorethe full 9-point Piotroski F-Score
Coffee Can (our run)3y-ROCE ≥15 & 5y-sales ≥10the strict 10-yr-every-year Marcellus construction

8. Decision & session history

9. Open items / frozen work

10. Sources of truth