Nandit Vaish
A night-time market research desk with printed Indian market charts and calculation notes

Notebook / 01 — Market

Sixty ideas, run until they broke

Four months of market research on 252 million rows of Indian equity and index-option history. It set out to find a signal and ended up building an instrument that can prove, cheaply and repeatedly, that a signal is not there. What cleared the bar instead is not a prediction: discretionary selection, and the management of the trade after the fill.

Apr – Aug 2026the working window252 Mrows · 188k parquet parts60threads run to a verdict41dead242,764lines of Python
0118 April 2026

A chart, on a screen

It started as a Flask dashboard scanning NSE equities for CPR, Camarilla, relative strength, reversals and fractal coils. The organising idea was a timeframe ladder: weekly reads yearly levels, daily reads monthly, four-hour reads weekly, and everything intraday reads the day.

The first data came from Yahoo Finance, and nine of those first 512 files were not Indian equities at all: crude, gold, copper, natural gas, palladium, platinum, silver, corn, wheat. There was a multi-asset scope, and it got dropped. Narrowing to NSE equity and index options was a deliberate early call, and the abandoned commodity leg is the evidence of it.

The rule

The timeframe ladder survived the entire project as a way of looking. It died as an edge.

02May 2026

Building the ground truth

Upstox OAuth, the Nifty 500 matched against the instrument master, and a hive-partitioned parquet store: daily candles back to 2000, minute candles from 2022.

The detail that mattered was in the cleaner. Session detection became coverage-based and era-relative: a date counts as a real trading day only if at least a fifth of that year’s active symbols traded. Before that fix it had been silently discarding pre-2010 days, because it was judging 2004 by how many symbols trade in 2025. Rows are removed; values are never touched.

Bar chart of symbols with data per year, 2000 to 2026
The store itself: symbols with data, per year, 1,890,731 deduplicated daily rows across 502 names. The early years sit far below today’s coverage, which is exactly why the cleaner judges each date against its own year’s active names rather than 2025’s.
The rule

Clean by a rule that assumes today’s market and you will quietly delete the past.

03June 2026

Four strategies, three engine generations

Camarilla long and short, CPR long and short, confluence long and short, across six timeframes, through three generations of engine.

The acceptance checklist was written down before anything ran: expectancy-per-risk at or above 0.10, at least 300 trades, profit factor 1.25, at least 40% of symbols profitable, drawdown no worse than 20R. Settled design decisions were logged as “do not revert” with the reason attached to each.

The rule

This is the point where it stopped being scripts and became a discipline.

04mid-June 2026

The deployable

Walk-forward logistic scoring ranked trades by win probability, and it worked: out-of-sample, the top quartile hit 75–92% win rate against 42–44% for the bottom. Futures were modelled with real lot sizes and margin. Options were priced off actual bhavcopy premium rather than a formula. A live scanner ran on the Upstox REST API.

The headline was a Sharpe of 3.88, a maximum drawdown of −5.7%, and a book that survived 2008 down only 4%.

Every number in that paragraph is wrong. The next entry is why.

0517 June 2026

The teardown

Entry was booked at the level. But the signal only confirms once a bar closes beyond that level: on daily data, about 1.95% beyond it. You cannot fill at a price the bar has already left. The entire modelled edge was living inside that gap.

SleeveModelled @ levelEnter at closeRetrace limitVerdict
cam_daily_long+1.64%−0.30%−0.29%DEAD
cpr_daily_long+1.72%−0.23%−0.14%DEAD
cam_1H_short+0.50%−0.13%−0.04%DEAD
cpr_1H_short+0.51%−0.14%−0.06%DEAD
All four sleeves, gross, before costs. Only about 37% of trades ever reach an exit that beats the confirming close; for the other 63% the move is finished before you can act.

Flip between the two and watch every sleeve cross the line:

cam_daily_long
cpr_daily_long
cam_1H_short
cpr_1H_short
Histogram of how far beyond the level the confirming close sits
The gap, recomputed from the store for this page: every close beyond the previous day’s H4 across all 502 names and twenty-six years — 338,232 confirmations, median 1.1% past the level, using the repository’s own formula. The notebook’s ~1.95% was measured on its filtered signal population; unconditionally the median is smaller and the argument is the same. Everything red was never fillable at the level.

