mirror of
https://github.com/BrentNeale1/fx-quant.git
synced 2026-08-18 04:28:05 +00:00
Add Phase 2 backtesting pipeline: IS/OOS split, param sweep, generalization scoring
Externalize hardcoded params in S4F (5 params) and S3 (9 params) as class attributes for sweep compatibility. Add unified backtest runner with IS/OOS validation and generalization scores, plus parameter grid sweep (90 combos) with OOS validation. S7/S9/S9_Filtered pass generalization; S4F/S3 confirm defaults are near-optimal. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
9d16939eaa
commit
4f911b2072
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"S7_Tight": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "H1",
|
||||
"is_metrics": {
|
||||
"trades": 63,
|
||||
"wr": 52.4,
|
||||
"pf": 0.68,
|
||||
"sharpe": -2.71,
|
||||
"pnl_pips": -567.6,
|
||||
"max_dd_pips": -703.0,
|
||||
"expectancy": -9.01
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 35,
|
||||
"wr": 71.4,
|
||||
"pf": 1.8,
|
||||
"sharpe": 4.17,
|
||||
"pnl_pips": 558.9,
|
||||
"max_dd_pips": -219.9,
|
||||
"expectancy": 15.97
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.841,
|
||||
"detail": {
|
||||
"wr": 1.363,
|
||||
"pf": 2.0,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S9": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "H1",
|
||||
"is_metrics": {
|
||||
"trades": 253,
|
||||
"wr": 51.8,
|
||||
"pf": 0.77,
|
||||
"sharpe": -1.82,
|
||||
"pnl_pips": -1171.7,
|
||||
"max_dd_pips": -1775.8,
|
||||
"expectancy": -4.63
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 32,
|
||||
"wr": 68.8,
|
||||
"pf": 1.38,
|
||||
"sharpe": 2.14,
|
||||
"pnl_pips": 154.8,
|
||||
"max_dd_pips": -132.7,
|
||||
"expectancy": 4.84
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.78,
|
||||
"detail": {
|
||||
"wr": 1.328,
|
||||
"pf": 1.792,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S9_Filtered": {
|
||||
"pair": "GBP_AUD",
|
||||
"timeframe": "H1",
|
||||
"is_metrics": {
|
||||
"trades": 54,
|
||||
"wr": 57.4,
|
||||
"pf": 1.1,
|
||||
"sharpe": 0.66,
|
||||
"pnl_pips": 131.8,
|
||||
"max_dd_pips": -561.2,
|
||||
"expectancy": 2.44
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 12,
|
||||
"wr": 75.0,
|
||||
"pf": 2.98,
|
||||
"sharpe": 7.38,
|
||||
"pnl_pips": 342.6,
|
||||
"max_dd_pips": -49.6,
|
||||
"expectancy": 28.55
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 1.827,
|
||||
"detail": {
|
||||
"wr": 1.307,
|
||||
"pf": 2.0,
|
||||
"expectancy": 2.0,
|
||||
"sharpe": 2.0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S4F": {
|
||||
"pair": "EUR_AUD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 75,
|
||||
"wr": 50.7,
|
||||
"pf": 1.43,
|
||||
"sharpe": 2.63,
|
||||
"pnl_pips": 427.8,
|
||||
"max_dd_pips": -183.7,
|
||||
"expectancy": 5.7
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 20,
|
||||
"wr": 25.0,
|
||||
"pf": 0.48,
|
||||
"sharpe": -5.42,
|
||||
"pnl_pips": -254.7,
|
||||
"max_dd_pips": -337.2,
|
||||
"expectancy": -12.74
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.207,
|
||||
"detail": {
|
||||
"wr": 0.493,
|
||||
"pf": 0.336,
|
||||
"expectancy": 0.0,
|
||||
"sharpe": 0.0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S3": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "H1",
|
||||
"is_metrics": {
|
||||
"trades": 112,
|
||||
"wr": 49.1,
|
||||
"pf": 1.06,
|
||||
"sharpe": 0.39,
|
||||
"pnl_pips": 146.2,
|
||||
"max_dd_pips": -533.2,
|
||||
"expectancy": 1.31
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 38,
|
||||
"wr": 55.3,
|
||||
"pf": 1.07,
|
||||
"sharpe": 0.51,
|
||||
"pnl_pips": 56.9,
|
||||
"max_dd_pips": -182.9,
|
||||
"expectancy": 1.5
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 1.147,
|
||||
"detail": {
|
||||
"wr": 1.126,
|
||||
"pf": 1.009,
|
||||
"expectancy": 1.145,
|
||||
"sharpe": 1.308
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"_portfolio": {
|
||||
"is_metrics": {
|
||||
"trades": 557,
|
||||
"wr": 51.7,
|
||||
"pf": 0.91,
|
||||
"sharpe": -0.64,
|
||||
"pnl_pips": -1033.5,
|
||||
"max_dd_pips": -2398.5,
|
||||
"expectancy": -1.86
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 137,
|
||||
"wr": 59.9,
|
||||
"pf": 1.34,
|
||||
"sharpe": 2.02,
|
||||
"pnl_pips": 858.4,
|
||||
"max_dd_pips": -452.7,
|
||||
"expectancy": 6.27
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.658,
|
||||
"detail": {
|
||||
"wr": 1.159,
|
||||
"pf": 1.473,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user