diff --git a/reports/.cache/research-cands.pkl b/reports/.cache/research-cands.pkl new file mode 100644 index 0000000..7c08bd2 Binary files /dev/null and b/reports/.cache/research-cands.pkl differ diff --git a/reports/research-matrix-phase-a.json b/reports/research-matrix-phase-a.json new file mode 100644 index 0000000..f455cdf --- /dev/null +++ b/reports/research-matrix-phase-a.json @@ -0,0 +1,4115 @@ +{ + "generated_at": "2026-07-18T15:17:10.310517", + "snapshot": "/Users/taathde3/git/lab/signal_platform/backtest_snapshots/prod.sqlite", + "cadence": "daily", + "validation_split": "2024-07-01", + "n_trials": 20, + "pre_registered_arm_ids": [ + "a0_control", + "a2_hold_30", + "a2_hold_45", + "a2_hold_60", + "a2_hold_90", + "a3_vt15_c05_15_lb60", + "a3_vt20_c05_15_lb60", + "a3_vt25_c05_15_lb60", + "a3_vt15_c025_20_lb60", + "a3_vt20_c025_20_lb60", + "a3_vt25_c025_20_lb60", + "a3_vt20_c05_15_lb20", + "a3_vt20_c05_15_lb126", + "a4_next_open", + "a5_corr06_skip", + "a5_corr07_skip", + "a5_corr08_skip", + "a5_corr06_half", + "a5_corr07_half", + "a5_corr08_half" + ], + "selected_arm_ids": [ + "a0_control", + "a2_hold_30", + "a2_hold_45", + "a2_hold_60", + "a2_hold_90", + "a3_vt15_c05_15_lb60", + "a3_vt20_c05_15_lb60", + "a3_vt25_c05_15_lb60", + "a3_vt15_c025_20_lb60", + "a3_vt20_c025_20_lb60", + "a3_vt25_c025_20_lb60", + "a3_vt20_c05_15_lb20", + "a3_vt20_c05_15_lb126", + "a4_next_open", + "a5_corr06_skip", + "a5_corr07_skip", + "a5_corr08_skip", + "a5_corr06_half", + "a5_corr07_half", + "a5_corr08_half" + ], + "entry_candidate_count": 1011248, + "qualified_longs": 5189, + "promotion_rule": "Promote only if validation Sharpe \u2265 control, validation DD not worse by >2pp, and train Sharpe not worse. Always report whether validation Sharpe delta exceeds 1 SE (expect most will not).", + "fip_id_fingerprint": [ + { + "signal": "fip_id", + "weeks": 35, + "avg_cross_section": 497.7, + "mean_ic": -0.045, + "ic_t_stat": -2.92, + "ic_positive_pct": 25.7, + "mean_quintile_spread": -0.0167, + "reliable": true + } + ], + "arms": [ + { + "id": "a0_control", + "group": "a0", + "label": "Control: close fill, hold 30, risk 1%, no corr/vol", + "config": { + "hold_days": 30, + "fill_mode": "close" + }, + "windows": [ + { + "window": "train", + "dsr": 0.7448, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 23706.04, + "total_return_pct": 137.1, + "cagr_pct": 49.8, + "max_drawdown_pct": 17.9, + "calmar": 2.78, + "sharpe": 1.75, + "sharpe_se": 0.675, + "psr": 0.9953, + "n_returns": 535, + "return_skew": 0.4266, + "return_kurtosis": 4.9374, + "trades": 240, + "win_rate": 36.7, + "avg_trade_pnl": 57.11, + "best_trade_r": 12.02, + "worst_trade_r": -3.1, + "best_trade_pnl": 2008.56, + "worst_trade_pnl": -561.69, + "avg_hold_days": 15.3, + "exit_reasons": { + "stop": 112, + "time": 53, + "trailing_stop": 75 + }, + "skipped_book_full": 327, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.9 + }, + { + "year": 2023, + "return_pct": 78.1 + }, + { + "year": 2024, + "return_pct": 19.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "post_stop_events": 112, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 51 + }, + { + "window": "validation", + "dsr": 0.6786, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20060.98, + "total_return_pct": 100.6, + "cagr_pct": 41.6, + "max_drawdown_pct": 20.9, + "calmar": 1.99, + "sharpe": 1.68, + "sharpe_se": 0.716, + "psr": 0.9905, + "n_returns": 502, + "return_skew": -0.0866, + "return_kurtosis": 4.395, + "trades": 239, + "win_rate": 35.1, + "avg_trade_pnl": 42.1, + "best_trade_r": 12.03, + "worst_trade_r": -2.82, + "best_trade_pnl": 2012.72, + "worst_trade_pnl": -330.01, + "avg_hold_days": 14.0, + "exit_reasons": { + "stop": 121, + "time": 44, + "trailing_stop": 74 + }, + "skipped_book_full": 207, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.7 + }, + { + "year": 2025, + "return_pct": 50.3 + }, + { + "year": 2026, + "return_pct": 14.5 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "post_stop_events": 121, + "post_stop_reentries": 63, + "post_stop_states_open_at_end": 58 + }, + { + "window": "full", + "dsr": 0.9507, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 48810.86, + "total_return_pct": 388.1, + "cagr_pct": 48.3, + "max_drawdown_pct": 21.6, + "calmar": 2.23, + "sharpe": 1.77, + "sharpe_se": 0.496, + "psr": 0.9998, + "n_returns": 1008, + "return_skew": 0.2714, + "return_kurtosis": 4.9751, + "trades": 472, + "win_rate": 36.2, + "avg_trade_pnl": 82.23, + "best_trade_r": 12.03, + "worst_trade_r": -3.1, + "best_trade_pnl": 4897.19, + "worst_trade_pnl": -802.94, + "avg_hold_days": 14.6, + "exit_reasons": { + "stop": 229, + "time": 96, + "trailing_stop": 147 + }, + "skipped_book_full": 519, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.9 + }, + { + "year": 2023, + "return_pct": 78.1 + }, + { + "year": 2024, + "return_pct": 42.5 + }, + { + "year": 2025, + "return_pct": 50.3 + }, + { + "year": 2026, + "return_pct": 14.5 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "post_stop_events": 229, + "post_stop_reentries": 142, + "post_stop_states_open_at_end": 87 + } + ] + }, + { + "id": "a2_hold_30", + "group": "a2", + "label": "Max hold 30", + "config": { + "hold_days": 30 + }, + "windows": [ + { + "window": "train", + "dsr": 0.7448, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 23706.04, + "total_return_pct": 137.1, + "cagr_pct": 49.8, + "max_drawdown_pct": 17.9, + "calmar": 2.78, + "sharpe": 1.75, + "sharpe_se": 0.675, + "psr": 0.9953, + "n_returns": 535, + "return_skew": 0.4266, + "return_kurtosis": 4.9374, + "trades": 240, + "win_rate": 36.7, + "avg_trade_pnl": 57.11, + "best_trade_r": 12.02, + "worst_trade_r": -3.1, + "best_trade_pnl": 2008.56, + "worst_trade_pnl": -561.69, + "avg_hold_days": 15.3, + "exit_reasons": { + "stop": 112, + "time": 53, + "trailing_stop": 75 + }, + "skipped_book_full": 327, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.9 + }, + { + "year": 2023, + "return_pct": 78.1 + }, + { + "year": 2024, + "return_pct": 19.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "post_stop_events": 112, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 51 + }, + { + "window": "validation", + "dsr": 0.6786, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20060.98, + "total_return_pct": 100.6, + "cagr_pct": 41.6, + "max_drawdown_pct": 20.9, + "calmar": 1.99, + "sharpe": 1.68, + "sharpe_se": 0.716, + "psr": 0.9905, + "n_returns": 502, + "return_skew": -0.0866, + "return_kurtosis": 4.395, + "trades": 239, + "win_rate": 35.1, + "avg_trade_pnl": 42.1, + "best_trade_r": 12.03, + "worst_trade_r": -2.82, + "best_trade_pnl": 2012.72, + "worst_trade_pnl": -330.01, + "avg_hold_days": 14.0, + "exit_reasons": { + "stop": 121, + "time": 44, + "trailing_stop": 74 + }, + "skipped_book_full": 207, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.7 + }, + { + "year": 2025, + "return_pct": 50.3 + }, + { + "year": 2026, + "return_pct": 14.5 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "post_stop_events": 121, + "post_stop_reentries": 63, + "post_stop_states_open_at_end": 58 + }, + { + "window": "full", + "dsr": 0.9507, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 48810.86, + "total_return_pct": 388.1, + "cagr_pct": 48.3, + "max_drawdown_pct": 21.6, + "calmar": 2.23, + "sharpe": 1.77, + "sharpe_se": 0.496, + "psr": 0.9998, + "n_returns": 1008, + "return_skew": 0.2714, + "return_kurtosis": 4.9751, + "trades": 472, + "win_rate": 36.2, + "avg_trade_pnl": 82.23, + "best_trade_r": 12.03, + "worst_trade_r": -3.1, + "best_trade_pnl": 4897.19, + "worst_trade_pnl": -802.94, + "avg_hold_days": 14.6, + "exit_reasons": { + "stop": 229, + "time": 96, + "trailing_stop": 147 + }, + "skipped_book_full": 519, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.9 + }, + { + "year": 2023, + "return_pct": 78.1 + }, + { + "year": 2024, + "return_pct": 42.5 + }, + { + "year": 2025, + "return_pct": 50.3 + }, + { + "year": 2026, + "return_pct": 14.5 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "post_stop_events": 229, + "post_stop_reentries": 142, + "post_stop_states_open_at_end": 87 + } + ] + }, + { + "id": "a2_hold_45", + "group": "a2", + "label": "Max hold 45", + "config": { + "hold_days": 45 + }, + "windows": [ + { + "window": "train", + "dsr": 0.5832, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19755.4, + "total_return_pct": 97.6, + "cagr_pct": 36.4, + "max_drawdown_pct": 21.2, + "calmar": 1.72, + "sharpe": 1.43, + "sharpe_se": 0.677, + "psr": 0.9827, + "n_returns": 550, + "return_skew": 0.0829, + "return_kurtosis": 3.5002, + "trades": 218, + "win_rate": 34.9, + "avg_trade_pnl": 44.75, + "best_trade_r": 11.65, + "worst_trade_r": -2.59, + "best_trade_pnl": 1579.96, + "worst_trade_pnl": -365.67, + "avg_hold_days": 17.4, + "exit_reasons": { + "stop": 102, + "time": 22, + "trailing_stop": 94 + }, + "skipped_book_full": 595, + "spy_return_pct": 41.5, + "yearly_returns": [ + { + "year": 2022, + "return_pct": -5.8 + }, + { + "year": 2023, + "return_pct": 76.6 + }, + { + "year": 2024, + "return_pct": 18.9 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-09-03", + "post_stop_events": 102, + "post_stop_reentries": 53, + "post_stop_states_open_at_end": 49 + }, + { + "window": "validation", + "dsr": 0.8495, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 25321.71, + "total_return_pct": 153.2, + "cagr_pct": 59.1, + "max_drawdown_pct": 19.3, + "calmar": 3.07, + "sharpe": 2.07, + "sharpe_se": 0.698, + "psr": 0.9985, + "n_returns": 502, + "return_skew": 0.3971, + "return_kurtosis": 5.7963, + "trades": 202, + "win_rate": 36.1, + "avg_trade_pnl": 75.85, + "best_trade_r": 26.57, + "worst_trade_r": -1.92, + "best_trade_pnl": 3989.15, + "worst_trade_pnl": -297.34, + "avg_hold_days": 16.9, + "exit_reasons": { + "stop": 96, + "time": 19, + "trailing_stop": 87 + }, + "skipped_book_full": 275, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 33.9 + }, + { + "year": 2025, + "return_pct": 54.7 + }, + { + "year": 2026, + "return_pct": 22.3 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "post_stop_events": 96, + "post_stop_reentries": 47, + "post_stop_states_open_at_end": 49 + }, + { + "window": "full", + "dsr": 0.9524, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 49958.07, + "total_return_pct": 399.6, + "cagr_pct": 49.2, + "max_drawdown_pct": 21.2, + "calmar": 2.32, + "sharpe": 1.78, + "sharpe_se": 0.497, + "psr": 0.9998, + "n_returns": 1008, + "return_skew": 0.2269, + "return_kurtosis": 4.6832, + "trades": 415, + "win_rate": 35.2, + "avg_trade_pnl": 96.28, + "best_trade_r": 26.57, + "worst_trade_r": -2.59, + "best_trade_pnl": 7870.33, + "worst_trade_pnl": -586.62, + "avg_hold_days": 17.1, + "exit_reasons": { + "stop": 195, + "time": 39, + "trailing_stop": 181 + }, + "skipped_book_full": 870, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": -5.8 + }, + { + "year": 2023, + "return_pct": 76.6 + }, + { + "year": 2024, + "return_pct": 58.9 + }, + { + "year": 2025, + "return_pct": 54.7 + }, + { + "year": 2026, + "return_pct": 22.3 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "post_stop_events": 195, + "post_stop_reentries": 123, + "post_stop_states_open_at_end": 72 + } + ] + }, + { + "id": "a2_hold_60", + "group": "a2", + "label": "Max hold 60", + "config": { + "hold_days": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.4051, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 16925.56, + "total_return_pct": 69.3, + "cagr_pct": 26.3, + "max_drawdown_pct": 21.0, + "calmar": 1.25, + "sharpe": 1.11, + "sharpe_se": 0.668, + "psr": 0.9523, + "n_returns": 565, + "return_skew": 0.0582, + "return_kurtosis": 3.2911, + "trades": 186, + "win_rate": 37.1, + "avg_trade_pnl": 37.23, + "best_trade_r": 16.03, + "worst_trade_r": -2.59, + "best_trade_pnl": 1398.56, + "worst_trade_pnl": -321.33, + "avg_hold_days": 18.7, + "exit_reasons": { + "stop": 87, + "time": 7, + "trailing_stop": 92 + }, + "skipped_book_full": 286, + "spy_return_pct": 46.5, + "yearly_returns": [ + { + "year": 2022, + "return_pct": -5.5 + }, + { + "year": 2023, + "return_pct": 66.9 + }, + { + "year": 2024, + "return_pct": 7.5 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-09-24", + "post_stop_events": 87, + "post_stop_reentries": 45, + "post_stop_states_open_at_end": 42 + }, + { + "window": "validation", + "dsr": 0.8667, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 27225.08, + "total_return_pct": 172.3, + "cagr_pct": 64.9, + "max_drawdown_pct": 19.3, + "calmar": 3.37, + "sharpe": 2.12, + "sharpe_se": 0.695, + "psr": 0.9989, + "n_returns": 502, + "return_skew": 0.4856, + "return_kurtosis": 6.4287, + "trades": 201, + "win_rate": 36.8, + "avg_trade_pnl": 85.7, + "best_trade_r": 40.13, + "worst_trade_r": -2.86, + "best_trade_pnl": 4258.45, + "worst_trade_pnl": -548.9, + "avg_hold_days": 17.7, + "exit_reasons": { + "open_at_end": 1, + "stop": 100, + "time": 12, + "trailing_stop": 88 + }, + "skipped_book_full": 366, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 44.7 + }, + { + "year": 2025, + "return_pct": 61.9 + }, + { + "year": 2026, + "return_pct": 16.3 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "post_stop_events": 100, + "post_stop_reentries": 49, + "post_stop_states_open_at_end": 51 + }, + { + "window": "full", + "dsr": 0.91, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 44405.75, + "total_return_pct": 344.1, + "cagr_pct": 44.9, + "max_drawdown_pct": 21.0, + "calmar": 2.14, + "sharpe": 1.62, + "sharpe_se": 0.499, + "psr": 0.9994, + "n_returns": 1008, + "return_skew": 0.1398, + "return_kurtosis": 4.5028, + "trades": 385, + "win_rate": 36.9, + "avg_trade_pnl": 89.37, + "best_trade_r": 40.13, + "worst_trade_r": -2.86, + "best_trade_pnl": 6945.79, + "worst_trade_pnl": -895.28, + "avg_hold_days": 18.2, + "exit_reasons": { + "open_at_end": 1, + "stop": 186, + "time": 19, + "trailing_stop": 179 + }, + "skipped_book_full": 652, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": -5.5 + }, + { + "year": 2023, + "return_pct": 66.9 + }, + { + "year": 2024, + "return_pct": 49.8 + }, + { + "year": 2025, + "return_pct": 61.9 + }, + { + "year": 2026, + "return_pct": 16.3 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "post_stop_events": 186, + "post_stop_reentries": 113, + "post_stop_states_open_at_end": 73 + } + ] + }, + { + "id": "a2_hold_90", + "group": "a2", + "label": "Max hold 90", + "config": { + "hold_days": 90 + }, + "windows": [ + { + "window": "train", + "dsr": 0.5379, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 18864.58, + "total_return_pct": 88.6, + "cagr_pct": 30.7, + "max_drawdown_pct": 21.0, + "calmar": 1.47, + "sharpe": 1.3, + "sharpe_se": 0.652, + "psr": 0.9769, + "n_returns": 595, + "return_skew": 0.0227, + "return_kurtosis": 3.5498, + "trades": 179, + "win_rate": 38.0, + "avg_trade_pnl": 49.52, + "best_trade_r": 14.64, + "worst_trade_r": -2.59, + "best_trade_pnl": 1481.51, + "worst_trade_pnl": -355.87, + "avg_hold_days": 19.5, + "exit_reasons": { + "stop": 82, + "time": 1, + "trailing_stop": 96 + }, + "skipped_book_full": 286, + "spy_return_pct": 47.8, + "yearly_returns": [ + { + "year": 2022, + "return_pct": -5.5 + }, + { + "year": 2023, + "return_pct": 70.1 + }, + { + "year": 2024, + "return_pct": 17.5 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-11-05", + "post_stop_events": 82, + "post_stop_reentries": 41, + "post_stop_states_open_at_end": 41 + }, + { + "window": "validation", + "dsr": 0.8348, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 26180.66, + "total_return_pct": 161.8, + "cagr_pct": 61.8, + "max_drawdown_pct": 23.1, + "calmar": 2.67, + "sharpe": 2.04, + "sharpe_se": 0.711, + "psr": 0.998, + "n_returns": 502, + "return_skew": 0.1382, + "return_kurtosis": 6.6872, + "trades": 191, + "win_rate": 34.6, + "avg_trade_pnl": 84.72, + "best_trade_r": 34.25, + "worst_trade_r": -3.75, + "best_trade_pnl": 4290.25, + "worst_trade_pnl": -387.4, + "avg_hold_days": 18.2, + "exit_reasons": { + "stop": 97, + "time": 2, + "trailing_stop": 92 + }, + "skipped_book_full": 392, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 38.5 + }, + { + "year": 2025, + "return_pct": 71.0 + }, + { + "year": 2026, + "return_pct": 10.6 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "post_stop_events": 97, + "post_stop_reentries": 52, + "post_stop_states_open_at_end": 45 + }, + { + "window": "full", + "dsr": 0.9236, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 46896.64, + "total_return_pct": 369.0, + "cagr_pct": 46.8, + "max_drawdown_pct": 23.5, + "calmar": 1.99, + "sharpe": 1.67, + "sharpe_se": 0.503, + "psr": 0.9996, + "n_returns": 1008, + "return_skew": 0.0159, + "return_kurtosis": 5.2177, + "trades": 367, + "win_rate": 35.7, + "avg_trade_pnl": 100.54, + "best_trade_r": 34.25, + "worst_trade_r": -3.75, + "best_trade_pnl": 7685.0, + "worst_trade_pnl": -693.94, + "avg_hold_days": 18.7, + "exit_reasons": { + "stop": 178, + "time": 3, + "trailing_stop": 186 + }, + "skipped_book_full": 678, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": -5.5 + }, + { + "year": 2023, + "return_pct": 70.1 + }, + { + "year": 2024, + "return_pct": 54.4 + }, + { + "year": 2025, + "return_pct": 71.0 + }, + { + "year": 2026, + "return_pct": 10.6 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "post_stop_events": 178, + "post_stop_reentries": 110, + "post_stop_states_open_at_end": 68 + } + ] + }, + { + "id": "a3_vt15_c05_15_lb60", + "group": "a3", + "label": "Vol target 15% clamp[0.5,1.5] lb60", + "config": { + "vol_target": 0.15, + "vol_clamp": [ + 0.5, + 1.5 + ], + "vol_lookback": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.6359, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19815.66, + "total_return_pct": 98.2, + "cagr_pct": 37.7, + "max_drawdown_pct": 17.8, + "calmar": 2.12, + "sharpe": 1.54, + "sharpe_se": 0.674, + "psr": 0.9887, + "n_returns": 535, + "return_skew": 0.5013, + "return_kurtosis": 5.3503, + "trades": 283, + "win_rate": 37.1, + "avg_trade_pnl": 34.68, + "best_trade_r": 10.08, + "worst_trade_r": -3.26, + "best_trade_pnl": 846.53, + "worst_trade_pnl": -257.26, + "avg_hold_days": 15.2, + "exit_reasons": { + "stop": 127, + "time": 62, + "trailing_stop": 94 + }, + "skipped_book_full": 1044, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.9 + }, + { + "year": 2023, + "return_pct": 49.2 + }, + { + "year": 2024, + "return_pct": 22.0 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.15, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.7686, + "vol_scalar_entries": 1376, + "post_stop_events": 127, + "post_stop_reentries": 81, + "post_stop_states_open_at_end": 46 + }, + { + "window": "validation", + "dsr": 0.44, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 15850.9, + "total_return_pct": 58.5, + "cagr_pct": 25.9, + "max_drawdown_pct": 23.6, + "calmar": 1.1, + "sharpe": 1.24, + "sharpe_se": 0.715, + "psr": 0.9585, + "n_returns": 502, + "return_skew": -0.1415, + "return_kurtosis": 4.4243, + "trades": 268, + "win_rate": 35.4, + "avg_trade_pnl": 21.83, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1375.72, + "worst_trade_pnl": -377.92, + "avg_hold_days": 14.3, + "exit_reasons": { + "stop": 138, + "time": 50, + "trailing_stop": 80 + }, + "skipped_book_full": 350, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 15.7 + }, + { + "year": 2025, + "return_pct": 23.6 + }, + { + "year": 2026, + "return_pct": 10.9 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.15, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.7983, + "vol_scalar_entries": 731, + "post_stop_events": 138, + "post_stop_reentries": 77, + "post_stop_states_open_at_end": 61 + }, + { + "window": "full", + "dsr": 0.8325, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 31341.46, + "total_return_pct": 213.4, + "cagr_pct": 32.8, + "max_drawdown_pct": 23.1, + "calmar": 1.42, + "sharpe": 1.43, + "sharpe_se": 0.497, + "psr": 0.998, + "n_returns": 1008, + "return_skew": 0.2493, + "return_kurtosis": 5.1137, + "trades": 544, + "win_rate": 36.6, + "avg_trade_pnl": 39.23, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 2720.13, + "worst_trade_pnl": -751.53, + "avg_hold_days": 14.8, + "exit_reasons": { + "stop": 260, + "time": 112, + "trailing_stop": 172 + }, + "skipped_book_full": 1394, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.9 + }, + { + "year": 2023, + "return_pct": 49.2 + }, + { + "year": 2024, + "return_pct": 40.8 + }, + { + "year": 2025, + "return_pct": 23.6 + }, + { + "year": 2026, + "return_pct": 10.9 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.15, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.77, + "vol_scalar_entries": 2092, + "post_stop_events": 260, + "post_stop_reentries": 176, + "post_stop_states_open_at_end": 84 + } + ] + }, + { + "id": "a3_vt20_c05_15_lb60", + "group": "a3", + "label": "Vol target 20% clamp[0.5,1.5] lb60", + "config": { + "vol_target": 0.2, + "vol_clamp": [ + 0.5, + 1.5 + ], + "vol_lookback": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.6858, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 21573.25, + "total_return_pct": 115.7, + "cagr_pct": 43.3, + "max_drawdown_pct": 17.7, + "calmar": 2.45, + "sharpe": 1.63, + "sharpe_se": 0.67, + "psr": 0.9924, + "n_returns": 535, + "return_skew": 0.5966, + "return_kurtosis": 5.7904, + "trades": 257, + "win_rate": 35.8, + "avg_trade_pnl": 45.03, + "best_trade_r": 9.84, + "worst_trade_r": -3.1, + "best_trade_pnl": 1629.41, + "worst_trade_pnl": -509.82, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 124, + "time": 57, + "trailing_stop": 76 + }, + "skipped_book_full": 591, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.2 + }, + { + "year": 2023, + "return_pct": 67.8 + }, + { + "year": 2024, + "return_pct": 18.9 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.2, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.8951, + "vol_scalar_entries": 1872, + "post_stop_events": 124, + "post_stop_reentries": 72, + "post_stop_states_open_at_end": 52 + }, + { + "window": "validation", + "dsr": 0.5732, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 18152.75, + "total_return_pct": 81.5, + "cagr_pct": 34.7, + "max_drawdown_pct": 23.7, + "calmar": 1.46, + "sharpe": 1.48, + "sharpe_se": 0.715, + "psr": 0.9805, + "n_returns": 502, + "return_skew": -0.0903, + "return_kurtosis": 4.4154, + "trades": 248, + "win_rate": 35.5, + "avg_trade_pnl": 32.87, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1883.4, + "worst_trade_pnl": -476.87, + "avg_hold_days": 14.2, + "exit_reasons": { + "stop": 128, + "time": 46, + "trailing_stop": 74 + }, + "skipped_book_full": 214, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.5 + }, + { + "year": 2025, + "return_pct": 30.9 + }, + { + "year": 2026, + "return_pct": 19.1 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.9179, + "vol_scalar_entries": 899, + "post_stop_events": 128, + "post_stop_reentries": 66, + "post_stop_states_open_at_end": 62 + }, + { + "window": "full", + "dsr": 0.9017, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 39241.25, + "total_return_pct": 292.4, + "cagr_pct": 40.5, + "max_drawdown_pct": 23.5, + "calmar": 1.72, + "sharpe": 1.59, + "sharpe_se": 0.495, + "psr": 0.9994, + "n_returns": 1008, + "return_skew": 0.3155, + "return_kurtosis": 5.3435, + "trades": 498, + "win_rate": 36.1, + "avg_trade_pnl": 58.72, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 4071.06, + "worst_trade_pnl": -1030.94, + "avg_hold_days": 14.6, + "exit_reasons": { + "stop": 246, + "time": 103, + "trailing_stop": 149 + }, + "skipped_book_full": 796, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.2 + }, + { + "year": 2023, + "return_pct": 67.8 + }, + { + "year": 2024, + "return_pct": 38.9 + }, + { + "year": 2025, + "return_pct": 30.8 + }, + { + "year": 2026, + "return_pct": 19.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.9026, + "vol_scalar_entries": 2765, + "post_stop_events": 246, + "post_stop_reentries": 155, + "post_stop_states_open_at_end": 91 + } + ] + }, + { + "id": "a3_vt25_c05_15_lb60", + "group": "a3", + "label": "Vol target 25% clamp[0.5,1.5] lb60", + "config": { + "vol_target": 0.25, + "vol_clamp": [ + 0.5, + 1.5 + ], + "vol_lookback": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.7115, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 22903.39, + "total_return_pct": 129.0, + "cagr_pct": 47.4, + "max_drawdown_pct": 17.8, + "calmar": 2.66, + "sharpe": 1.68, + "sharpe_se": 0.671, + "psr": 0.994, + "n_returns": 535, + "return_skew": 0.5537, + "return_kurtosis": 5.5838, + "trades": 239, + "win_rate": 38.5, + "avg_trade_pnl": 53.99, + "best_trade_r": 12.02, + "worst_trade_r": -3.1, + "best_trade_pnl": 1662.58, + "worst_trade_pnl": -542.69, + "avg_hold_days": 15.6, + "exit_reasons": { + "stop": 108, + "time": 53, + "trailing_stop": 78 + }, + "skipped_book_full": 522, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 9.0 + }, + { + "year": 2023, + "return_pct": 79.6 + }, + { + "year": 2024, + "return_pct": 17.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.25, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 1.0502, + "vol_scalar_entries": 1935, + "post_stop_events": 108, + "post_stop_reentries": 60, + "post_stop_states_open_at_end": 48 + }, + { + "window": "validation", + "dsr": 0.6552, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20145.1, + "total_return_pct": 101.5, + "cagr_pct": 41.9, + "max_drawdown_pct": 21.8, + "calmar": 1.93, + "sharpe": 1.63, + "sharpe_se": 0.706, + "psr": 0.9896, + "n_returns": 502, + "return_skew": 0.2159, + "return_kurtosis": 5.4845, + "trades": 235, + "win_rate": 34.9, + "avg_trade_pnl": 43.17, + "best_trade_r": 12.37, + "worst_trade_r": -2.72, + "best_trade_pnl": 2530.57, + "worst_trade_pnl": -319.31, + "avg_hold_days": 14.2, + "exit_reasons": { + "stop": 116, + "time": 42, + "trailing_stop": 77 + }, + "skipped_book_full": 206, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 17.6 + }, + { + "year": 2025, + "return_pct": 40.1 + }, + { + "year": 2026, + "return_pct": 22.3 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.25, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 1.0686, + "vol_scalar_entries": 925, + "post_stop_events": 116, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 55 + }, + { + "window": "full", + "dsr": 0.9482, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 49076.18, + "total_return_pct": 390.8, + "cagr_pct": 48.5, + "max_drawdown_pct": 22.2, + "calmar": 2.19, + "sharpe": 1.75, + "sharpe_se": 0.491, + "psr": 0.9998, + "n_returns": 1008, + "return_skew": 0.4786, + "return_kurtosis": 5.7551, + "trades": 468, + "win_rate": 37.2, + "avg_trade_pnl": 83.5, + "best_trade_r": 12.37, + "worst_trade_r": -3.1, + "best_trade_pnl": 6162.57, + "worst_trade_pnl": -778.05, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 220, + "time": 95, + "trailing_stop": 153 + }, + "skipped_book_full": 728, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 9.0 + }, + { + "year": 2023, + "return_pct": 79.6 + }, + { + "year": 2024, + "return_pct": 47.7 + }, + { + "year": 2025, + "return_pct": 38.9 + }, + { + "year": 2026, + "return_pct": 22.3 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.25, + "vol_lookback": 60, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 1.06, + "vol_scalar_entries": 2874, + "post_stop_events": 220, + "post_stop_reentries": 139, + "post_stop_states_open_at_end": 81 + } + ] + }, + { + "id": "a3_vt15_c025_20_lb60", + "group": "a3", + "label": "Vol target 15% clamp[0.25,2.0] lb60", + "config": { + "vol_target": 0.15, + "vol_clamp": [ + 0.25, + 2.0 + ], + "vol_lookback": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.6835, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20615.2, + "total_return_pct": 106.2, + "cagr_pct": 40.3, + "max_drawdown_pct": 17.8, + "calmar": 2.26, + "sharpe": 1.63, + "sharpe_se": 0.679, + "psr": 0.9919, + "n_returns": 535, + "return_skew": 0.3291, + "return_kurtosis": 4.5805, + "trades": 281, + "win_rate": 38.1, + "avg_trade_pnl": 37.78, + "best_trade_r": 9.84, + "worst_trade_r": -3.26, + "best_trade_pnl": 854.5, + "worst_trade_pnl": -268.17, + "avg_hold_days": 15.4, + "exit_reasons": { + "stop": 123, + "time": 62, + "trailing_stop": 96 + }, + "skipped_book_full": 1136, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 9.0 + }, + { + "year": 2023, + "return_pct": 55.3 + }, + { + "year": 2024, + "return_pct": 22.0 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.15, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 0.7755, + "vol_scalar_entries": 1257, + "post_stop_events": 123, + "post_stop_reentries": 76, + "post_stop_states_open_at_end": 47 + }, + { + "window": "validation", + "dsr": 0.44, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 15850.9, + "total_return_pct": 58.5, + "cagr_pct": 25.9, + "max_drawdown_pct": 23.6, + "calmar": 1.1, + "sharpe": 1.24, + "sharpe_se": 0.715, + "psr": 0.9585, + "n_returns": 502, + "return_skew": -0.1415, + "return_kurtosis": 4.4243, + "trades": 268, + "win_rate": 35.4, + "avg_trade_pnl": 21.83, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1375.72, + "worst_trade_pnl": -377.92, + "avg_hold_days": 14.3, + "exit_reasons": { + "stop": 138, + "time": 50, + "trailing_stop": 80 + }, + "skipped_book_full": 350, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 15.7 + }, + { + "year": 2025, + "return_pct": 23.6 + }, + { + "year": 2026, + "return_pct": 10.9 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.15, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 0.7983, + "vol_scalar_entries": 731, + "post_stop_events": 138, + "post_stop_reentries": 77, + "post_stop_states_open_at_end": 61 + }, + { + "window": "full", + "dsr": 0.86, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 32607.63, + "total_return_pct": 226.1, + "cagr_pct": 34.2, + "max_drawdown_pct": 23.1, + "calmar": 1.48, + "sharpe": 1.49, + "sharpe_se": 0.499, + "psr": 0.9985, + "n_returns": 1008, + "return_skew": 0.1399, + "return_kurtosis": 4.6022, + "trades": 542, + "win_rate": 37.1, + "avg_trade_pnl": 41.71, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 2830.02, + "worst_trade_pnl": -781.89, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 256, + "time": 112, + "trailing_stop": 174 + }, + "skipped_book_full": 1486, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 9.0 + }, + { + "year": 2023, + "return_pct": 55.3 + }, + { + "year": 2024, + "return_pct": 40.7 + }, + { + "year": 2025, + "return_pct": 23.6 + }, + { + "year": 2026, + "return_pct": 10.9 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.15, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 0.7744, + "vol_scalar_entries": 1973, + "post_stop_events": 256, + "post_stop_reentries": 169, + "post_stop_states_open_at_end": 87 + } + ] + }, + { + "id": "a3_vt20_c025_20_lb60", + "group": "a3", + "label": "Vol target 20% clamp[0.25,2.0] lb60", + "config": { + "vol_target": 0.2, + "vol_clamp": [ + 0.25, + 2.0 + ], + "vol_lookback": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.6858, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 21573.25, + "total_return_pct": 115.7, + "cagr_pct": 43.3, + "max_drawdown_pct": 17.7, + "calmar": 2.45, + "sharpe": 1.63, + "sharpe_se": 0.67, + "psr": 0.9924, + "n_returns": 535, + "return_skew": 0.5966, + "return_kurtosis": 5.7904, + "trades": 257, + "win_rate": 35.8, + "avg_trade_pnl": 45.03, + "best_trade_r": 9.84, + "worst_trade_r": -3.1, + "best_trade_pnl": 1629.41, + "worst_trade_pnl": -509.82, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 124, + "time": 57, + "trailing_stop": 76 + }, + "skipped_book_full": 591, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.2 + }, + { + "year": 2023, + "return_pct": 67.8 + }, + { + "year": 2024, + "return_pct": 18.9 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.2, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 0.8951, + "vol_scalar_entries": 1872, + "post_stop_events": 124, + "post_stop_reentries": 72, + "post_stop_states_open_at_end": 52 + }, + { + "window": "validation", + "dsr": 0.5732, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 18152.75, + "total_return_pct": 81.5, + "cagr_pct": 34.7, + "max_drawdown_pct": 23.7, + "calmar": 1.46, + "sharpe": 1.48, + "sharpe_se": 0.715, + "psr": 0.9805, + "n_returns": 502, + "return_skew": -0.0903, + "return_kurtosis": 4.4154, + "trades": 248, + "win_rate": 35.5, + "avg_trade_pnl": 32.87, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1883.4, + "worst_trade_pnl": -476.87, + "avg_hold_days": 14.2, + "exit_reasons": { + "stop": 128, + "time": 46, + "trailing_stop": 74 + }, + "skipped_book_full": 214, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.5 + }, + { + "year": 2025, + "return_pct": 30.9 + }, + { + "year": 2026, + "return_pct": 19.1 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 0.9179, + "vol_scalar_entries": 899, + "post_stop_events": 128, + "post_stop_reentries": 66, + "post_stop_states_open_at_end": 62 + }, + { + "window": "full", + "dsr": 0.9017, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 39241.25, + "total_return_pct": 292.4, + "cagr_pct": 40.5, + "max_drawdown_pct": 23.5, + "calmar": 1.72, + "sharpe": 1.59, + "sharpe_se": 0.495, + "psr": 0.9994, + "n_returns": 1008, + "return_skew": 0.3155, + "return_kurtosis": 5.3435, + "trades": 498, + "win_rate": 36.1, + "avg_trade_pnl": 58.72, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 4071.06, + "worst_trade_pnl": -1030.94, + "avg_hold_days": 14.6, + "exit_reasons": { + "stop": 246, + "time": 103, + "trailing_stop": 149 + }, + "skipped_book_full": 796, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.2 + }, + { + "year": 2023, + "return_pct": 67.8 + }, + { + "year": 2024, + "return_pct": 38.9 + }, + { + "year": 2025, + "return_pct": 30.8 + }, + { + "year": 2026, + "return_pct": 19.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 0.9026, + "vol_scalar_entries": 2765, + "post_stop_events": 246, + "post_stop_reentries": 155, + "post_stop_states_open_at_end": 91 + } + ] + }, + { + "id": "a3_vt25_c025_20_lb60", + "group": "a3", + "label": "Vol target 25% clamp[0.25,2.0] lb60", + "config": { + "vol_target": 0.25, + "vol_clamp": [ + 0.25, + 2.0 + ], + "vol_lookback": 60 + }, + "windows": [ + { + "window": "train", + "dsr": 0.7115, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 22922.59, + "total_return_pct": 129.2, + "cagr_pct": 47.5, + "max_drawdown_pct": 17.8, + "calmar": 2.66, + "sharpe": 1.68, + "sharpe_se": 0.671, + "psr": 0.994, + "n_returns": 535, + "return_skew": 0.5629, + "return_kurtosis": 5.6268, + "trades": 239, + "win_rate": 38.5, + "avg_trade_pnl": 54.07, + "best_trade_r": 12.02, + "worst_trade_r": -3.1, + "best_trade_pnl": 1664.73, + "worst_trade_pnl": -543.15, + "avg_hold_days": 15.6, + "exit_reasons": { + "stop": 108, + "time": 53, + "trailing_stop": 78 + }, + "skipped_book_full": 522, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 9.0 + }, + { + "year": 2023, + "return_pct": 79.8 + }, + { + "year": 2024, + "return_pct": 17.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.25, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 1.0511, + "vol_scalar_entries": 1935, + "post_stop_events": 108, + "post_stop_reentries": 60, + "post_stop_states_open_at_end": 48 + }, + { + "window": "validation", + "dsr": 0.6552, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20145.1, + "total_return_pct": 101.5, + "cagr_pct": 41.9, + "max_drawdown_pct": 21.8, + "calmar": 1.93, + "sharpe": 1.63, + "sharpe_se": 0.706, + "psr": 0.9896, + "n_returns": 502, + "return_skew": 0.2159, + "return_kurtosis": 5.4845, + "trades": 235, + "win_rate": 34.9, + "avg_trade_pnl": 43.17, + "best_trade_r": 12.37, + "worst_trade_r": -2.72, + "best_trade_pnl": 2530.57, + "worst_trade_pnl": -319.31, + "avg_hold_days": 14.2, + "exit_reasons": { + "stop": 116, + "time": 42, + "trailing_stop": 77 + }, + "skipped_book_full": 206, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 17.6 + }, + { + "year": 2025, + "return_pct": 40.1 + }, + { + "year": 2026, + "return_pct": 22.3 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.25, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 1.0686, + "vol_scalar_entries": 925, + "post_stop_events": 116, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 55 + }, + { + "window": "full", + "dsr": 0.9486, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 49117.21, + "total_return_pct": 391.2, + "cagr_pct": 48.5, + "max_drawdown_pct": 22.2, + "calmar": 2.19, + "sharpe": 1.75, + "sharpe_se": 0.49, + "psr": 0.9998, + "n_returns": 1008, + "return_skew": 0.484, + "return_kurtosis": 5.7805, + "trades": 468, + "win_rate": 37.2, + "avg_trade_pnl": 83.58, + "best_trade_r": 12.37, + "worst_trade_r": -3.1, + "best_trade_pnl": 6167.72, + "worst_trade_pnl": -778.7, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 220, + "time": 95, + "trailing_stop": 153 + }, + "skipped_book_full": 728, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 9.0 + }, + { + "year": 2023, + "return_pct": 79.8 + }, + { + "year": 2024, + "return_pct": 47.7 + }, + { + "year": 2025, + "return_pct": 38.9 + }, + { + "year": 2026, + "return_pct": 22.3 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.25, + "vol_lookback": 60, + "vol_clamp": [ + 0.25, + 2.0 + ], + "avg_vol_scalar": 1.0606, + "vol_scalar_entries": 2874, + "post_stop_events": 220, + "post_stop_reentries": 139, + "post_stop_states_open_at_end": 81 + } + ] + }, + { + "id": "a3_vt20_c05_15_lb20", + "group": "a3", + "label": "Vol target 20% clamp[0.5,1.5] lb20 (sensitivity)", + "config": { + "vol_target": 0.2, + "vol_clamp": [ + 0.5, + 1.5 + ], + "vol_lookback": 20 + }, + "windows": [ + { + "window": "train", + "dsr": 0.7521, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 23344.83, + "total_return_pct": 133.4, + "cagr_pct": 48.7, + "max_drawdown_pct": 17.1, + "calmar": 2.84, + "sharpe": 1.76, + "sharpe_se": 0.667, + "psr": 0.9959, + "n_returns": 535, + "return_skew": 0.6432, + "return_kurtosis": 5.9259, + "trades": 253, + "win_rate": 38.3, + "avg_trade_pnl": 52.75, + "best_trade_r": 12.02, + "worst_trade_r": -3.26, + "best_trade_pnl": 2060.76, + "worst_trade_pnl": -550.83, + "avg_hold_days": 15.8, + "exit_reasons": { + "stop": 113, + "time": 57, + "trailing_stop": 83 + }, + "skipped_book_full": 653, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.0 + }, + { + "year": 2023, + "return_pct": 75.4 + }, + { + "year": 2024, + "return_pct": 20.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.2, + "vol_lookback": 20, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.9764, + "vol_scalar_entries": 1760, + "post_stop_events": 113, + "post_stop_reentries": 62, + "post_stop_states_open_at_end": 51 + }, + { + "window": "validation", + "dsr": 0.6645, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19720.49, + "total_return_pct": 97.2, + "cagr_pct": 40.4, + "max_drawdown_pct": 24.1, + "calmar": 1.67, + "sharpe": 1.65, + "sharpe_se": 0.711, + "psr": 0.99, + "n_returns": 502, + "return_skew": 0.0329, + "return_kurtosis": 4.2076, + "trades": 243, + "win_rate": 36.6, + "avg_trade_pnl": 40.0, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1947.61, + "worst_trade_pnl": -358.29, + "avg_hold_days": 14.4, + "exit_reasons": { + "stop": 121, + "time": 46, + "trailing_stop": 76 + }, + "skipped_book_full": 206, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 20.7 + }, + { + "year": 2025, + "return_pct": 36.3 + }, + { + "year": 2026, + "return_pct": 20.0 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 20, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.9384, + "vol_scalar_entries": 922, + "post_stop_events": 121, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 60 + }, + { + "window": "full", + "dsr": 0.9478, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 46345.17, + "total_return_pct": 363.5, + "cagr_pct": 46.4, + "max_drawdown_pct": 22.2, + "calmar": 2.1, + "sharpe": 1.75, + "sharpe_se": 0.492, + "psr": 0.9998, + "n_returns": 1008, + "return_skew": 0.4316, + "return_kurtosis": 5.4453, + "trades": 487, + "win_rate": 37.8, + "avg_trade_pnl": 74.63, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 4576.94, + "worst_trade_pnl": -823.3, + "avg_hold_days": 15.1, + "exit_reasons": { + "stop": 228, + "time": 102, + "trailing_stop": 157 + }, + "skipped_book_full": 868, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.0 + }, + { + "year": 2023, + "return_pct": 75.4 + }, + { + "year": 2024, + "return_pct": 42.9 + }, + { + "year": 2025, + "return_pct": 39.0 + }, + { + "year": 2026, + "return_pct": 20.0 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 20, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.9656, + "vol_scalar_entries": 2676, + "post_stop_events": 228, + "post_stop_reentries": 141, + "post_stop_states_open_at_end": 87 + } + ] + }, + { + "id": "a3_vt20_c05_15_lb126", + "group": "a3", + "label": "Vol target 20% clamp[0.5,1.5] lb126 (sensitivity)", + "config": { + "vol_target": 0.2, + "vol_clamp": [ + 0.5, + 1.5 + ], + "vol_lookback": 126 + }, + "windows": [ + { + "window": "train", + "dsr": 0.6421, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20878.07, + "total_return_pct": 108.8, + "cagr_pct": 41.2, + "max_drawdown_pct": 17.9, + "calmar": 2.3, + "sharpe": 1.55, + "sharpe_se": 0.671, + "psr": 0.9894, + "n_returns": 535, + "return_skew": 0.5854, + "return_kurtosis": 5.365, + "trades": 260, + "win_rate": 35.8, + "avg_trade_pnl": 41.84, + "best_trade_r": 10.08, + "worst_trade_r": -3.1, + "best_trade_pnl": 1626.75, + "worst_trade_pnl": -493.16, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 122, + "time": 57, + "trailing_stop": 81 + }, + "skipped_book_full": 536, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.9 + }, + { + "year": 2023, + "return_pct": 57.6 + }, + { + "year": 2024, + "return_pct": 18.4 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "vol_target": 0.2, + "vol_lookback": 126, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.8802, + "vol_scalar_entries": 1922, + "post_stop_events": 122, + "post_stop_reentries": 70, + "post_stop_states_open_at_end": 52 + }, + { + "window": "validation", + "dsr": 0.5123, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 17065.5, + "total_return_pct": 70.7, + "cagr_pct": 30.6, + "max_drawdown_pct": 20.5, + "calmar": 1.49, + "sharpe": 1.37, + "sharpe_se": 0.714, + "psr": 0.972, + "n_returns": 502, + "return_skew": -0.0959, + "return_kurtosis": 4.5229, + "trades": 247, + "win_rate": 36.4, + "avg_trade_pnl": 28.61, + "best_trade_r": 12.37, + "worst_trade_r": -2.82, + "best_trade_pnl": 1689.23, + "worst_trade_pnl": -330.36, + "avg_hold_days": 14.4, + "exit_reasons": { + "stop": 125, + "time": 47, + "trailing_stop": 75 + }, + "skipped_book_full": 230, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.7 + }, + { + "year": 2025, + "return_pct": 28.1 + }, + { + "year": 2026, + "return_pct": 14.2 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 126, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.933, + "vol_scalar_entries": 877, + "post_stop_events": 125, + "post_stop_reentries": 68, + "post_stop_states_open_at_end": 57 + }, + { + "window": "full", + "dsr": 0.883, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 37188.08, + "total_return_pct": 271.9, + "cagr_pct": 38.6, + "max_drawdown_pct": 19.9, + "calmar": 1.94, + "sharpe": 1.54, + "sharpe_se": 0.495, + "psr": 0.9991, + "n_returns": 1008, + "return_skew": 0.2986, + "return_kurtosis": 5.2346, + "trades": 497, + "win_rate": 36.2, + "avg_trade_pnl": 54.7, + "best_trade_r": 12.37, + "worst_trade_r": -3.75, + "best_trade_pnl": 3595.79, + "worst_trade_pnl": -717.19, + "avg_hold_days": 14.7, + "exit_reasons": { + "stop": 239, + "time": 101, + "trailing_stop": 157 + }, + "skipped_book_full": 751, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.9 + }, + { + "year": 2023, + "return_pct": 57.6 + }, + { + "year": 2024, + "return_pct": 39.3 + }, + { + "year": 2025, + "return_pct": 32.3 + }, + { + "year": 2026, + "return_pct": 14.5 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "vol_target": 0.2, + "vol_lookback": 126, + "vol_clamp": [ + 0.5, + 1.5 + ], + "avg_vol_scalar": 0.8948, + "vol_scalar_entries": 2802, + "post_stop_events": 239, + "post_stop_reentries": 154, + "post_stop_states_open_at_end": 85 + } + ] + }, + { + "id": "a4_next_open", + "group": "a4", + "label": "Next-open fill (t+1 open, stop from fill\u22121.5 ATR)", + "config": { + "fill_mode": "next_open" + }, + "windows": [ + { + "window": "train", + "dsr": 0.2981, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "next_open", + "final_equity": 15364.14, + "total_return_pct": 53.6, + "cagr_pct": 22.2, + "max_drawdown_pct": 18.1, + "calmar": 1.23, + "sharpe": 0.94, + "sharpe_se": 0.688, + "psr": 0.9148, + "n_returns": 536, + "return_skew": -0.039, + "return_kurtosis": 4.2924, + "trades": 260, + "win_rate": 31.2, + "avg_trade_pnl": 20.63, + "best_trade_r": 11.53, + "worst_trade_r": -2.99, + "best_trade_pnl": 1265.39, + "worst_trade_pnl": -303.24, + "avg_hold_days": 13.7, + "exit_reasons": { + "stop": 133, + "time": 48, + "trailing_stop": 79 + }, + "skipped_book_full": 140, + "spy_return_pct": 39.0, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 4.5 + }, + { + "year": 2023, + "return_pct": 44.6 + }, + { + "year": 2024, + "return_pct": 1.7 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-13", + "skipped_missing_fill": 0, + "overnight_slippage": { + "n": 260, + "mean_pct": -0.063, + "median_pct": -0.1627, + "p05_pct": -2.5148, + "p95_pct": 1.8498 + }, + "post_stop_events": 133, + "post_stop_reentries": 79, + "post_stop_states_open_at_end": 50 + }, + { + "window": "validation", + "dsr": 0.5509, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "next_open", + "final_equity": 18586.06, + "total_return_pct": 85.9, + "cagr_pct": 36.3, + "max_drawdown_pct": 28.2, + "calmar": 1.29, + "sharpe": 1.44, + "sharpe_se": 0.719, + "psr": 0.9774, + "n_returns": 502, + "return_skew": -0.2169, + "return_kurtosis": 4.6486, + "trades": 243, + "win_rate": 35.0, + "avg_trade_pnl": 35.33, + "best_trade_r": 12.2, + "worst_trade_r": -4.0, + "best_trade_pnl": 1731.6, + "worst_trade_pnl": -196.48, + "avg_hold_days": 13.8, + "exit_reasons": { + "stop": 114, + "time": 48, + "trailing_stop": 81 + }, + "skipped_book_full": 197, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 14.2 + }, + { + "year": 2025, + "return_pct": 42.6 + }, + { + "year": 2026, + "return_pct": 14.1 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "skipped_missing_fill": 0, + "overnight_slippage": { + "n": 243, + "mean_pct": -0.519, + "median_pct": -0.1786, + "p05_pct": -4.5194, + "p95_pct": 2.0911 + }, + "post_stop_events": 114, + "post_stop_reentries": 51, + "post_stop_states_open_at_end": 52 + }, + { + "window": "full", + "dsr": 0.6895, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "next_open", + "final_equity": 28701.57, + "total_return_pct": 187.0, + "cagr_pct": 30.0, + "max_drawdown_pct": 28.2, + "calmar": 1.06, + "sharpe": 1.2, + "sharpe_se": 0.504, + "psr": 0.9914, + "n_returns": 1008, + "return_skew": -0.1589, + "return_kurtosis": 4.4517, + "trades": 502, + "win_rate": 32.5, + "avg_trade_pnl": 37.25, + "best_trade_r": 12.2, + "worst_trade_r": -4.0, + "best_trade_pnl": 2674.03, + "worst_trade_pnl": -303.42, + "avg_hold_days": 13.7, + "exit_reasons": { + "stop": 251, + "time": 97, + "trailing_stop": 154 + }, + "skipped_book_full": 356, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 4.5 + }, + { + "year": 2023, + "return_pct": 44.6 + }, + { + "year": 2024, + "return_pct": 15.7 + }, + { + "year": 2025, + "return_pct": 44.0 + }, + { + "year": 2026, + "return_pct": 14.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "skipped_missing_fill": 0, + "overnight_slippage": { + "n": 502, + "mean_pct": -0.2566, + "median_pct": -0.1661, + "p05_pct": -2.7763, + "p95_pct": 1.8997 + }, + "post_stop_events": 251, + "post_stop_reentries": 157, + "post_stop_states_open_at_end": 81 + } + ] + }, + { + "id": "a5_corr06_skip", + "group": "a5", + "label": "Corr max 0.6 skip", + "config": { + "corr_max": 0.6, + "corr_action": "skip" + }, + "windows": [ + { + "window": "train", + "dsr": 0.6735, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20498.09, + "total_return_pct": 105.0, + "cagr_pct": 39.9, + "max_drawdown_pct": 20.7, + "calmar": 1.93, + "sharpe": 1.61, + "sharpe_se": 0.677, + "psr": 0.9913, + "n_returns": 535, + "return_skew": 0.3787, + "return_kurtosis": 4.8393, + "trades": 235, + "win_rate": 37.4, + "avg_trade_pnl": 44.67, + "best_trade_r": 10.08, + "worst_trade_r": -3.1, + "best_trade_pnl": 1146.41, + "worst_trade_pnl": -387.09, + "avg_hold_days": 15.2, + "exit_reasons": { + "stop": 107, + "time": 49, + "trailing_stop": 79 + }, + "skipped_book_full": 167, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 16.9 + }, + { + "year": 2023, + "return_pct": 44.9 + }, + { + "year": 2024, + "return_pct": 21.0 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "corr_max": 0.6, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 1599, + "post_stop_events": 107, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 46 + }, + { + "window": "validation", + "dsr": 0.689, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19321.37, + "total_return_pct": 93.2, + "cagr_pct": 39.0, + "max_drawdown_pct": 17.0, + "calmar": 2.3, + "sharpe": 1.7, + "sharpe_se": 0.714, + "psr": 0.9913, + "n_returns": 502, + "return_skew": -0.031, + "return_kurtosis": 4.7331, + "trades": 222, + "win_rate": 32.9, + "avg_trade_pnl": 41.99, + "best_trade_r": 12.37, + "worst_trade_r": -2.86, + "best_trade_pnl": 1911.95, + "worst_trade_pnl": -358.85, + "avg_hold_days": 14.1, + "exit_reasons": { + "stop": 114, + "time": 40, + "trailing_stop": 68 + }, + "skipped_book_full": 9, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 15.0 + }, + { + "year": 2025, + "return_pct": 48.5 + }, + { + "year": 2026, + "return_pct": 13.2 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "corr_max": 0.6, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 1043, + "post_stop_events": 114, + "post_stop_reentries": 63, + "post_stop_states_open_at_end": 51 + }, + { + "window": "full", + "dsr": 0.8994, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 36781.87, + "total_return_pct": 267.8, + "cagr_pct": 38.2, + "max_drawdown_pct": 20.7, + "calmar": 1.85, + "sharpe": 1.59, + "sharpe_se": 0.5, + "psr": 0.9993, + "n_returns": 1008, + "return_skew": 0.1221, + "return_kurtosis": 4.6895, + "trades": 450, + "win_rate": 35.1, + "avg_trade_pnl": 59.52, + "best_trade_r": 12.37, + "worst_trade_r": -3.1, + "best_trade_pnl": 3609.23, + "worst_trade_pnl": -468.77, + "avg_hold_days": 14.7, + "exit_reasons": { + "stop": 212, + "time": 84, + "trailing_stop": 154 + }, + "skipped_book_full": 176, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 16.9 + }, + { + "year": 2023, + "return_pct": 44.9 + }, + { + "year": 2024, + "return_pct": 43.4 + }, + { + "year": 2025, + "return_pct": 34.3 + }, + { + "year": 2026, + "return_pct": 12.8 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "corr_max": 0.6, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 2648, + "post_stop_events": 212, + "post_stop_reentries": 138, + "post_stop_states_open_at_end": 74 + } + ] + }, + { + "id": "a5_corr07_skip", + "group": "a5", + "label": "Corr max 0.7 skip", + "config": { + "corr_max": 0.7, + "corr_action": "skip" + }, + "windows": [ + { + "window": "train", + "dsr": 0.5555, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 18782.41, + "total_return_pct": 87.8, + "cagr_pct": 34.3, + "max_drawdown_pct": 19.9, + "calmar": 1.73, + "sharpe": 1.4, + "sharpe_se": 0.676, + "psr": 0.9805, + "n_returns": 535, + "return_skew": 0.4358, + "return_kurtosis": 5.1891, + "trades": 244, + "win_rate": 36.1, + "avg_trade_pnl": 35.99, + "best_trade_r": 10.08, + "worst_trade_r": -3.1, + "best_trade_pnl": 963.2, + "worst_trade_pnl": -445.07, + "avg_hold_days": 15.0, + "exit_reasons": { + "stop": 108, + "time": 49, + "trailing_stop": 87 + }, + "skipped_book_full": 231, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.9 + }, + { + "year": 2023, + "return_pct": 49.4 + }, + { + "year": 2024, + "return_pct": 15.6 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "corr_max": 0.7, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 1193, + "post_stop_events": 108, + "post_stop_reentries": 61, + "post_stop_states_open_at_end": 47 + }, + { + "window": "validation", + "dsr": 0.6546, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19451.8, + "total_return_pct": 94.5, + "cagr_pct": 39.4, + "max_drawdown_pct": 25.5, + "calmar": 1.55, + "sharpe": 1.63, + "sharpe_se": 0.709, + "psr": 0.9891, + "n_returns": 502, + "return_skew": 0.0966, + "return_kurtosis": 4.7322, + "trades": 234, + "win_rate": 34.2, + "avg_trade_pnl": 40.39, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1836.08, + "worst_trade_pnl": -569.85, + "avg_hold_days": 14.1, + "exit_reasons": { + "stop": 117, + "time": 42, + "trailing_stop": 75 + }, + "skipped_book_full": 121, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 15.5 + }, + { + "year": 2025, + "return_pct": 38.6 + }, + { + "year": 2026, + "return_pct": 21.6 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "corr_max": 0.7, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 891, + "post_stop_events": 117, + "post_stop_reentries": 60, + "post_stop_states_open_at_end": 57 + }, + { + "window": "full", + "dsr": 0.8869, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 37002.38, + "total_return_pct": 270.0, + "cagr_pct": 38.4, + "max_drawdown_pct": 26.0, + "calmar": 1.48, + "sharpe": 1.55, + "sharpe_se": 0.495, + "psr": 0.9991, + "n_returns": 1008, + "return_skew": 0.2957, + "return_kurtosis": 5.0413, + "trades": 472, + "win_rate": 36.0, + "avg_trade_pnl": 57.21, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 3492.7, + "worst_trade_pnl": -1084.05, + "avg_hold_days": 14.6, + "exit_reasons": { + "stop": 220, + "time": 93, + "trailing_stop": 159 + }, + "skipped_book_full": 352, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 8.9 + }, + { + "year": 2023, + "return_pct": 49.4 + }, + { + "year": 2024, + "return_pct": 35.1 + }, + { + "year": 2025, + "return_pct": 38.6 + }, + { + "year": 2026, + "return_pct": 21.6 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "corr_max": 0.7, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 2081, + "post_stop_events": 220, + "post_stop_reentries": 138, + "post_stop_states_open_at_end": 82 + } + ] + }, + { + "id": "a5_corr08_skip", + "group": "a5", + "label": "Corr max 0.8 skip", + "config": { + "corr_max": 0.8, + "corr_action": "skip" + }, + "windows": [ + { + "window": "train", + "dsr": 0.6307, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20630.49, + "total_return_pct": 106.3, + "cagr_pct": 40.4, + "max_drawdown_pct": 19.1, + "calmar": 2.11, + "sharpe": 1.53, + "sharpe_se": 0.672, + "psr": 0.9888, + "n_returns": 535, + "return_skew": 0.549, + "return_kurtosis": 5.0219, + "trades": 246, + "win_rate": 34.6, + "avg_trade_pnl": 43.21, + "best_trade_r": 12.02, + "worst_trade_r": -3.1, + "best_trade_pnl": 1747.97, + "worst_trade_pnl": -488.82, + "avg_hold_days": 14.6, + "exit_reasons": { + "stop": 115, + "time": 49, + "trailing_stop": 82 + }, + "skipped_book_full": 110, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 7.0 + }, + { + "year": 2023, + "return_pct": 62.1 + }, + { + "year": 2024, + "return_pct": 19.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "corr_max": 0.8, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 972, + "post_stop_events": 115, + "post_stop_reentries": 64, + "post_stop_states_open_at_end": 51 + }, + { + "window": "validation", + "dsr": 0.5124, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 17526.76, + "total_return_pct": 75.3, + "cagr_pct": 32.4, + "max_drawdown_pct": 25.8, + "calmar": 1.26, + "sharpe": 1.37, + "sharpe_se": 0.709, + "psr": 0.9734, + "n_returns": 502, + "return_skew": 0.0771, + "return_kurtosis": 4.5796, + "trades": 233, + "win_rate": 33.9, + "avg_trade_pnl": 32.3, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1754.79, + "worst_trade_pnl": -584.11, + "avg_hold_days": 14.0, + "exit_reasons": { + "stop": 119, + "time": 40, + "trailing_stop": 74 + }, + "skipped_book_full": 175, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 18.4 + }, + { + "year": 2025, + "return_pct": 40.0 + }, + { + "year": 2026, + "return_pct": 5.8 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "corr_max": 0.8, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 786, + "post_stop_events": 119, + "post_stop_reentries": 64, + "post_stop_states_open_at_end": 55 + }, + { + "window": "full", + "dsr": 0.8629, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 36493.29, + "total_return_pct": 264.9, + "cagr_pct": 38.0, + "max_drawdown_pct": 26.6, + "calmar": 1.43, + "sharpe": 1.49, + "sharpe_se": 0.493, + "psr": 0.9988, + "n_returns": 1008, + "return_skew": 0.3855, + "return_kurtosis": 5.0281, + "trades": 475, + "win_rate": 34.7, + "avg_trade_pnl": 55.78, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 3653.74, + "worst_trade_pnl": -1216.23, + "avg_hold_days": 14.3, + "exit_reasons": { + "stop": 231, + "time": 90, + "trailing_stop": 154 + }, + "skipped_book_full": 285, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 7.0 + }, + { + "year": 2023, + "return_pct": 62.1 + }, + { + "year": 2024, + "return_pct": 42.2 + }, + { + "year": 2025, + "return_pct": 40.0 + }, + { + "year": 2026, + "return_pct": 5.8 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "corr_max": 0.8, + "corr_action": "skip", + "corr_lookback": 120, + "skipped_corr": 1753, + "post_stop_events": 231, + "post_stop_reentries": 146, + "post_stop_states_open_at_end": 85 + } + ] + }, + { + "id": "a5_corr06_half", + "group": "a5", + "label": "Corr max 0.6 half-size", + "config": { + "corr_max": 0.6, + "corr_action": "half_size" + }, + "windows": [ + { + "window": "train", + "dsr": 0.584, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19336.9, + "total_return_pct": 93.4, + "cagr_pct": 36.2, + "max_drawdown_pct": 16.5, + "calmar": 2.19, + "sharpe": 1.45, + "sharpe_se": 0.68, + "psr": 0.9836, + "n_returns": 535, + "return_skew": 0.288, + "return_kurtosis": 4.1851, + "trades": 273, + "win_rate": 35.5, + "avg_trade_pnl": 34.2, + "best_trade_r": 10.08, + "worst_trade_r": -3.1, + "best_trade_pnl": 1659.4, + "worst_trade_pnl": -434.74, + "avg_hold_days": 14.9, + "exit_reasons": { + "stop": 127, + "time": 60, + "trailing_stop": 86 + }, + "skipped_book_full": 852, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 13.3 + }, + { + "year": 2023, + "return_pct": 44.4 + }, + { + "year": 2024, + "return_pct": 18.3 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "corr_max": 0.6, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 127, + "post_stop_reentries": 77, + "post_stop_states_open_at_end": 50 + }, + { + "window": "validation", + "dsr": 0.4123, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 15635.8, + "total_return_pct": 56.4, + "cagr_pct": 25.0, + "max_drawdown_pct": 25.7, + "calmar": 0.97, + "sharpe": 1.19, + "sharpe_se": 0.713, + "psr": 0.9522, + "n_returns": 502, + "return_skew": -0.0745, + "return_kurtosis": 3.9876, + "trades": 255, + "win_rate": 36.1, + "avg_trade_pnl": 22.1, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 1618.15, + "worst_trade_pnl": -582.94, + "avg_hold_days": 14.2, + "exit_reasons": { + "stop": 129, + "time": 50, + "trailing_stop": 76 + }, + "skipped_book_full": 319, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 17.9 + }, + { + "year": 2025, + "return_pct": 22.0 + }, + { + "year": 2026, + "return_pct": 8.7 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "corr_max": 0.6, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 129, + "post_stop_reentries": 69, + "post_stop_states_open_at_end": 60 + }, + { + "window": "full", + "dsr": 0.8061, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 31027.6, + "total_return_pct": 210.3, + "cagr_pct": 32.5, + "max_drawdown_pct": 25.4, + "calmar": 1.28, + "sharpe": 1.38, + "sharpe_se": 0.497, + "psr": 0.9973, + "n_returns": 1008, + "return_skew": 0.2057, + "return_kurtosis": 4.4463, + "trades": 521, + "win_rate": 36.1, + "avg_trade_pnl": 40.36, + "best_trade_r": 12.37, + "worst_trade_r": -5.98, + "best_trade_pnl": 3211.04, + "worst_trade_pnl": -1156.81, + "avg_hold_days": 14.5, + "exit_reasons": { + "stop": 252, + "time": 109, + "trailing_stop": 160 + }, + "skipped_book_full": 1156, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 13.3 + }, + { + "year": 2023, + "return_pct": 44.4 + }, + { + "year": 2024, + "return_pct": 43.1 + }, + { + "year": 2025, + "return_pct": 22.0 + }, + { + "year": 2026, + "return_pct": 8.7 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "corr_max": 0.6, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 252, + "post_stop_reentries": 165, + "post_stop_states_open_at_end": 87 + } + ] + }, + { + "id": "a5_corr07_half", + "group": "a5", + "label": "Corr max 0.7 half-size", + "config": { + "corr_max": 0.7, + "corr_action": "half_size" + }, + "windows": [ + { + "window": "train", + "dsr": 0.6795, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 21294.81, + "total_return_pct": 112.9, + "cagr_pct": 42.5, + "max_drawdown_pct": 16.2, + "calmar": 2.62, + "sharpe": 1.62, + "sharpe_se": 0.674, + "psr": 0.9919, + "n_returns": 535, + "return_skew": 0.4864, + "return_kurtosis": 5.2162, + "trades": 253, + "win_rate": 36.4, + "avg_trade_pnl": 44.64, + "best_trade_r": 9.84, + "worst_trade_r": -3.1, + "best_trade_pnl": 1805.21, + "worst_trade_pnl": -504.62, + "avg_hold_days": 15.3, + "exit_reasons": { + "stop": 116, + "time": 57, + "trailing_stop": 80 + }, + "skipped_book_full": 640, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 10.1 + }, + { + "year": 2023, + "return_pct": 57.8 + }, + { + "year": 2024, + "return_pct": 22.6 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "corr_max": 0.7, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 116, + "post_stop_reentries": 68, + "post_stop_states_open_at_end": 48 + }, + { + "window": "validation", + "dsr": 0.6383, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 19079.7, + "total_return_pct": 90.8, + "cagr_pct": 38.1, + "max_drawdown_pct": 21.1, + "calmar": 1.8, + "sharpe": 1.6, + "sharpe_se": 0.712, + "psr": 0.9877, + "n_returns": 502, + "return_skew": 0.0092, + "return_kurtosis": 4.5927, + "trades": 246, + "win_rate": 36.6, + "avg_trade_pnl": 36.91, + "best_trade_r": 12.37, + "worst_trade_r": -2.72, + "best_trade_pnl": 1841.96, + "worst_trade_pnl": -244.78, + "avg_hold_days": 14.5, + "exit_reasons": { + "stop": 121, + "time": 47, + "trailing_stop": 78 + }, + "skipped_book_full": 268, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.7 + }, + { + "year": 2025, + "return_pct": 36.0 + }, + { + "year": 2026, + "return_pct": 20.3 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "corr_max": 0.7, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 121, + "post_stop_reentries": 64, + "post_stop_states_open_at_end": 57 + }, + { + "window": "full", + "dsr": 0.9244, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 41509.52, + "total_return_pct": 315.1, + "cagr_pct": 42.5, + "max_drawdown_pct": 21.8, + "calmar": 1.95, + "sharpe": 1.66, + "sharpe_se": 0.494, + "psr": 0.9996, + "n_returns": 1008, + "return_skew": 0.3293, + "return_kurtosis": 5.1731, + "trades": 492, + "win_rate": 36.8, + "avg_trade_pnl": 64.04, + "best_trade_r": 12.37, + "worst_trade_r": -3.1, + "best_trade_pnl": 4007.34, + "worst_trade_pnl": -532.55, + "avg_hold_days": 14.8, + "exit_reasons": { + "stop": 233, + "time": 103, + "trailing_stop": 156 + }, + "skipped_book_full": 893, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 10.1 + }, + { + "year": 2023, + "return_pct": 57.8 + }, + { + "year": 2024, + "return_pct": 46.1 + }, + { + "year": 2025, + "return_pct": 36.0 + }, + { + "year": 2026, + "return_pct": 20.3 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "corr_max": 0.7, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 233, + "post_stop_reentries": 149, + "post_stop_states_open_at_end": 84 + } + ] + }, + { + "id": "a5_corr08_half", + "group": "a5", + "label": "Corr max 0.8 half-size", + "config": { + "corr_max": 0.8, + "corr_action": "half_size" + }, + "windows": [ + { + "window": "train", + "dsr": 0.647, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 20772.57, + "total_return_pct": 107.7, + "cagr_pct": 40.8, + "max_drawdown_pct": 16.1, + "calmar": 2.54, + "sharpe": 1.56, + "sharpe_se": 0.674, + "psr": 0.9898, + "n_returns": 535, + "return_skew": 0.4833, + "return_kurtosis": 5.2408, + "trades": 256, + "win_rate": 35.5, + "avg_trade_pnl": 42.08, + "best_trade_r": 9.84, + "worst_trade_r": -3.1, + "best_trade_pnl": 1760.01, + "worst_trade_pnl": -492.18, + "avg_hold_days": 15.2, + "exit_reasons": { + "stop": 118, + "time": 56, + "trailing_stop": 82 + }, + "skipped_book_full": 496, + "spy_return_pct": 36.7, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.2 + }, + { + "year": 2023, + "return_pct": 57.1 + }, + { + "year": 2024, + "return_pct": 19.1 + } + ], + "start_date": "2022-06-24", + "end_date": "2024-08-12", + "corr_max": 0.8, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 118, + "post_stop_reentries": 68, + "post_stop_states_open_at_end": 50 + }, + { + "window": "validation", + "dsr": 0.5404, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 17761.84, + "total_return_pct": 77.6, + "cagr_pct": 33.2, + "max_drawdown_pct": 21.1, + "calmar": 1.57, + "sharpe": 1.42, + "sharpe_se": 0.709, + "psr": 0.9775, + "n_returns": 502, + "return_skew": 0.0929, + "return_kurtosis": 4.6772, + "trades": 243, + "win_rate": 34.2, + "avg_trade_pnl": 31.94, + "best_trade_r": 12.37, + "worst_trade_r": -2.72, + "best_trade_pnl": 1781.5, + "worst_trade_pnl": -323.26, + "avg_hold_days": 13.9, + "exit_reasons": { + "stop": 124, + "time": 42, + "trailing_stop": 77 + }, + "skipped_book_full": 207, + "spy_return_pct": 36.6, + "yearly_returns": [ + { + "year": 2024, + "return_pct": 16.7 + }, + { + "year": 2025, + "return_pct": 40.1 + }, + { + "year": 2026, + "return_pct": 8.7 + } + ], + "start_date": "2024-07-01", + "end_date": "2026-07-02", + "corr_max": 0.8, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 124, + "post_stop_reentries": 69, + "post_stop_states_open_at_end": 55 + }, + { + "window": "full", + "dsr": 0.8874, + "starting_capital": 10000.0, + "cost_per_side_pct": 0.1, + "fill_mode": "close", + "final_equity": 37868.93, + "total_return_pct": 278.7, + "cagr_pct": 39.2, + "max_drawdown_pct": 21.8, + "calmar": 1.8, + "sharpe": 1.55, + "sharpe_se": 0.494, + "psr": 0.9992, + "n_returns": 1008, + "return_skew": 0.3727, + "return_kurtosis": 5.2567, + "trades": 492, + "win_rate": 35.2, + "avg_trade_pnl": 56.64, + "best_trade_r": 12.37, + "worst_trade_r": -3.1, + "best_trade_pnl": 3798.23, + "worst_trade_pnl": -689.2, + "avg_hold_days": 14.5, + "exit_reasons": { + "stop": 238, + "time": 97, + "trailing_stop": 157 + }, + "skipped_book_full": 688, + "spy_return_pct": 90.9, + "yearly_returns": [ + { + "year": 2022, + "return_pct": 11.2 + }, + { + "year": 2023, + "return_pct": 57.1 + }, + { + "year": 2024, + "return_pct": 42.5 + }, + { + "year": 2025, + "return_pct": 40.1 + }, + { + "year": 2026, + "return_pct": 8.7 + } + ], + "start_date": "2022-06-24", + "end_date": "2026-07-02", + "corr_max": 0.8, + "corr_action": "half_size", + "corr_lookback": 120, + "skipped_corr": 0, + "post_stop_events": 238, + "post_stop_reentries": 154, + "post_stop_states_open_at_end": 84 + } + ] + } + ], + "promotion": { + "a2_hold_30": { + "promote": true, + "reason": "validation Sharpe 1.68 \u2265 control 1.68; DD 20.9 within +2pp of 20.9; train Sharpe 1.75 \u2265 1.75 (delta \u2264 1 SE \u2014 distinguishable noise bar not cleared)", + "checks": { + "validation_sharpe_ge_control": true, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": true, + "delta_exceeds_1se": false, + "validation_sharpe_delta": 0.0, + "se_used": 0.716 + } + }, + "a2_hold_45": { + "promote": false, + "reason": "failed: train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": true, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": 0.39, + "se_used": 0.698 + } + }, + "a2_hold_60": { + "promote": false, + "reason": "failed: train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": true, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": 0.44, + "se_used": 0.695 + } + }, + "a2_hold_90": { + "promote": false, + "reason": "failed: validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": true, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": 0.36, + "se_used": 0.711 + } + }, + "a3_vt15_c05_15_lb60": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.44, + "se_used": 0.715 + } + }, + "a3_vt20_c05_15_lb60": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.2, + "se_used": 0.715 + } + }, + "a3_vt25_c05_15_lb60": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.05, + "se_used": 0.706 + } + }, + "a3_vt15_c025_20_lb60": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.44, + "se_used": 0.715 + } + }, + "a3_vt20_c025_20_lb60": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.2, + "se_used": 0.715 + } + }, + "a3_vt25_c025_20_lb60": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.05, + "se_used": 0.706 + } + }, + "a3_vt20_c05_15_lb20": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": true, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.03, + "se_used": 0.711 + } + }, + "a3_vt20_c05_15_lb126": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.31, + "se_used": 0.714 + } + }, + "a4_next_open": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.24, + "se_used": 0.719 + } + }, + "a5_corr06_skip": { + "promote": false, + "reason": "failed: train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": true, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": 0.02, + "se_used": 0.714 + } + }, + "a5_corr07_skip": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.05, + "se_used": 0.709 + } + }, + "a5_corr08_skip": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.31, + "se_used": 0.709 + } + }, + "a5_corr06_half": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": false, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.49, + "se_used": 0.713 + } + }, + "a5_corr07_half": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.08, + "se_used": 0.712 + } + }, + "a5_corr08_half": { + "promote": false, + "reason": "failed: validation_sharpe_ge_control, train_sharpe_not_worse", + "checks": { + "validation_sharpe_ge_control": false, + "validation_dd_not_worse_by_2pp": true, + "train_sharpe_not_worse": false, + "delta_exceeds_1se": false, + "validation_sharpe_delta": -0.26, + "se_used": 0.709 + } + } + } +} \ No newline at end of file diff --git a/reports/research-matrix-phase-a.md b/reports/research-matrix-phase-a.md new file mode 100644 index 0000000..dce80e8 --- /dev/null +++ b/reports/research-matrix-phase-a.md @@ -0,0 +1,94 @@ +# Research matrix — 2026-07-18T15:17:10.310517 + +Validation split: **2024-07-01**. Pre-registered N for DSR: **20**. + +## Promotion rule + +Promote only if validation Sharpe ≥ control, validation DD not worse by >2pp, and train Sharpe not worse. Always report whether validation Sharpe delta exceeds 1 SE (expect most will not). + +## Arms + +| arm | window | Sharpe | SE | PSR | DSR | CAGR | MaxDD | Calmar | trades | avg scalar | +|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:| +| a0_control | train | 1.75 | 0.675 | 0.995 | 0.745 | 49.8 | 17.9 | 2.78 | 240 | — | +| a0_control | validation | 1.68 | 0.716 | 0.991 | 0.679 | 41.6 | 20.9 | 1.99 | 239 | — | +| a0_control | full | 1.77 | 0.496 | 1 | 0.951 | 48.3 | 21.6 | 2.23 | 472 | — | +| a2_hold_30 | train | 1.75 | 0.675 | 0.995 | 0.745 | 49.8 | 17.9 | 2.78 | 240 | — | +| a2_hold_30 | validation | 1.68 | 0.716 | 0.991 | 0.679 | 41.6 | 20.9 | 1.99 | 239 | — | +| a2_hold_30 | full | 1.77 | 0.496 | 1 | 0.951 | 48.3 | 21.6 | 2.23 | 472 | — | +| a2_hold_45 | train | 1.43 | 0.677 | 0.983 | 0.583 | 36.4 | 21.2 | 1.72 | 218 | — | +| a2_hold_45 | validation | 2.07 | 0.698 | 0.999 | 0.85 | 59.1 | 19.3 | 3.07 | 202 | — | +| a2_hold_45 | full | 1.78 | 0.497 | 1 | 0.952 | 49.2 | 21.2 | 2.32 | 415 | — | +| a2_hold_60 | train | 1.11 | 0.668 | 0.952 | 0.405 | 26.3 | 21 | 1.25 | 186 | — | +| a2_hold_60 | validation | 2.12 | 0.695 | 0.999 | 0.867 | 64.9 | 19.3 | 3.37 | 201 | — | +| a2_hold_60 | full | 1.62 | 0.499 | 0.999 | 0.91 | 44.9 | 21 | 2.14 | 385 | — | +| a2_hold_90 | train | 1.3 | 0.652 | 0.977 | 0.538 | 30.7 | 21 | 1.47 | 179 | — | +| a2_hold_90 | validation | 2.04 | 0.711 | 0.998 | 0.835 | 61.8 | 23.1 | 2.67 | 191 | — | +| a2_hold_90 | full | 1.67 | 0.503 | 1 | 0.924 | 46.8 | 23.5 | 1.99 | 367 | — | +| a3_vt15_c05_15_lb60 | train | 1.54 | 0.674 | 0.989 | 0.636 | 37.7 | 17.8 | 2.12 | 283 | 0.769 | +| a3_vt15_c05_15_lb60 | validation | 1.24 | 0.715 | 0.959 | 0.44 | 25.9 | 23.6 | 1.1 | 268 | 0.798 | +| a3_vt15_c05_15_lb60 | full | 1.43 | 0.497 | 0.998 | 0.833 | 32.8 | 23.1 | 1.42 | 544 | 0.77 | +| a3_vt20_c05_15_lb60 | train | 1.63 | 0.67 | 0.992 | 0.686 | 43.3 | 17.7 | 2.45 | 257 | 0.895 | +| a3_vt20_c05_15_lb60 | validation | 1.48 | 0.715 | 0.981 | 0.573 | 34.7 | 23.7 | 1.46 | 248 | 0.918 | +| a3_vt20_c05_15_lb60 | full | 1.59 | 0.495 | 0.999 | 0.902 | 40.5 | 23.5 | 1.72 | 498 | 0.903 | +| a3_vt25_c05_15_lb60 | train | 1.68 | 0.671 | 0.994 | 0.712 | 47.4 | 17.8 | 2.66 | 239 | 1.05 | +| a3_vt25_c05_15_lb60 | validation | 1.63 | 0.706 | 0.99 | 0.655 | 41.9 | 21.8 | 1.93 | 235 | 1.07 | +| a3_vt25_c05_15_lb60 | full | 1.75 | 0.491 | 1 | 0.948 | 48.5 | 22.2 | 2.19 | 468 | 1.06 | +| a3_vt15_c025_20_lb60 | train | 1.63 | 0.679 | 0.992 | 0.683 | 40.3 | 17.8 | 2.26 | 281 | 0.775 | +| a3_vt15_c025_20_lb60 | validation | 1.24 | 0.715 | 0.959 | 0.44 | 25.9 | 23.6 | 1.1 | 268 | 0.798 | +| a3_vt15_c025_20_lb60 | full | 1.49 | 0.499 | 0.999 | 0.86 | 34.2 | 23.1 | 1.48 | 542 | 0.774 | +| a3_vt20_c025_20_lb60 | train | 1.63 | 0.67 | 0.992 | 0.686 | 43.3 | 17.7 | 2.45 | 257 | 0.895 | +| a3_vt20_c025_20_lb60 | validation | 1.48 | 0.715 | 0.981 | 0.573 | 34.7 | 23.7 | 1.46 | 248 | 0.918 | +| a3_vt20_c025_20_lb60 | full | 1.59 | 0.495 | 0.999 | 0.902 | 40.5 | 23.5 | 1.72 | 498 | 0.903 | +| a3_vt25_c025_20_lb60 | train | 1.68 | 0.671 | 0.994 | 0.712 | 47.5 | 17.8 | 2.66 | 239 | 1.05 | +| a3_vt25_c025_20_lb60 | validation | 1.63 | 0.706 | 0.99 | 0.655 | 41.9 | 21.8 | 1.93 | 235 | 1.07 | +| a3_vt25_c025_20_lb60 | full | 1.75 | 0.49 | 1 | 0.949 | 48.5 | 22.2 | 2.19 | 468 | 1.06 | +| a3_vt20_c05_15_lb20 | train | 1.76 | 0.667 | 0.996 | 0.752 | 48.7 | 17.1 | 2.84 | 253 | 0.976 | +| a3_vt20_c05_15_lb20 | validation | 1.65 | 0.711 | 0.99 | 0.664 | 40.4 | 24.1 | 1.67 | 243 | 0.938 | +| a3_vt20_c05_15_lb20 | full | 1.75 | 0.492 | 1 | 0.948 | 46.4 | 22.2 | 2.1 | 487 | 0.966 | +| a3_vt20_c05_15_lb126 | train | 1.55 | 0.671 | 0.989 | 0.642 | 41.2 | 17.9 | 2.3 | 260 | 0.88 | +| a3_vt20_c05_15_lb126 | validation | 1.37 | 0.714 | 0.972 | 0.512 | 30.6 | 20.5 | 1.49 | 247 | 0.933 | +| a3_vt20_c05_15_lb126 | full | 1.54 | 0.495 | 0.999 | 0.883 | 38.6 | 19.9 | 1.94 | 497 | 0.895 | +| a4_next_open | train | 0.94 | 0.688 | 0.915 | 0.298 | 22.2 | 18.1 | 1.23 | 260 | — | +| a4_next_open | validation | 1.44 | 0.719 | 0.977 | 0.551 | 36.3 | 28.2 | 1.29 | 243 | — | +| a4_next_open | full | 1.2 | 0.504 | 0.991 | 0.69 | 30 | 28.2 | 1.06 | 502 | — | +| a5_corr06_skip | train | 1.61 | 0.677 | 0.991 | 0.673 | 39.9 | 20.7 | 1.93 | 235 | — | +| a5_corr06_skip | validation | 1.7 | 0.714 | 0.991 | 0.689 | 39 | 17 | 2.3 | 222 | — | +| a5_corr06_skip | full | 1.59 | 0.5 | 0.999 | 0.899 | 38.2 | 20.7 | 1.85 | 450 | — | +| a5_corr07_skip | train | 1.4 | 0.676 | 0.981 | 0.555 | 34.3 | 19.9 | 1.73 | 244 | — | +| a5_corr07_skip | validation | 1.63 | 0.709 | 0.989 | 0.655 | 39.4 | 25.5 | 1.55 | 234 | — | +| a5_corr07_skip | full | 1.55 | 0.495 | 0.999 | 0.887 | 38.4 | 26 | 1.48 | 472 | — | +| a5_corr08_skip | train | 1.53 | 0.672 | 0.989 | 0.631 | 40.4 | 19.1 | 2.11 | 246 | — | +| a5_corr08_skip | validation | 1.37 | 0.709 | 0.973 | 0.512 | 32.4 | 25.8 | 1.26 | 233 | — | +| a5_corr08_skip | full | 1.49 | 0.493 | 0.999 | 0.863 | 38 | 26.6 | 1.43 | 475 | — | +| a5_corr06_half | train | 1.45 | 0.68 | 0.984 | 0.584 | 36.2 | 16.5 | 2.19 | 273 | — | +| a5_corr06_half | validation | 1.19 | 0.713 | 0.952 | 0.412 | 25 | 25.7 | 0.97 | 255 | — | +| a5_corr06_half | full | 1.38 | 0.497 | 0.997 | 0.806 | 32.5 | 25.4 | 1.28 | 521 | — | +| a5_corr07_half | train | 1.62 | 0.674 | 0.992 | 0.679 | 42.5 | 16.2 | 2.62 | 253 | — | +| a5_corr07_half | validation | 1.6 | 0.712 | 0.988 | 0.638 | 38.1 | 21.1 | 1.8 | 246 | — | +| a5_corr07_half | full | 1.66 | 0.494 | 1 | 0.924 | 42.5 | 21.8 | 1.95 | 492 | — | +| a5_corr08_half | train | 1.56 | 0.674 | 0.99 | 0.647 | 40.8 | 16.1 | 2.54 | 256 | — | +| a5_corr08_half | validation | 1.42 | 0.709 | 0.978 | 0.54 | 33.2 | 21.1 | 1.57 | 243 | — | +| a5_corr08_half | full | 1.55 | 0.494 | 0.999 | 0.887 | 39.2 | 21.8 | 1.8 | 492 | — | + +## Promotion decisions + +- **a2_hold_30**: PROMOTE — validation Sharpe 1.68 ≥ control 1.68; DD 20.9 within +2pp of 20.9; train Sharpe 1.75 ≥ 1.75 (delta ≤ 1 SE — distinguishable noise bar not cleared) +- **a2_hold_45**: reject — failed: train_sharpe_not_worse +- **a2_hold_60**: reject — failed: train_sharpe_not_worse +- **a2_hold_90**: reject — failed: validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a3_vt15_c05_15_lb60**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a3_vt20_c05_15_lb60**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a3_vt25_c05_15_lb60**: reject — failed: validation_sharpe_ge_control, train_sharpe_not_worse +- **a3_vt15_c025_20_lb60**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a3_vt20_c025_20_lb60**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a3_vt25_c025_20_lb60**: reject — failed: validation_sharpe_ge_control, train_sharpe_not_worse +- **a3_vt20_c05_15_lb20**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp +- **a3_vt20_c05_15_lb126**: reject — failed: validation_sharpe_ge_control, train_sharpe_not_worse +- **a4_next_open**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a5_corr06_skip**: reject — failed: train_sharpe_not_worse +- **a5_corr07_skip**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a5_corr08_skip**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a5_corr06_half**: reject — failed: validation_sharpe_ge_control, validation_dd_not_worse_by_2pp, train_sharpe_not_worse +- **a5_corr07_half**: reject — failed: validation_sharpe_ge_control, train_sharpe_not_worse +- **a5_corr08_half**: reject — failed: validation_sharpe_ge_control, train_sharpe_not_worse