The signal is a lagging report that the move already happened.

Then we tried to rescue it. A stop order resting at the level fills on the touch, in real time, but it drags in exactly the fakeouts the closing confirmation had been screening out, roughly half of all touches, each losing between 0.6% and 2.7%. Three leading filters were pre-committed before testing: volume on approach, ADX primed, higher-timeframe trend. None of them clears cost. ADX made the daily book actively worse.

Four more biases fell out of the same audit. Survivorship inverted the trust ordering: the universe is the 2024 F&O list projected backwards, so the long history is the most contaminated, and that famous −4% in 2008 is the book largely sitting the year out: thirteen trades against a normal fifty-four to sixty-nine. Capacity was fiction, arithmetic over tens of thousands of signals. Slippage was uncalibrated and charged nothing on entry. And the structure itself (which family, how many sleeves, which exits) had been chosen in-sample.

The rule

Out of this came an audit lens: eight failure classes, ordered not by theory but by how often each one has actually killed an edge in this repository. Every later idea was run through it before it was believed.

One thing did survive the teardown, and not as a strategy. If the breakout side is dead because half of all touches fail, then the failures themselves are a population worth watching. That became a tab, and the tab argues with whoever opens it:

In the live Hub, breaks are classified broke → failing → failed / reclaimed. Its own warning sits above the table: the fade tilt on choppy days is real and monotonic, but the mechanical average is about one basis point before costs. Trending → trade breakouts found no support at all.

06June – July 2026

Honest costs, honest gates

Brokerage is close to zero through the API, so the real costs are securities transaction tax and slippage. We rebuilt the round trip per vehicle from its components: 0.238% for cash delivery, 0.035% for cash intraday, 0.026% for futures. Spread was estimated with Corwin–Schultz, market impact with a square-root law.

The rule

Relative strength, index regime and breadth are a risk dial, not a return booster. Tested both ways, they work as gates and add approximately nothing as scoring features.

Here is the dial itself, computed from the store and playable. Press play and watch five and a half years of participation breathe: the share of all 502 names above their own 50-day average (bright) and 200-day average (faint). Green when the majority is participating, red when it is not.

Today it reads 48.3% above the 50-day and 57.6% above the 200-day, drawn day by day across five and a half years.

And the rotation the hub’s sector tab watches, running on the real data. Each dot is a sector’s relative strength against the universe, plotted against the momentum of that strength; the tail is its last eight weeks. Press play and watch 274 weeks of money moving between sectors:

07June – July 2026

The options detour

Two gigabytes of one-minute option chains across twelve underlyings, including expired contracts pulled through the expired-instruments API. We built the scalp book and ran it forward on paper.

Buying short-dated premium intraday is negative carry. It loses on average, always. What had looked like a momentum fade was entirely expiry-day theta, and cutting by days-to-expiry proved it.

The rule

This programme was retired by decision rather than by statistics, and the repository records which of the two it was. They are not the same thing and should not be filed together.

08July 2026

The kill factory

Instead of hand-coding hypotheses one at a time, we built engines whose purpose is to reject them.

A describer that cannot p-hack: ten low-redundancy gauges per minute, z-scored using only the past, with outcomes measured from an entry you could actually have got, feeding a judge that demands a chronological split, trains at or before 2025, tests on held-out 2026, nets off costs, and uses robust statistics rather than means.

Alongside it: a hundred pre-registered hypotheses, none testable without approval. A factor zoo of 462 factors that collapsed to roughly two independent bets: size, and momentum, which turned out to be relative strength wearing a different name at a correlation of +0.98. A reinforcement learner trained on real level geometry against an identical agent trained on placebo twins, where the profitable placebo was the alarm.

Machine learning, astrology, Gann geometry and a TradingView indicator all went through the same bar and all died. The astrology engine was verified against Solar Fire to within 1.4 arcseconds first.

The rule

Refusing to kill something for the wrong reason is part of killing it properly. A wrong result and a broken implementation look identical from the outside.

