Four research directions beyond V7+VT36:
1. single_stock_swing: 20 famous stocks (Mag 7 + others), per-stock
optimized swing trading. High-vol growth stocks (AMD Sharpe 1.55,
TSLA 1.54) work best, but overfitting risk is extreme — universal
params only TSLA is viable. Not competitive with V7.
2. v7_literature_alpha: 9 academic directions (VIX overlay, Kelly
sizing, multi-MA, cross-asset, momentum acceleration, VIX mean-
reversion, vol-adaptive PT, combined). V3's regime engine already
implicitly captures most literature signals. MA130 marginally
better than MA150 (+0.02 Sharpe, within noise).
3. new_frameworks_eval: volatility trading (SVXY risk-off) and
calendar effects (turn-of-month). SVXY and V7 regime structurally
conflict — SVXY crashes exactly when V7 goes risk-off.
Turn-of-month has decent Sharpe (1.30) but only 28% annual.
Nothing beats V7.
4. smart_dca_eval: fixed/VIX-scaled/MA-deviation/value-averaging/RSI
DCA into SPY/QQQ/TQQQ/UPRO + V7 hybrids. Smart DCA barely beats
fixed DCA. Any DCA hybrid dilutes V7's alpha. DCA only useful for
new monthly contributions that can't lump-sum into V7.
Conclusion: V7+VT36 remains SOTA across all tested frameworks.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The existing framework fetches today's S&P 500 constituents from Wikipedia
and applies that list to the entire 10-year price history — classic
survivorship bias. Stocks that went bankrupt or were removed for poor
performance are absent, while today's winners (which may have been minor
names 10 years ago) are implicitly selected. This materially inflates
reported strategy returns.
New pipeline:
- universe_history.py reconstructs per-ticker membership intervals by
walking Wikipedia's "Selected changes" table backward from today.
- research/fetch_historical.py downloads prices for all 848 tickers
that were ever members (Yahoo returns ~675 of them; ~170 fully
delisted names are unavailable — remaining partial bias).
- research/pit_backtest.py masks prices to NaN outside membership
windows so strategies naturally cannot select non-members.
- research/strategies_plus.py adds RecoveryMomentumPlus (generalized
Recovery+Momentum with configurable weighting / blend / regime hook)
and an EnsembleStrategy.
- research/optimize.py runs five experiments: bias drift, hyperparameter
sweep (2016-2022 train / 2023-2026 test), SPY MA regime filter,
weighting schemes, and an uncorrelated-config ensemble.
Headline finding: the biased backtest reports 40.9% CAGR for
recovery_mom_top10 over 2016-2026; the point-in-time version reports
22.4% (vs 14.0% SPY buy-and-hold). True edge is ~8pp CAGR, not ~27pp.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>