Remove EUR/USD support — XAU/USD-only codebase
EUR/USD never had a validated edge (2026-07-11/12 verdict: no config
passed validation on M5/M15/H1 at 1-pip cost; cost-to-volatility root
cause). Removed: EurUsdStrategyConfig, pair_signals/eurusd.py, EUR
gates 6h + weekend/day filters + strategy marker + trade geometry in
signal_aggregator, EUR pair registry/aliases in main.py and
gpu_backtest.py, EUR/USD news pair mappings, test_all.py Module 10.
Generic multi-currency news keyword infra kept (GBP/JPY/EUR keyword
table is not pair code). Full EUR history remains at 7d3fd95.
Suite: 162/162 green (was 187; 25 EUR-specific tests removed).
Claude-Session: https://claude.ai/code/session_015kby7M9JwpYi8NQT2yoxAi
This commit is contained in:
@@ -554,7 +554,7 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
description="Diagnose which filters reject the most bars in the backtest pipeline",
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||
)
|
||||
p.add_argument("--pair", required=True, help="EURUSD | GBPUSD | USDJPY | XAUUSD")
|
||||
p.add_argument("--pair", required=True, help="XAUUSD | GOLD")
|
||||
p.add_argument("--days", type=int, default=365, help="Days of history")
|
||||
p.add_argument("--start", help="ISO date YYYY-MM-DD (overrides --days)")
|
||||
p.add_argument("--end", help="ISO date YYYY-MM-DD (defaults to today)")
|
||||
|
||||
@@ -49,7 +49,6 @@ if str(PROJECT_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
|
||||
from config import ( # noqa: E402
|
||||
EURUSD,
|
||||
PAIR_INFO,
|
||||
PlatformConfig,
|
||||
SignalStrength,
|
||||
@@ -98,9 +97,6 @@ PAIR_ALIASES = {
|
||||
"XAUUSD": XAUUSD,
|
||||
"XAU/USD": XAUUSD,
|
||||
"GOLD": XAUUSD,
|
||||
"EURUSD": EURUSD,
|
||||
"EUR/USD": EURUSD,
|
||||
"EUR": EURUSD,
|
||||
}
|
||||
|
||||
# Bar duration in seconds — used to compute "fully-closed" cutoffs so
|
||||
@@ -1068,7 +1064,7 @@ class Trade:
|
||||
final_confidence: float
|
||||
market_regime: str
|
||||
volatility_regime: str = ""
|
||||
strategy_tag: str = "" # "XAU", "XAU_PB", "EUR_PB", "GBP_PB", "GENERIC"
|
||||
strategy_tag: str = "" # "XAU", "XAU_PB", "GENERIC"
|
||||
# Per-trade trailing overrides (0 = use the run-level params).
|
||||
trail_arm_r: float = 0.0
|
||||
trail_dist_r: float = 0.0
|
||||
@@ -1422,7 +1418,7 @@ class BacktestConfig:
|
||||
quality_filter: List[str] = field(
|
||||
default_factory=lambda: ["A+", "A", "B", "C"]
|
||||
)
|
||||
# Restrict to specific strategy tags (XAU / EUR_PB / GBP_PB / GENERIC).
|
||||
# Restrict to specific strategy tags (XAU / XAU_PB / GENERIC).
|
||||
# Empty = take all. Use to A/B test whether GENERIC trades add or destroy edge.
|
||||
strategies_only: List[str] = field(default_factory=list)
|
||||
# Round-trip transaction cost in price units, charged on every trade
|
||||
@@ -1547,10 +1543,6 @@ def _replay_span(span: Tuple[int, int]):
|
||||
tag = "XAU_PB"
|
||||
elif "XAU STRATEGY" in first_bull:
|
||||
tag = "XAU"
|
||||
elif "EUR STRATEGY" in first_bull or "EUR STRATEGY" in first_bear:
|
||||
tag = "EUR"
|
||||
elif "GBP STRATEGY" in first_bull:
|
||||
tag = "GBP_PB"
|
||||
|
||||
if bt_cfg.strategies_only and tag not in bt_cfg.strategies_only:
|
||||
continue
|
||||
@@ -2132,7 +2124,7 @@ def _parse_args(argv: Optional[List[str]] = None) -> argparse.Namespace:
|
||||
description="GPU-accelerated backtester for ForexBot2",
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||
)
|
||||
p.add_argument("--pair", required=True, help="XAUUSD | GOLD | EURUSD")
|
||||
p.add_argument("--pair", required=True, help="XAUUSD | GOLD")
|
||||
p.add_argument("--days", type=int, default=180, help="Days of history (ignored if --start/--end set)")
|
||||
p.add_argument("--start", help="ISO date YYYY-MM-DD (overrides --days)")
|
||||
p.add_argument("--end", help="ISO date YYYY-MM-DD (defaults to today)")
|
||||
@@ -2149,11 +2141,11 @@ def _parse_args(argv: Optional[List[str]] = None) -> argparse.Namespace:
|
||||
help="Override TechnicalConfig.swing_sr_lookback (0 = use config default)")
|
||||
p.add_argument("--quality", default="A+,A,B,C", help="Comma-separated allowed grades")
|
||||
p.add_argument("--strategies", default="",
|
||||
help="Comma-separated strategy tags to include (XAU,XAU_PB,EUR,GENERIC). Empty = all.")
|
||||
help="Comma-separated strategy tags to include (XAU,XAU_PB,GENERIC). Empty = all.")
|
||||
p.add_argument("--no-cache", action="store_true", help="Skip parquet cache (force API fetch)")
|
||||
p.add_argument("--spread", type=float, default=None,
|
||||
help="Round-trip cost in price units per trade (default: pair's "
|
||||
"default_spread from PAIR_INFO — XAU $0.30, EUR 0.0001; 0 disables)")
|
||||
"default_spread from PAIR_INFO — XAU $0.30; 0 disables)")
|
||||
p.add_argument("--export-csv", help="Optional path to dump per-trade CSV (incl. indicator breakdown)")
|
||||
p.add_argument("--detail", action="store_true",
|
||||
help="Print full per-trade reasoning (indicators, signals, agreement, why entered)")
|
||||
|
||||
@@ -6,7 +6,7 @@ alignment (see scraper docstring).
|
||||
|
||||
Key API:
|
||||
cal = load_calendar() # full DataFrame, `utc` column
|
||||
ev = precise_events(cal, ["USD", "EUR"]) # high-impact, minute-accurate
|
||||
ev = precise_events(cal, ["USD"]) # high-impact, minute-accurate
|
||||
mask = event_window_mask(bar_index, ev.utc, before, after)
|
||||
"""
|
||||
from pathlib import Path
|
||||
@@ -47,7 +47,7 @@ def load_calendar(path: Path = PARQUET) -> pd.DataFrame:
|
||||
|
||||
def precise_events(
|
||||
cal: pd.DataFrame,
|
||||
currencies: Iterable[str] = ("USD", "EUR"),
|
||||
currencies: Iterable[str] = ("USD",),
|
||||
impacts: Iterable[str] = ("high",),
|
||||
require_values: bool = False,
|
||||
) -> pd.DataFrame:
|
||||
|
||||
Reference in New Issue
Block a user