09July 2026

Forensics on four real traders

We took the machine and pointed it at actual trading records. Two thousand two hundred and fifty-eight trades decomposed: skill lands at p = 0.45, and the profit is one name. Another book’s stated rule is dead, while its discretionary selection is real at p ≈ 0.000: the trader was good at something other than the thing they believed they were doing. A +68.3% run over ten days turned out to have an entry that fails four different ways. A VCP playbook sign-flips on every lever when you move it from the F&O list to a wide universe, which is survivorship.

The rule

Traders cannot tell you what they actually do. The stated rule and the executed rule are different objects, and only one of them is in the data.

1010 July 2026

The steward crisis

The integrity checker had gone fifteen days without an update and was covering three of seven stores, because it enumerated what to check. Adding a store broke nothing; it simply went unchecked, forever. Meanwhile it was globbing one filename pattern while 499 symbols carried 55,457 duplicate rows under a different one, and it reported clean. Three orphaned dashboard processes were squatting on ports, one of them twenty-five hours old.

A checker that names what it checks can only find bugs in what it names.

The fix was architectural rather than diligent. A registry file became the declared desired state: every store, every service, every port. The session manager discovers what is actually on disk and running, and fails if anything is not declared. Add a directory and preflight goes red until you declare it.

The rule

Drift is a failure, not a silent skip.

The Hub’s System tab says when the last refresh failed instead of degrading quietly; every scheduled run carries a chip per step so a failure points at its own cause. The doctor reports 0 fail, 1 warn, 58 pass. The single covered line is the broker account holder’s name.

All ten tabs →
11standing since 8 July 2026

The second brain

The research corpus is hundreds of documents, and the reason it stays usable is a rule, not a tool: an Obsidian vault sits over the whole repository, and a standing instruction requires every new diagnostic, spec or finding to join the graph connected, never as an orphan node. One hundred and fifty-eight notes, one hundred and ninety links between them.

Force-directed graph of the research vault's notes and links
The vault, drawn from its own wikilinks: one continent and two satellites. The named hubs are the same objects as the graveyard above (CPR-Camarilla, Nifty-Scalp, RS-Rotation) because the verdict pages and the knowledge graph are one system, not two.
The rule

A finding you cannot find again will be paid for twice. The graph is cheaper than the second discovery.

12July 2026

The live book, and the placebo

A positional momentum book on relative strength went to forward paper trading. Then we tested it against a thousand dart-throwing placebos.

The selection is real: it beats random name-picking. But its Sharpe lands at roughly equal-weight buy-and-hold, which is a much less interesting claim. And the 48% compound headline splits into 85% across 2021–23 against 13.7% across 2024–26.

In the Hub, the paper book prints its assumptions under the chart where they can be argued with: next-open entry, full costs, ten basis points of slippage, idle cash at six percent. The regime gate is off, so the watchlist is what the rules would buy and the position count is zero out of ten. The rupee figures are simulated capital.

Equal-weight index of the universe from 2021, split at the 2024 regime boundary
The tape the book traded into, computed from the store: the universe, equal-weight, indexed to 100 at January 2021. It compounds at +41.5% a year through 2021–23 and +14.8% after — the same regime split, in the market itself. One caveat this page has already taught: this is today’s 502-name list projected backwards, so the early segment carries survivorship shine.
The rule

Quote the regime numbers, never the headline. A single figure spanning two regimes is an average of two different businesses.

13August 2026

The sweep, and what the literature actually offers

We swept the public internet across six lanes looking for mechanical systems and found the same thing everywhere: there is no undiscovered entry signal out there. What the literature genuinely offers is the risk layer.

Ding’s generalisation of Grinold gives the frame: information ratio is capped at IC divided by the volatility of IC, regardless of how much breadth you add. More bets cannot rescue an unstable signal.

