fig, axes = plt.subplots(2, 2, figsize=(16, 10))
# H1: Top-N
ax = axes[0, 0]
for n in [2, 3, 4, 5, 6]:
ret = backtest_sector_momentum(closes, sector_etfs, top_n=n)
cum = (1 + ret).cumprod()
ax.plot(cum.index, cum, label=f'Top-{n}', linewidth=1.5)
ax.set_title('H1: Top-N positions', fontweight='bold')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# H2: Lookback
ax = axes[0, 1]
for lb_m, lb_d in [(6, 126), (9, 189), (12, 252), (18, 378)]:
ret = backtest_sector_momentum(closes, sector_etfs, lookback=lb_d)
cum = (1 + ret).cumprod()
ax.plot(cum.index, cum, label=f'{lb_m}m', linewidth=1.5)
ax.set_title('H2: Lookback period', fontweight='bold')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# H3: Vol window
ax = axes[1, 0]
for vw in [20, 40, 63, 90]:
ret = backtest_sector_momentum(closes, sector_etfs, vol_window=vw)
cum = (1 + ret).cumprod()
ax.plot(cum.index, cum, label=f'Vol {vw}d', linewidth=1.5)
ax.set_title('H3: Vol window', fontweight='bold')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# H4: Regime filter
ax = axes[1, 1]
for name, rf in [('Aucun', 'none'), ('SMA200', 'sma200'), ('SMA200+SMA20', 'both')]:
ret = backtest_sector_momentum(closes, sector_etfs, regime_filter=rf)
cum = (1 + ret).cumprod()
ax.plot(cum.index, cum, label=name, linewidth=1.5)
spy_cum = (1 + spy_ret).cumprod()
ax.plot(spy_cum.index, spy_cum, label='SPY B&H', linestyle='--', alpha=0.5)
ax.set_title('H4: Regime filter', fontweight='bold')
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('momentumstrategy_quantbook_analysis.png', dpi=150, bbox_inches='tight')
plt.show()