Window: IS[0..504] OOS[509..635] (equal-weight baseline net Sharpe: +0.026) Seeds: [0, 1, 2] | total_timesteps: 6000
Ablation table
| Label | Median Sharpe | Mean Sharpe | Std | Uplift vs EW | Median turnover | Mean cost bps | Median maxDD |
|---|---|---|---|---|---|---|---|
| A_baseline_ppo_no_costs_no_constraints | +0.052 | +0.041 | 0.016 | +0.026 | 0.003 | 0.0 | -32.49% |
| B_costs_in_env | +0.015 | +0.012 | 0.016 | -0.010 | 0.003 | 0.4 | -32.58% |
| C_costs_plus_turnover_penalty | +0.018 | +0.012 | 0.017 | -0.008 | 0.003 | 0.4 | -32.57% |
| D_costs_penalty_weekly_rebalance | +0.025 | +0.022 | 0.007 | -0.000 | 0.001 | 0.1 | -32.60% |
| E_constrained_overlay | +0.028 | +0.024 | 0.006 | +0.002 | 0.001 | 0.1 | -32.57% |
| F_no_trade_band | +0.020 | +0.025 | 0.019 | -0.006 | 0.000 | 0.0 | -32.43% |
| G_full_v4_with_regime_obs | +0.020 | +0.025 | 0.019 | -0.006 | 0.000 | 0.0 | -32.43% |
Ablation flags (what each experiment toggles OFF)
| Flag | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|
| no_constraints | ON | ON | ON | ON | OFF | OFF | OFF |
| no_cost | ON | OFF | OFF | OFF | OFF | OFF | OFF |
| no_turnover_penalty | ON | ON | OFF | OFF | OFF | OFF | OFF |
| daily_rebalance (1d vs 7d) | ON | ON | ON | OFF | OFF | OFF | OFF |
| no_no_trade_band | ON | ON | ON | ON | ON | OFF | OFF |
| no_regime_obs (vs full v4 G) | OFF | OFF | OFF | OFF | OFF | OFF | OFF |
Attribution
Compare rows in order to attribute which v4 feature fixes what:
- A → B: adding cost to env
- B → C: adding turnover penalty
- C → D: switching from daily to weekly rebalance
- D → E: enabling the constraint overlay (cash/daily-change/turnover caps)
- E → F: enabling the no-trade band
- F → G: enabling the regime-aware observation block (this env always has the regime slot; G is the full v4 with no ablations)
elapsed: 786.1s