Pre-testResultConsequence
AR(1) on monthly realised variance+0.114 (US momentum: +0.578)Volatility scaling discounted
Effective number of bets10 names = 1.3 betsNo sizing scheme can fix it
Autocorrelation of own returns+0.126 (universe: +0.004)Drawdown stops back on the table
The third result survived four adversarial controls: clean-mark repricing, fully-invested days only, market residual with beta removed, and a fixed sixty-day hold. A placebo of ten random names showed +0.009. It overturns the textbook dismissal of stops for this particular book.
14August 2026

Kabaddi: turning the machine on the person

The last thread pointed the instrument at its own operator. Four rounds of interviews: one spoken, twenty-two minutes, transcribed rather than translated so the Hinglish trading vocabulary survived intact; three typed, verbatim. The goal was to write down the discretionary system that actually gets traded, as a specification.

The specification surfaced a reframe that invalidates every mechanical test that came before it. The target is 0.7–0.8% in the underlying, which becomes roughly 10% on the premium, and then the position is closed. The daily level everyone was testing against sits 5–6% away, and is deliberately not the target.

The system never needed the entry to predict direction. It needed the position to visit a small favourable excursion.

That is a question about the path a trade takes, not about where it ends. Every test in the repository up to this point had measured endpoints.

So we pre-registered 104 cells, split train at or before 2023, test across 2024–25, holdout 2026. Cells clearing the null at p95, after cost, after a red-team pass: zero. Best net expectancy: −12.95 basis points per trade. Random entry on the same stock-days beat the best signal by about ten points of compound annual return. Two candidates survived the first pass, were independently re-derived from raw data by separately written code, reproduced exactly — and were then destroyed by attacks that reversed their sign. A clean null, not an inconclusive one.

The durable output is not a signal. It is this, measured on a real account’s actual behaviour:

Leverage against survival: CAGR versus maximum drawdown per configuration
The table above, drawn. Each bar spans from what the book earns each year (top cap) down to the worst drawdown it takes on the way (bottom cap). De-sizing on the left of each pair, off on the right. At 10× without de-sizing the median outcome is −94.9% and the fifth percentile is −99.7 — ruin, on a book with positive expectancy. These are the notebook’s simulation results, drawn as published, not recomputed.
LeverageWith de-sizingWithout de-sizing
1×+4.7% CAGR · −15.7% DD+6.9% · −19.3%
3×+7.8% · −28.4%+16.8% · −49.9%
10× (ATM-call proxy)+9.2% · −53.6%−0.6% · −94.9% (p5: −99.7)
At option-like leverage, without de-sizing, the median outcome is close to total ruin on a book that has positive expectancy. Of 9,955 signals only 3,619 were taken and 6,444 were skipped for want of a slot. The account still loses. Capital was never the binding constraint. The edge was.
The rule

Positive expectancy and survival are different properties. A book can have the first and still reliably destroy the account that trades it.

The graveyard

Every hypothesis we ran to a conclusion, with the finding that ended it. Forty-one are dead. We are naming all of them, because a list of what did not work is the only honest way to read a list of what did.

05/2606/2607/26/ve

Hover any dot. Each one is a hypothesis, placed on the month it was concluded and coloured by its verdict.

011-min option-buying backtest (Mar–Jun)options · 2026-05 · DEAD

Honest re-run: −69.5%; the apparent wins were bugs.

02CPR option momentum (rupee-honest)options · 2026-05 · DEAD

Rupee edge ≈ ₹0 — always judge option strategies in RUPEES, not percent.

03GEX (gamma exposure)options · 2026-06 · DEAD

21+ hypotheses dead. Fully closed.

04Trade book skill-vs-beta (2,258 trades)discretionary · 2026-06 · DEAD

Selection skill dead (clustered p=0.45); the profit was BHARATFORG concentration in a bull tape.

05RS dynamic-crossmomentum · 2026-06 · DEAD

All timeframes dead. Do not re-test.

06CPR HTF quick-scalplevels · 2026-06 · DEAD

0/16 configs net-positive held out.

07VIX regime gateregime · 2026-06 · DEAD

Worse than the simple Nifty-SMA gate on the same book.

08Pullback-rotation (winner-pausing)momentum · 2026-06 · DEAD

Can't distinguish winner-pausing from loser-topping.

09Kronos ML break-vs-fakeml · 2026-06 · DEAD

