Skip to content
patearn.in
NIGHTLY ·
More

Strategy reference

Research tool · not investment advice. Full disclaimer →

New here? How to read

What each strategy is — and what it is not.

Descriptive record only — past data and published method.

Strategy reference

23 canonical pages
Open the Momentum scan →the live surface this page describes — data, filters and history
How well testedFailed after coststhe gross reading looked real and did not survive realistic trading costRecorded: BENCHMARK engine · gross selection lens (NOT fundable net of cost, except qtr large-cap LOWVOL_MOM)

Momentum / RISKADJ Ranked-Rotation Engine — Canonical Reference

Status: BENCHMARK engine · gross selection lens (NOT fundable net of cost, except qtr large-cap LOWVOL_MOM) · Governing decision(s): + the ledger benchmarks · Reconciled: 2026-07-11 .
Origin: 📚 CLASSIC (Jegadeesh-Titman 12-month momentum · vol-adjusted-momentum school) + 🏠 HOUSE measurement (RISKADJ = 6-mo return ÷ 3-mo vol, ranked on our data). See the origins notes.
Charter: the single canonical definition + current-state reference for the momentum engine. Full result tables + failure ledger: the strategy ledger. Numbers live in code + the calculations and weights notes; this page summarizes + links — it never re-pastes the result tables (they live in the ledger, single source).
## 🔴 EVERY "SHARPE" ON THIS PAGE WAS A RETURN/VOL RATIO — RELABELLED
Every ratio on this page (RISKADJ 1.13/1.29 · C-BLEND 1.32 · LOWVOL_MOM 1.02 · the 0.89 hurdle) is
computed as mean/sd × √periods with no risk-free rate subtracted. That is a **return/vol ratio,
not a Sharpe** — read as a textbook Sharpe it reads high, and the absolute levels were overstated by
the label alone. But the Nifty 500 buy-&-hold hurdle (0.89) is computed on the IDENTICAL basis, as
is every signal measured against it — so **every relative claim, every walk-forward verdict, and every
gross-vs-net call on this page holds exactly as written.** Nothing is re-cut and no number moves:
the desk ruling is relabel the vocabulary, change no numbers. A true-Sharpe re-cut needs a
primary-source rf ingest (Guardrail #8) and is queued with the owed TR-benchmark re-cut.
Read every ratio below as a return/vol ratio.

One-line definition: a monthly cross-sectional ranked-rotation backtest that sorts every liquid NSE name by RISKADJ (6-month return ÷ 3-month volatility), holds the top-25 equal-weight, and scores it net of cost, walk-forward on both halves, against a Nifty 500 buy-&-hold return/vol-0.89 hurdle — the project's internal benchmark and a gross selection lens, not a fundable net-of-cost alpha.

---

1. What it is

The core factor / backtest machine of the platform: the daily "surface the relevant stocks" engine of the primary-intent north star, formalized from the empirical finding that momentum is the only consistent, reliable gross forward-price signal in Indian equities (the predictive attributes findings notes).

The machine (one construction family):

1. At each monthly rebalance (22 trading days), rank every liquid name cross-sectionally by a selection signal (RISKADJ is the flagship; 8 signals are wired).

2. Take the top-25, hold equal-weight for the month.

3. Charge cost, mark monthly, and compound.

4. Split the 2012→2026 history into two walk-forward halves (2012-18 vs 2019-26); a signal "survives" only if it beats Nifty 500 return/vol 0.89 in BOTH halves with positive CAGR in each.

RISKADJ is the best of 32 tested signals and is kept as the internal benchmark to beat — every new strategy is measured against it. It is *not* productized as a client "buy this basket" claim; it is an analytical ranking lens that surfaces names for research. Benchmarks (Nifty 50 / Nifty 500, the 0.89 hurdle / Nifty Midcap 50) and the full 32-row leaderboard live in the ledger — see the strategy ledger § Benchmarks + Tier 1.

2. Our variation vs. the standard technique

Classic cross-sectional momentum ranks on raw 12-month return. What is ours here:

  • RISKADJ = 6-mo return ÷ 3-mo volatility (not raw MOM6/MOM12). Risk-adjusting both *raises* return/vol and *cuts* drawdown vs raw momentum — raw MOM12's β≈1.33 / MaxDD≈−50% is a leveraged-beta liability, so the production form is deliberately the risk-adjusted / low-vol variant, never raw momentum as the sole ranker.
  • Relative percentile liquidity gate, not a static ₹5cr floor. Names compete on a cross-sectional turnover percentile (top-40%/60% by median traded value) — the standing "no absolute-rupee thresholds" rule (percentages / ranks only). This alone lifted RISKADJ from return/vol 1.13 → 1.29.
  • The C-BLEND tilt — a 50/50 rank blend of RISKADJ-percentile with the proprietary capital-allocation ("C") percentile (§4, §7), a *descriptive* re-sort, not a veto or standalone ranker.
  • Value-in-rupees rule — all liquidity / size math uses median turnover (₹), never share count, so corporate actions can't distort the gate.
  • A first-class valuation guard (not_extended: optionally exclude names up >200% in ~5y) kept as a *tested variable* — the data says it slightly *reduces* return/vol in a momentum frame (winners keep winning), recorded as an honest tension, not applied by default.

What is not proprietary: the momentum premium itself (Fama-MacBeth λ t=3.36) is a real but generic factor. Public yardsticks (MOM12, HI52, RESID_MOM, …) are kept in a separate non-proprietary registry (the strategy ledger § Known/public factor strategies) — the proprietary claim is only what *beats* those yardsticks (so far: the PIT-quality / C blend cutting drawdown on top of RISKADJ).

3. How it works (methodology)

  • Harness: the factory research code — the SIGNALS map (MOM6, MOM12, RISKADJ = mom6/(vol+ε), ACCEL, LOWVOL_MOM = 0.5·rank(mom6)+0.5·rank(−vol), DELIV_MOM, QUAL_MOM, PULLBACK), build_tables (PIT feature tables per rebalance), run_strat (rank → top-N → equal-weight → net cost), walk-forward slice_stats. Public-factor zoo + attribution inputs: the factor zoo code.
  • Overlays: the overlay experiment code (relative gate + PIT quality) and the c overlay code (the capital-allocation C overlay; sel_c_blend, PIT attach_c).
  • Two cost models — the whole honesty pivot:
  • Flat (COST_PS = 0.3% × turnover, + a 1.5× stress proxy) — the ledger's headline numbers; capacity-blind.
  • Participation / Almgren √-law (the cost participation code): per-side impact = k·σ·√(order/ADV), k=0.6, ≤10% ADV/day POV cap, tiered spreads, a days-to-fill delay penalty, sized against a target AUM so impact scales with the real clip. the cblend cost recut code re-cuts the champion under this model, swapping *only* the cost term (reproduces the flat 1.32 exactly, so any delta is the cost model alone).
  • Persistence: every run is appended (never overwritten) to research.db via the strategy store code → strategy_registry / strategy_runs / strategy_holdings, plus out/*.csv leaderboards.

Full parameterization + every internal weight: the calculations and weights notes and the code. Result tables are not duplicated here — see the ledger.

4. Status, validation & honesty fence

THE headline — gross vs. net (binding, must travel with every number):

  • GROSS / flat-cost — the selection edge is REAL. RISKADJ ranks best of 32 at gross/flat-cost return/vol ~1.13 (static-floor baseline) to ~1.29 (relative gate), α ~+16%, and survives both walk-forward halves. It is the internal benchmark.
  • NET of realistic cost — the alpha DOES NOT EXIST here. Under a participation/slippage model (~0.5×ATR, ~100%/mo turnover → ~36%/yr cost), that 1.29 collapses to ~0.09, CAGR negative, MaxDD ≈ −69% — momentum *sold as a fundable strategy* is a BLOCKING failure model. Nothing beats Nifty 500 buy-&-hold (0.89) net of realistic cost.
  • C-BLEND 50/50 (return/vol 1.32) is FLAT-COST-ONLY and NOT fundable. The recorded "champion" (flat-cost return/vol 1.32 / MaxDD −28.2% / Calmar 1.15) nets 0.52 @₹25cr · 0.17 @₹50cr · −0.30 @₹100cr under participation cost — it beats the index at no AUM. It stays a descriptive/paper overlay (the fence), never a book.
  • The ONLY participation-fundable corner is quarterly large-cap LOWVOL_MOM — net return/vol 1.02 @₹50cr (CAGR 18.1%, MaxDD −21.4%), ~breaks even ₹100–150cr, 0.61 @₹500cr → a ~₹50–100cr defensive tilt, not a scalable edge.
  • It's momentum-BETA, not selection alpha (proven). Controlling for the generic momentum factor (WML) + market, RISKADJ's residual α falls to +7.3%, HAC t=1.99 → fails the t≥3 bar; WML eats 51% of the raw α. The premium is real but un-proprietary. Survivorship is second-order (+0.02 return/vol).

The doctrine (the project's core thesis — state it plainly): *price strength is the only gross forward-return engine; value / quality / credibility / accumulation are veto / filter / context layers, not rankers; and no factor here is a fundable net-of-cost alpha vs the index (Nifty 500 B&H return/vol 0.89). The asset is PIT rigor + under-covered data + the analytical selection lens — not a backtested alpha strategy.*

(governing): capital-allocation "C" is a RISK FILTER, not a return ranker — it works as a 50/50 rank blend / descriptive tilt, NOT a hard veto and NOT a standalone ranker; head-to-head it subsumes the 4-metric quality lens (ROCE/D-E/OPM/interest-cover). Standalone value and standalone quality do not beat the index here (QUALITY α≈0, BOOK_YIELD α −1.8% / MaxDD −82%).

Full failure-models table (BOOK_YIELD, EARN_YIELD, QUALITY-standalone, momentum-as-fundable, C-BLEND-as-book, PEAD book, …): the strategy ledger § BLOCKING FAILURE MODELS. Cite the exact recorded numbers before re-attempting any of them.

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

  • Backtest machine (research venv, numpy): the factory research code (+ the factor zoo code, the overlay experiment code, the c overlay code, the cost realism code, the cost participation code, the cblend cost recut code, the attribution code, the strategy store code).
  • Proprietary layers (app): the capital allocation code (Dataset "C"), the scoring code (14-pattern patearn quality), the fundamentals asof code (PIT reader, no look-ahead).
  • Routes: /dash/testing ("Lab", under Strategies — the testing view code, the ranked registry + candidate holdings + the honest verdict) and /dash/momentum-scan (nested /dash/markets/momentum-scan, the momentum view code — the nightly scanner with three sorts: Risk-adjusted momentum · C-blend 50/50 · Equal-weight ensemble).
  • DB (research.db): strategy_registry / strategy_runs / strategy_holdings (backtest history), momentum_scan (nightly surface), capital_allocation_scores (nightly C, joined for the C-blend), plus out/strategy_leaderboard.csv.
  • Timers: hermes-momentum-scan.timer → explosive_moves.momentum_scan (nightly; the scanner self-heals em_cache.pkl when it lags the DB).

6. Data & provenance

  • Price / momentum / volatility / liquidity: NSE bhav copy (primary source) → adj_close, med_turn, the vol_66 / delivery / SMA feature cache (embase). This is the whole gross-momentum engine and is on fully primary data.
  • Quality / capital-allocation (C): PIT fundamentals from research.db.fundamentals_history (1,983 syms × ~24y, point-in-time by report_date), read as-of via fundamentals_asof. Provenance caveat (guardrail #8): fundamentals_history is currently Screener-derived and under active XBRL migration remediation — see the fundamentals xbrl migration notes; do not extend the Screener dependency, and disclose it where C is shown (the live surfaces carry the Screener→XBRL disclosure).
  • Survivorship: the ~3,515-symbol cache is survivor-tilted; the PIT panel books a delisted name's return-to-last-price rather than dropping it, and delisting-return booking moves return/vol only +0.02 (second-order). Fundamentals coverage is narrower (~1,700 names) → value/quality reads lean on a smaller universe. True net-of-cost numbers, if anything, sit *lower* than recorded.

7. Terminology canon

  • RISKADJ — 6-mo return ÷ 3-mo volatility (mom6/(vol+ε)). The flagship signal and internal benchmark.
  • QUAL_MOM — risk-adj + delivery + low-vol blend; best Calmar of the high-return/vol set (defensive).
  • LOWVOL_MOM — 0.5·rank(mom6)+0.5·rank(−vol); β≈0.82, shallowest drawdown. The only participation-fundable corner (quarterly, large-cap, wide hold-band).
  • MOM12 — raw 12-month momentum; highest gross return, brutal drawdown; a *public* yardstick, kept in the non-proprietary registry.
  • C-BLEND — 0.5·RISKADJ-pctile + 0.5·C-pctile; a descriptive tilt (flat-cost champion 1.32; not fundable).
  • "C" (capital allocation) — Dataset-C quality: ROIIC, ROCE level+trend, dilution drag, debt-funding share, growth efficiency (the capital allocation code). A veto/filter/context layer per , consumed as a blend.
  • Gross vs net — flat-cost (0.3%/turnover) vs participation/Almgren cost sized by AUM. The gap *is* the honesty fence.
  • The 0.89 hurdle — Nifty 500 buy-&-hold return/vol; the survival bar in both halves.
  • ⚠ Disambiguation: the momentum FACTOR here (a cross-sectional monthly *ranker* on price return ÷ vol) is distinct from RS-momentum (relative strength vs an index — strength level/strength direction, Rotation Map, Mansfield). See the relative strength notes. The patearn 14-pattern fundamental lens is the patearn notes — a quality/veto context, never a standalone ranker.

8. Decision & session history

  • (2026-06-23): PIT fundamentals → backtestable patearn score; the score is a RISK FILTER, returns come from accumulation/RS. Origin of "C/quality = veto/filter, not ranker."
  • 2026-06-24 overlay experiment: relative gate beat the static ₹5cr floor (return/vol 1.13 → 1.29); a PIT 50/50 quality blend cut MaxDD −42% → −29% at return/vol 1.18 — first hard proof a proprietary lens improves the risk-adjusted outcome with zero look-ahead.
  • 2026-07-02 attribution + institutional panel: momentum = beta, not selection — proven (the attribution code); "sell DATA, not signals." Headline of the predictive attributes findings notes rewritten.
  • 2026-07-03 C-overlay : C-BLEND 50/50 = flat-cost champion (return/vol 1.32, MaxDD −28.2%, Calmar 1.15); refined — C's working shape is a rank blend, not a hard veto; C subsumes the 4-metric quality lens.
  • 2026-07-05 cost re-cut: the 1.32 is flat-cost-only; under participation cost C-BLEND is NOT fundable (0.17 @₹50cr). Fundable claim withdrawn; LOWVOL_MOM (1.02 @₹50cr) confirmed as the only corner.

9. Open items / frozen work

  • Residual-alpha attribution — partially done. β-not-α is proven (the attribution code); a fuller beta/size/sector/liquidity-neutral decomposition is still queued (until run, treat momentum's *direction* as reliable, *magnitude* as provisional).
  • Ensemble Steps 3–7 (frozen roadmap). Step 2 is decided (equal-weight MOM12 + HI52 + RISKADJ + LOWVOL_MOM); Steps 3 (regime gates), 4 (C/A/B veto layer), 5 (cost/turnover-aware form), 6 (productionize the daily surface), 7 (live decay monitor) remain open — one step per session, the desk steers each. See the momentum engine formalization notes.
  • Untested overlays: the accumulation tape and concall-credibility on the momentum book (both descriptive-only so far).
  • Gate design: a stratified / size-bucketed gate or a velocity "override lane" (to admit good sub-~₹5k-cr midcaps like PIXTRANS without flooding the book with microcaps) — an option to pursue; pure velocity wrecks the edge.
  • Live check: passive re-verification of the live C-blend sort vs the recorded numbers once a few weeks of nightly ca_pctile history accrue.

10. Sources of truth

  • the strategy ledger — primary source: Benchmarks, BLOCKING FAILURE MODELS, Tier-1 survivors, C-BLEND / cost-reality experiments. (Full result tables live here — single source.)
  • the momentum engine formalization notes — the living spec + roadmap (the two-layer truth, Steps 1–7).
  • the predictive attributes findings notes — the 14-year factor study + attribution + participation-cost headline.
  • the calculations and weights notes — canonical formulas + every internal weight (numbers live once, in code + here).
  • the institutional panel assessment notes — the "sell data, not signals" panel verdict.
  • Sibling canonical refs: the relative strength notes (RS-momentum, disambiguated) · the patearn notes (14-pattern quality lens).
  • Memory: strategy-ledger-and-benchmarks · predictive-attributes-finding · failure-models-ledger · dataset-roadmap-c-a-b.

Slow rotation — the quarterly LOWVOL_MOM anchor

The one form of this family that survived the participation-cost recut is now a live surface:

/dash/momentum-scan/slow (declared child of the scanner). Rule as validated: large-cap gate

(top turnover quintile, self-scaling) · LOWVOL_MOM = 0.5·pctrank(6-mo momentum) +

0.5·pctrank(−66-day vol) · top-25 equal-notional · quarterly clock · hold band ≤35

(members stay while ranked ≤35; refill from the top — the turnover discipline IS the strategy).

Numbers on record: family flat-cost ~1.10 → net ~1.02 @₹50cr under the Almgren participation

model; beats the index net up to ~₹100–150cr capacity; defensive beta, not selection skill.

Engine: the slow rotation code (nightly --refresh, rebalances only on quarter turn;

bounded slow_rotation table). View: the slow rotation view code (live rank drift computed on

read; CSV; descriptive fence). Ledger anchors: §§ 2026-06-24 cost-realism · 2026-07-02 corrected

participation model · 2026-07-05 C-BLEND recut.

Factor league — the classic families, ranked by our numbers

/dash/factor-league (Strategies lens): the famous "premium" strategy families ranked by the

return/vol + alpha measured in OUR 14y walk-forward — not textbook claims. League order (flat-cost, ₹5cr

universe, labeled): PACER-25/RISKADJ 1.13 · QUAL_MOM 1.10 · **STEADY-25/LOWVOL_MOM 1.10 flat → NET

1.02 @₹50cr = the only net survivor and the AUTO-PORTFOLIO** · SPRINTER-25/MOM12 1.06 · then the

failures shown with their numbers (DELIV_MOM 0.85 · QUALITY 0.76 α≈0 · EARN_YIELD 0.70 · BOOK_YIELD

0.62 α<0 REJECTED) vs the 0.89 Nifty-500 hurdle. Live rosters (top-25) + daily churn feed:

the factor league code → factor_league/factor_league_churn; view

the factor league view code. Every number restates the frozen ledger; the page may not soften

them.