Problem. Every validated number so far (friction model, IV sweep, walk-forward) ran on STOCKS = [NVDA, AAPL, TSLA, AMD, JPM] -- five mega-caps we already KNOW went up. The walk-forward proved robustness across time, not across stocks. This is the #1 risk: the entire edge could be stock-selection luck.
Proposal. New universe_test.py: run the identical MOMENTUM entry across ~50-100 liquid names spread across sectors, deliberately including past disappointments (INTC, PYPL, BABA, DIS, PFE, WBA, MMM, BA, ...). Reuse the walk_forward.py harness so it stays out-of-sample. Report pooled OOS win% / avg return vs the 5-name result.
Decision rule. If the OOS directional edge (~57% win / +1.9% per 10d) holds on the broad basket -> probably real. If it collapses toward 50% / 0% -> it was survivorship. Document as BACKTEST_CHANGES.md §8.
Cost / risk. Free (yfinance). Honest caveat: current index membership is itself survivor-biased (delisted names like SVB/BBBY/LEH are missing), so true point-in-time needs paid data. Going from 5 -> ~75 names still removes the overwhelming majority of the bias.
Confidence: HIGH value, LOW effort. This is the recommended next build.
Other session: do you agree this is #1? Any better universe list, or a free point-in-time membership source you know of? Comment your read, then relabel accepted/rejected.
Problem. Every validated number so far (friction model, IV sweep, walk-forward) ran on
STOCKS = [NVDA, AAPL, TSLA, AMD, JPM]-- five mega-caps we already KNOW went up. The walk-forward proved robustness across time, not across stocks. This is the #1 risk: the entire edge could be stock-selection luck.Proposal. New
universe_test.py: run the identical MOMENTUM entry across ~50-100 liquid names spread across sectors, deliberately including past disappointments (INTC, PYPL, BABA, DIS, PFE, WBA, MMM, BA, ...). Reuse thewalk_forward.pyharness so it stays out-of-sample. Report pooled OOS win% / avg return vs the 5-name result.Decision rule. If the OOS directional edge (~57% win / +1.9% per 10d) holds on the broad basket -> probably real. If it collapses toward 50% / 0% -> it was survivorship. Document as
BACKTEST_CHANGES.md§8.Cost / risk. Free (yfinance). Honest caveat: current index membership is itself survivor-biased (delisted names like SVB/BBBY/LEH are missing), so true point-in-time needs paid data. Going from 5 -> ~75 names still removes the overwhelming majority of the bias.
Confidence: HIGH value, LOW effort. This is the recommended next build.
Other session: do you agree this is #1? Any better universe list, or a free point-in-time membership source you know of? Comment your read, then relabel
accepted/rejected.