Can't predict break-vs-fake; its confidence gate was a volatility proxy.

10Index dispersion signaloptions · 2026-06 · DEAD

No replicating signal; BankNifty monthly-only kills the vehicle anyway.

11Index microstructure 1-min leadmicrostructure · 2026-06 · DEAD

The 1-min lead was an index-staleness artifact; the ~11pt fade bounce was the only real structure.

12Range-scale position sizingoptions · 2026-06 · DEAD

Loses to the live pb=18/28 config OOS; its apparent wins were mislabels.

13Scalp big-loss filtersoptions · 2026-06 · DEAD

No filter cuts the big losses — they're irreducible; manage via SIZING.

14Expiry cutoff + premium-stopoptions · 2026-06 · DEAD

Both worse than baseline; the blowup was variance, not a fixable rule.

15Cam/CPR breakout book (entry-fill teardown)levels · 2026-06-17 · DEAD

Entry booked at the level but confirmed at the close ~1.95% past it — the whole modeled edge lives in that un-gettable gap. No entry (lagging, leading, filtered, LTF-confirm) recovers it.

16Intraday option BUYING (all mechanisms)options · 2026-06-28 · DEAD

Momentum continuation, reversal, compression-straddle: all dead to THETA. Buying short-dated premium intraday is negative-carry, always. Only SELL-theta or swing-underlying can survive.

17Episodic Pivot (Qullamaggie)momentum · 2026-07 · DEAD

Kickoff → pullback → breakout: all 8 cells dead.

18CPR-Swing Angle 0levels · 2026-07 · DEAD

The apparent edge was plain 21-EMA trend; the CPR component flips sign train→test.

19cpr_swing mechanical setups (all)levels · 2026-07 · DEAD

Every mechanical setup dead or beta; the best book loses to a 200-SMA filter. The untested residue = discretion → journal.

20Alpha hunt: flow / skew / rotation / parity-basisoptions · 2026-07 · DEAD

All four sign-flip train→test.

21Gujral ORB + candlestick confluencelevels · 2026-07 · DEAD

Index/equity ORB + candlestick confluence dead across the chapter. Don't re-test.

22MFT relationship screens (7 cheap screens)flows · 2026-07-05 · DEAD

7/7 dead; only futures-basis remains scoped (not built).

23GATI exit reworksmomentum · 2026-07-11 · DEAD

Exits are a solved, dead lever for the RS book — every rework tested worse.

24VWAP band fadelevels · 2026-07-12 · DEAD

v1 AND faithful v2: 0/436 combos held out; the '90% WR' was false; re-test on real futures volume also dead.

25Sector #2-vs-#1 RS rotationmomentum · 2026-07-12 · DEAD

2nd-best RS name vs the leader = coin flip.

26VCP / coil as mechanical entrymomentum · 2026-07-12 · DEAD

Dead 6 ways — coil subtracts value as a mechanical entry or long-vol proxy. Only compression↔expansion MAGNITUDE survived (not direction).

27RVOL — all 5 rolesmomentum · 2026-07-13 · DEAD

Trigger, fade, gate, exit, sizing all closed (fade real but illiquid + decayed). Root: it can't pick the trade — the losing bar arrives unannounced.

28Real-volume VWAP fade + fakeout+OI (index futures)levels · 2026-07-13 · DEAD

Both dead on the real futures volume/OI store (spot index volume is 0 forever — futures is the only real index orderflow source).

29Gann Square of 9esoteric · 2026-07-14 · DEAD

~29M events vs 3 null models: Gann never beats equidistant/random-phase nulls; the √-geometry adds nothing.

30Failed-break fade (15-min CPR)levels · 2026-07-16 · DEAD

75k events: the long-side profit was pure drift; level-breaks dead BOTH directions.

31GIFT Nifty overnight drift / open-reversionmacro · 2026-07-17 · DEAD

H2 drift dead; H3 open-reversion real on the un-gettable auction print, −0.4 bps at a real NIFTY_FUT fill; H5 flat.

32Dad's discretionary VCP playbookmomentum · 2026-07-18 · DEAD

