mirror of
https://github.com/BrentNeale1/fx-quant.git
synced 2026-08-18 20:48:06 +00:00
Phase 2: Live paper trading engine + extended backtesting analytics
Track A — Live paper trading system: - Extract PositionManager from backtester into shared src/position_manager.py - Refactor backtester/engine.py to delegate to PositionManager - New src/live/ package: data_feed (OANDA polling), executor (paper/live orders), engine (LiveEngine orchestrator with 5 strategy slots), run.py entry point - Add phase2 config to system.yaml (S7_Tight, S9, S9_Filtered, S4F, S3) Track B — Extended backtesting analytics: - Regime analysis: per-year (2021-2023) breakdown shows 4/5 strategies trending UP - Correlation analysis: S7+S3 GBP_JPY overlap=16.9% (moderate), S9 pairs=12% (low) - Kelly sizing: S9_Filtered half-Kelly=7.3%, S4F=2.4%, S3=1.6% with Monte Carlo DD Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
39a6536284
commit
072ac0f245
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"S7_S3_overlap": {
|
||||
"overlap_count": 21,
|
||||
"same_dir": 21,
|
||||
"opposite_dir": 0,
|
||||
"ratio": 0.169
|
||||
},
|
||||
"S9_S9F_temporal": {
|
||||
"s9_trade_days": 275,
|
||||
"s9f_trade_days": 65,
|
||||
"shared_trade_days": 33,
|
||||
"temporal_overlap_ratio": 0.12
|
||||
},
|
||||
"portfolio": {
|
||||
"total_trades": 694,
|
||||
"win_rate_pct": 53.3,
|
||||
"profit_factor": 0.99,
|
||||
"total_pnl_pips": -175.1,
|
||||
"total_pnl_dollars": -23036.66,
|
||||
"max_drawdown_pct": -47.8,
|
||||
"sharpe_ratio": -0.71
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"S7_Tight_GBP_JPY": {
|
||||
"trades": 98,
|
||||
"win_rate": 59.2,
|
||||
"avg_win_pips": 42.8,
|
||||
"avg_loss_pips": 62.3,
|
||||
"avg_win_loss_ratio": 0.69,
|
||||
"kelly_full_pct": 0,
|
||||
"kelly_half_pct": 0,
|
||||
"monte_carlo_half_kelly": {
|
||||
"p50_dd": 0,
|
||||
"p75_dd": 0,
|
||||
"p95_dd": 0,
|
||||
"p99_dd": 0,
|
||||
"ruin_pct": 0
|
||||
}
|
||||
},
|
||||
"S9_GBP_USD": {
|
||||
"trades": 285,
|
||||
"win_rate": 53.7,
|
||||
"avg_win_pips": 29.3,
|
||||
"avg_loss_pips": 41.7,
|
||||
"avg_win_loss_ratio": 0.7,
|
||||
"kelly_full_pct": 0,
|
||||
"kelly_half_pct": 0,
|
||||
"monte_carlo_half_kelly": {
|
||||
"p50_dd": 0,
|
||||
"p75_dd": 0,
|
||||
"p95_dd": 0,
|
||||
"p99_dd": 0,
|
||||
"ruin_pct": 0
|
||||
}
|
||||
},
|
||||
"S9_Filtered_GBP_AUD": {
|
||||
"trades": 66,
|
||||
"win_rate": 60.6,
|
||||
"avg_win_pips": 49.5,
|
||||
"avg_loss_pips": 57.9,
|
||||
"avg_win_loss_ratio": 0.85,
|
||||
"kelly_full_pct": 14.53,
|
||||
"kelly_half_pct": 7.26,
|
||||
"monte_carlo_half_kelly": {
|
||||
"p50_dd": 2.5,
|
||||
"p75_dd": 3.3,
|
||||
"p95_dd": 4.8,
|
||||
"p99_dd": 6.3,
|
||||
"ruin_pct": 0.0
|
||||
}
|
||||
},
|
||||
"S4F_EUR_AUD": {
|
||||
"trades": 95,
|
||||
"win_rate": 45.3,
|
||||
"avg_win_pips": 38.8,
|
||||
"avg_loss_pips": 28.7,
|
||||
"avg_win_loss_ratio": 1.35,
|
||||
"kelly_full_pct": 4.7,
|
||||
"kelly_half_pct": 2.35,
|
||||
"monte_carlo_half_kelly": {
|
||||
"p50_dd": 0.7,
|
||||
"p75_dd": 1.0,
|
||||
"p95_dd": 1.5,
|
||||
"p99_dd": 1.9,
|
||||
"ruin_pct": 0.0
|
||||
}
|
||||
},
|
||||
"S3_GBP_JPY": {
|
||||
"trades": 150,
|
||||
"win_rate": 50.7,
|
||||
"avg_win_pips": 43.5,
|
||||
"avg_loss_pips": 41.9,
|
||||
"avg_win_loss_ratio": 1.04,
|
||||
"kelly_full_pct": 3.11,
|
||||
"kelly_half_pct": 1.56,
|
||||
"monte_carlo_half_kelly": {
|
||||
"p50_dd": 0.9,
|
||||
"p75_dd": 1.2,
|
||||
"p95_dd": 1.9,
|
||||
"p99_dd": 2.4,
|
||||
"ruin_pct": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"S7_Tight_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "H1",
|
||||
"years": {
|
||||
"2021": {
|
||||
"trades": 34,
|
||||
"wr": 47.1,
|
||||
"pf": 0.47,
|
||||
"pnl_pips": -465.5,
|
||||
"max_dd_pips": -618.3,
|
||||
"expectancy": -13.69
|
||||
},
|
||||
"2022": {
|
||||
"trades": 29,
|
||||
"wr": 58.6,
|
||||
"pf": 0.89,
|
||||
"pnl_pips": -102.1,
|
||||
"max_dd_pips": -412.7,
|
||||
"expectancy": -3.52
|
||||
},
|
||||
"2023": {
|
||||
"trades": 35,
|
||||
"wr": 71.4,
|
||||
"pf": 1.8,
|
||||
"pnl_pips": 558.9,
|
||||
"max_dd_pips": -219.9,
|
||||
"expectancy": 15.97
|
||||
}
|
||||
},
|
||||
"full": {
|
||||
"trades": 98,
|
||||
"wr": 59.2,
|
||||
"pf": 1.0,
|
||||
"pnl_pips": -8.6,
|
||||
"max_dd_pips": -723.9,
|
||||
"expectancy": -0.09
|
||||
}
|
||||
},
|
||||
"S9_GBP_USD": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "H1",
|
||||
"years": {
|
||||
"2021": {
|
||||
"trades": 138,
|
||||
"wr": 52.2,
|
||||
"pf": 0.71,
|
||||
"pnl_pips": -701.8,
|
||||
"max_dd_pips": -856.6,
|
||||
"expectancy": -5.09
|
||||
},
|
||||
"2022": {
|
||||
"trades": 115,
|
||||
"wr": 51.3,
|
||||
"pf": 0.83,
|
||||
"pnl_pips": -470.0,
|
||||
"max_dd_pips": -1030.5,
|
||||
"expectancy": -4.09
|
||||
},
|
||||
"2023": {
|
||||
"trades": 32,
|
||||
"wr": 68.8,
|
||||
"pf": 1.38,
|
||||
"pnl_pips": 154.8,
|
||||
"max_dd_pips": -132.7,
|
||||
"expectancy": 4.84
|
||||
}
|
||||
},
|
||||
"full": {
|
||||
"trades": 285,
|
||||
"wr": 53.7,
|
||||
"pf": 0.82,
|
||||
"pnl_pips": -1017.0,
|
||||
"max_dd_pips": -1775.8,
|
||||
"expectancy": -3.57
|
||||
}
|
||||
},
|
||||
"S9_Filtered_GBP_AUD": {
|
||||
"pair": "GBP_AUD",
|
||||
"timeframe": "H1",
|
||||
"years": {
|
||||
"2021": {
|
||||
"trades": 31,
|
||||
"wr": 45.2,
|
||||
"pf": 0.58,
|
||||
"pnl_pips": -412.3,
|
||||
"max_dd_pips": -535.5,
|
||||
"expectancy": -13.3
|
||||
},
|
||||
"2022": {
|
||||
"trades": 23,
|
||||
"wr": 73.9,
|
||||
"pf": 2.57,
|
||||
"pnl_pips": 544.1,
|
||||
"max_dd_pips": -116.9,
|
||||
"expectancy": 23.65
|
||||
},
|
||||
"2023": {
|
||||
"trades": 12,
|
||||
"wr": 75.0,
|
||||
"pf": 2.98,
|
||||
"pnl_pips": 342.6,
|
||||
"max_dd_pips": -49.6,
|
||||
"expectancy": 28.55
|
||||
}
|
||||
},
|
||||
"full": {
|
||||
"trades": 66,
|
||||
"wr": 60.6,
|
||||
"pf": 1.32,
|
||||
"pnl_pips": 474.3,
|
||||
"max_dd_pips": -561.2,
|
||||
"expectancy": 7.19
|
||||
}
|
||||
},
|
||||
"S4F_EUR_AUD": {
|
||||
"pair": "EUR_AUD",
|
||||
"timeframe": "M15",
|
||||
"years": {
|
||||
"2021": {
|
||||
"trades": 42,
|
||||
"wr": 42.9,
|
||||
"pf": 1.11,
|
||||
"pnl_pips": 57.8,
|
||||
"max_dd_pips": -119.7,
|
||||
"expectancy": 1.38
|
||||
},
|
||||
"2022": {
|
||||
"trades": 33,
|
||||
"wr": 60.6,
|
||||
"pf": 1.79,
|
||||
"pnl_pips": 370.0,
|
||||
"max_dd_pips": -183.7,
|
||||
"expectancy": 11.21
|
||||
},
|
||||
"2023": {
|
||||
"trades": 20,
|
||||
"wr": 25.0,
|
||||
"pf": 0.48,
|
||||
"pnl_pips": -254.7,
|
||||
"max_dd_pips": -337.2,
|
||||
"expectancy": -12.74
|
||||
}
|
||||
},
|
||||
"full": {
|
||||
"trades": 95,
|
||||
"wr": 45.3,
|
||||
"pf": 1.12,
|
||||
"pnl_pips": 173.0,
|
||||
"max_dd_pips": -337.2,
|
||||
"expectancy": 1.82
|
||||
}
|
||||
},
|
||||
"S3_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "H1",
|
||||
"years": {
|
||||
"2021": {
|
||||
"trades": 65,
|
||||
"wr": 46.2,
|
||||
"pf": 0.9,
|
||||
"pnl_pips": -112.6,
|
||||
"max_dd_pips": -345.7,
|
||||
"expectancy": -1.73
|
||||
},
|
||||
"2022": {
|
||||
"trades": 47,
|
||||
"wr": 53.2,
|
||||
"pf": 1.21,
|
||||
"pnl_pips": 262.9,
|
||||
"max_dd_pips": -307.3,
|
||||
"expectancy": 5.59
|
||||
},
|
||||
"2023": {
|
||||
"trades": 38,
|
||||
"wr": 55.3,
|
||||
"pf": 1.07,
|
||||
"pnl_pips": 56.9,
|
||||
"max_dd_pips": -182.9,
|
||||
"expectancy": 1.5
|
||||
}
|
||||
},
|
||||
"full": {
|
||||
"trades": 150,
|
||||
"wr": 50.7,
|
||||
"pf": 1.07,
|
||||
"pnl_pips": 203.1,
|
||||
"max_dd_pips": -533.2,
|
||||
"expectancy": 1.35
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user