Optimize EUR/USD to 78.7% WR on 2-year M15 backtest
Three-layer optimization: 1. Entry filters (signal_aggregator.py section 6e): - Block ranging regime - Only A+/A/B quality grades - min_entry_score=38, min_entry_confidence=60 - Block RSI > 70 for BUY, RSI < 30 for SELL 2. Trade setup (config.py EurUsdStrategyConfig): - RR=0.50 with uniform quality scale - SL floor 1.2 ATR, TP 1.0 ATR 3. Breakeven trail (backtest/gpu_backtest.py): - When MFE reaches 0.3R, move SL to entry + 0.05R buffer - Converts 4 of 14 losses to +0.05R small wins - Bar-by-bar simulation integrated into simulate_trades() Results (EUR/USD M15, 2024-05-18 to 2026-05-18): 47 trades | 78.7% WR | +1.81R | PF 1.18 | MaxDD 3.35R XAU/USD unchanged: 77.8% WR on 30-day, 68.7% WR on 2-year. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+11
-7
@@ -1677,11 +1677,14 @@ def _():
|
||||
assert 6 not in cfg.allowed_weekdays # No Sunday
|
||||
assert cfg.min_atr_threshold == 0.0003
|
||||
assert cfg.sl_atr_floor == 1.2
|
||||
assert cfg.min_rr_ratio == 1.0
|
||||
assert cfg.min_rr_ratio == 0.5
|
||||
assert cfg.mature_move_threshold == 35.0
|
||||
assert cfg.tp_quality_scale["A+"] == 1.8
|
||||
assert cfg.tp_quality_scale["A"] == 1.2
|
||||
assert cfg.tp_quality_scale["A+"] == 1.0
|
||||
assert cfg.tp_quality_scale["A"] == 1.0
|
||||
assert cfg.tp_quality_scale["C"] == 1.0
|
||||
assert "ranging" in cfg.blocked_regimes
|
||||
assert "A" in cfg.min_quality_grades
|
||||
assert "C" not in cfg.min_quality_grades
|
||||
|
||||
|
||||
@test("PlatformConfig has eur_strategy field")
|
||||
@@ -1764,21 +1767,22 @@ def _():
|
||||
assert "EUR/USD" not in NewsEngine._get_affected_pairs("GBP")
|
||||
|
||||
|
||||
@test("EUR/USD trade setup uses quality-scaled TP and tighter SL")
|
||||
@test("EUR/USD trade setup uses tighter RR and SL")
|
||||
def _():
|
||||
from pair_signals.eurusd import make_config
|
||||
from signal_aggregator import SignalAggregator
|
||||
config = make_config(Timeframe.H1)
|
||||
config.backtest.session_filter = False
|
||||
config.eur_strategy.blocked_regimes = []
|
||||
config.eur_strategy.min_quality_grades = []
|
||||
assert config.eur_strategy.sl_atr_floor == 1.2
|
||||
assert config.eur_strategy.min_rr_ratio == 1.0
|
||||
assert config.eur_strategy.tp_quality_scale["A"] == 1.2
|
||||
assert config.eur_strategy.min_rr_ratio == 0.5
|
||||
agg = SignalAggregator(config)
|
||||
df = make_ohlcv(n=300, start_price=1.0800, trend=0.0003, seed=77)
|
||||
dfs = {Timeframe.H1: df, Timeframe.M15: df, Timeframe.H4: df}
|
||||
report = agg.analyze_from_dataframes(symbol=EURUSD, dfs=dfs, use_news=False)
|
||||
if report.trade_setup:
|
||||
assert report.trade_setup.risk_reward >= 1.0 - 0.01
|
||||
assert report.trade_setup.risk_reward >= 0.5 - 0.01
|
||||
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════
|
||||
|
||||
Reference in New Issue
Block a user