Every lever sign-flips FNO→wide universe = survivorship, not edge. Lesson: report the wide universe first.

33Earnings reaction — directionevents · 2026-07-18 · DEAD

The WINDOW is real (3.9x more travel after minute 1, ~1.5% to close) but nothing calls direction: blind test n=25, model 52% vs always-DOWN 56%; biggest beat FELL.

34Announcement materiality (size ÷ turnover)events · 2026-07-18 · DEAD

Spread sign-flips train→test (−10.2% @20d held out). The ratio was a size-factor proxy measuring smallcap-vs-largecap rotation.

35Intraday cross-sectional hunt (6 families)cross-sectional · 2026-07-19 · DEAD

0/6 families survive: real gross +2..+6 bps/leg everywhere, all under the ~6 bps zero-slip cost floor. X4 lead-lag was the cleanest signal (futures data could revive it).

36M0UIZ 1H CPR-BC reclaim entrylevels · 2026-07-20 · DEAD

His +68.3%/10-day book decomposed: entry dead 4 ways (114k events, all cells premium-negative). The engine was 68% base-rate × 10.7x payoff × hold-through; UNOMINDA rule-break = 44% of net.

37Participant footprint screens (FII/retail/prop)flows · 2026-07-23 · DEAD

Fade-retail, follow-FII, lottery-peak primaries all dead on participant_oi 2022-26.

38CPR-agent ML (classifier + RL vs placebo twins)ml · 2026-07-23 · DEAD

CPR's 7th death. Models match placebo-level twins; RL with ₹-reward learned all-skip (discovered cash). A yday_ret lookahead survived every kill-test EXCEPT permutation importance — a profitable placebo IS the alarm.

39Factor zoo — 462 factorscross-sectional · 2026-07-25 · DEAD

462 factors collapse to ~2 independent bets (SIZE + MOMENTUM≡RS corr +0.98); the 12m-RS upgrade died inside the real GATI book — decile results don't transfer to a filtered book.

40Intraday 15-min cross-sectional reversalcross-sectional · 2026-07-25 · DEAD

1.85 bps gross per leg vs the ~7 bps cost floor — independently replicates the xsec wall.

41Bayer five-fold astrology (1937 method)esoteric · 2026-07-27 · DEAD

Progressed-Moon 15° grid on 435 NSE names / 75.5k flips: timing, direction, and a 12-config sweep ALL chance; placebo group identical. Engine verified vs Solar Fire ±1.4".

42PCR < 1 + PE-side filteroptions · 2026-05 · DISCOUNT

Validated OOS as CONTEXT (fade backdrop), not direction; max-pain dead; as a scalp filter it HURTS.

43Minervini regime overlay (DD-cut)momentum · 2026-06 · DISCOUNT

The drawdown-cut replicates; built into minervini_signals.py. A risk dial, not a return booster.

44Markov regime statesregime · 2026-07 · DISCOUNT

States are real; every tradeable use tested is dead. Open lead: weekly-context.

45Pullback-to-EMA swingmomentum · 2026-07 · DISCOUNT

Works but weaker than headline; gap-fill variant DEAD.

46Sector rotation (wider idea batch)momentum · 2026-07-05 · DISCOUNT

Sector rotation discount; TS trend + 52wk-breadth DEAD; FII/DII history too short.

47ZN5894 fade tradebookdiscretionary · 2026-07-10 · DISCOUNT

The stated mechanical rule is DEAD, but discretionary selection is REAL (p≈0.000). The leak was holding past entry day → journal + risk rules.

48Nifty scalp (mechanical index scalp program)options · 2026-07-16 · RETIRED

User decision: no edge worth the execution risk. Honest numbers were execution-gated (first-candle fills); daemon + tape KEPT for research.

49Day-character ER gaugeregime · 2026-07 · TOOL

Descriptive intraday expansion/contraction gauge with validated persistence — context lens on the Today tab, not an entry signal.

50Upstox news + fundamentals APIsinfra · 2026-07 · TOOL

Both DO exist (/v2/news, /v2/fundamentals/{isin}/income-statement) — structured quarterly rev/PAT replaces PDF parsing. Gotchas documented.

