E-11. Cross-sectional momentum rotation — stages 1~2 (2026-07-13)
- 1st run: simulation bug found — negative equity in bankrupt legs was left in place, producing MDD -108% and other impossible statistics plus a "loss but pass" verdict. Fix: freeze at 0 on bankruptcy, add MDD and loss conditions to the val gate, and switch screening sizing to the F baseline. (Lesson: a number like train +523% is a bug signal, not a celebration)
- 2nd run (13 symbols, F-baseline sizing, grid of 12 combinations):
- Best train Sharpe 1.30 (mom 15 days/K1/trend 60 days), every combination eligible
- val comparison: K1 failed (-3.2%, MDD -16.3%) / K2 passed (+14.3%, Sharpe 1.71, MDD -4.6%) / #3 passed (+10.7%)
- Caveats: (a) K2 frequently skips orders below the minimum (too little capital per leg) — the val pass may depend on the skip pattern, (b) #2 train MDD -26% violates the account kill (-15%) — exposure must be cut even if it survives, (c) as a momentum-factor family, the prior that it is vulnerable to the kind of regime that killed vol_breakout is kept.
- Next: walk-forward (run_rotation_wf.py).
Source and migration evidence
Source: backtest/docs/experiment-log.md#E-11
Original SHA-256: 069c4aaaf53a20930ca8d94ba6365b4ce2b6bc560171d662a4c179ea55a6857c
Raw data and account information are not part of the public package. The original results do not replace statistical or scientific revalidation. The English text is a translation; numbers, tables and charts are carried over unchanged.