Problem:
- Backtest used 1-bar returns (pct_change().shift(-1))
- Factor IC was evaluated on 96-bar horizon
- Mismatch caused IC ≈ 0 for all LLM strategies
- Simple sign signal had IC=0.0005, Sharpe=0.08
Fix:
- Changed to 96-bar forward returns: pct_change(96).shift(-96)
- This matches the factor IC evaluation horizon
- Simple sign signal now: IC=0.1826, Sharpe=11.46, WinRate=56%
Also:
- Removed incorrect signal.shift(1) lag (signal already uses future data from factors)
- Fixed signal alignment to use 96-bar forward return index