51News → hypothesis → stock engineevents · 2026-07-17 · TOOL

v1 built + dry-run validated (whole-market resolver, Haiku gate + Opus map, immutable journal). Blocked on an Anthropic API key in .env.

52Contraction Score (chartist VCP shrinking-box)momentum · 2026-07-22 · TOOL

Reproduces the YouTube macro-funnel + micro-tightness scores with a subjectivity meter. Shape-not-direction guardrail; Nifty500 only.

53Orderflow footprint lens (absorption/initiative)microstructure · 2026-07-23 · TOOL

3s-tape episode detector at levels for USER discretion; replay-and-correct pending. Pine can't ingest external data → TV overlay via MCP.

54Short ATM straddle (theta harvest)options · 2026-07-15 · OPEN

The ONE held-out-positive lead from the barrier scan: delta-neutral short premium. Needs cost + tail validation before any capital.

55GIFT evening volatility → next-day risk dialmacro · 2026-07-17 · OPEN

Real next-day risk signal, incremental over lagged vol, holds on both halves — awaiting a book to gate.

56DII futures 5-day net → next-dayflows · 2026-07-23 · OPEN

IC +0.10 on both splits but 2026 flat — DISCOUNT lead, forward-track only.

57Minervini momentum — intraday vs positionalmomentum · 2026-05 · TRUST

The momentum edge lives overnight/positional; intraday expression dead. Foundation of the GATI book.

58RS long-short monthlymomentum · 2026-06 · TRUST

Long-only leg: CAGR 50.1% / Sharpe 1.28 after the lookahead patch. Short leg dead. Became the GATI book's ancestor.

59Volume-conditioned momentum (Lee-Swaminathan)momentum · 2026-07-12 · TRUST

RARE survivor: spread real at +35/+57 bps/mo held-out, cost-robust. Absolute CAGR is survivorship fiction; transplant into the Minervini book DEAD.

60GATI (RS/Minervini positional book)momentum · live · TRUST

The compounding book. Headline '48% CAGR' splits into 85% (2021-23) vs 13.7% (2024-26) — quote regime numbers. N=5 concentration, leverage, faster-rebalance all tested and REJECTED. ₹5L forward paper test running.

The bar kept rising

The most underrated thing in four months of work is not any single result. It is that the standard an idea had to clear went up, visibly, month after month, and several ideas that passed the early bar are dead at the late one.

  1. Expectancy ≥ 0.10R, at least 300 tradesThe opening checklist, written before anything ran.
  2. Re-priced at a fill you could actually getAfter the teardown. This one alone killed the entire first book.
  3. Net of a real cost floorRebuilt per vehicle from STT, spread and impact rather than assumed.
  4. Chronological held-out splitTrain on the past, test on a period the search never saw.
  5. Measured against a calibrated nullNot against zero. Against what random entry does on the same days.
  6. Survives an adversarial red teamSomeone actively trying to reverse the sign, using independently written code.
  7. t > 3, for multiple testingThe Harvey–Liu–Zhu bar, because by now we had run hundreds of tests.

What cleared the bar

The signal layer proved nothing. Across sixty threads, a hundred pre-registered hypotheses and 104 pre-registered kabaddi cells, not one entry pattern carried strength that survived the list above: not levels, not machine-learned policies, not fitted geometry, not folklore. That result is the product, not the casualty. The instrument exists so this sentence could be said with evidence rather than exhaustion.

Where to enter never cleared the bar. How much to carry, and when to cut, did.

Two things survived, and both were measured rather than believed. Discretionary selection is real: a trader’s stated rule died under the machine while the selection underneath it tested at p ≈ 0.000 (entry 09), and the kabaddi book, written down as a specification, carries positive expectancy (entry 14). And trade management is where outcomes are actually decided: the identical book at option-like leverage lands at +9.2% a year with de-sizing against a median of −94.9% without it (entry 14), and the single result the literature sweep left standing was a drawdown stop, not an entry (entry 13). The returns are not the claim. The asymmetry is: every attempt to time an entry died, and what survived is selection, sizing, and the exit.