Warrior_EA/research/FX_RESULTS.md
AnimateDread 6192393511 research(fx): forex and metals - thirteen registered families, nothing passed
Hypotheses were registered in FX_PLAN.md before each round. Trend,
breakout, cross reversion, hour seasonality, month-end USD, carry-cross
dip-buy, metals dip-buy and flight-to-safety all fail the bar.

The weekend-gap fade looked like the best result of the project on bar
data (OOS t 20, 28/28 pairs) and loses on real ticks (EURCHF PF 0.52,
AUDNZD PF 0.53): the Sunday-open spread is as wide as the gap.
WarriorGapFade is kept as the research artifact that proved it and is
flagged DO NOT TRADE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 13:24:57 -04:00

79 lines
5 KiB
Markdown

# Forex & metals — results of the 2026-09-22 overnight search
Plan and every hypothesis were registered in `FX_PLAN.md` **before** each round
ran. Data: broker history exported from the fleet terminal — H1/H4/D1 for 28
FX pairs and 5 metals, 2004 → 2026-08 (`mql5/ExportBars.mq5`). Split: IS
2004–2015, OOS 2016–2026. Costs: the bar's own spread. Pass bar: OOS t ≥ 2,
same variant positive IS, breadth ≥ half the class, beats a matched random
control, then the MT5 tester with real swaps and — for anything intraday —
**real ticks**.
## Verdict
**No forex or metals strategy passed.** Thirteen families in four registered
rounds, ~1,300 symbol-variant trials. Round 4 was declared the last before it ran. The closest things to an edge were all killed by one of three things:
a regime flip between the halves, drift masquerading as signal, or execution
realism.
## Every family, every result
| id | family | outcome | why it failed |
|---|---|---|---|
| T1 | time-series momentum D1 (SMA 50/100/200) | 0/33 pass, OOS pooled −8.8 bp | FX trend premium absent 2016–26 |
| T2 | channel breakout D1 (20/55/100) | 0/33 pass, 7/33 OOS positive | same |
| R1 | two-sided z-reversion, twinned crosses & majors, H4/D1 | 0 pass anywhere | H4 IS **significantly negative** (t −4.9): moves continued 2004–15, then stopped — a regime flip, not an edge |
| S1 | intraday hour-window seasonality H1 | 1/33 (chance level) | spread > hourly effect |
| M1 | month-end USD flow | USD weakens last 2 days: IS t −2.6, OOS same sign t 1.45 | below the bar; 7 USD pairs are one bet |
| X1 | index dip-buy rule on carry crosses | IS **lost** (t −4.07), OOS +12.5 bp gated | the losing half is 2008/2011/2015 carry unwinds — the tail risk a prop account cannot hold |
| X2 | SP500 dip signal → long risk FX | +4.6 IS / +5.6 OOS bp, no symbol t ≥ 2 | weak, and fires with the index portfolio (stacks correlated risk) |
| X3 | weekend gap fade H1 | bar data: OOS +7.1 bp, t 11.8, 29/33 | **real ticks kill it** — see below |
| X4 | index dip-buy rule on metals | **loses in both halves** (OOS t −4.22) | metals do not revert after sharp drops |
| C1 | metals continuation (X4's mirror) | 0/5 pass, OOS pooled −9.3 bp | the mirror does not inherit X4's losses as gains |
| R4 | flight to safety: SP500 dip signal → long gold/silver, long CHF/JPY | 0/4 pass, OOS pooled −22.6 bp | havens did not rally on index dips (gold fell — 2022+ dips came with a strong USD) |
## The weekend gap — the lesson of the night
Fading the Sunday-open gap looked like the best result of the whole project:
28/28 FX pairs positive out of sample, t 20. Three checks took it apart:
1. **Timing.** The share of trades hitting target inside the FIRST hour rose from
5 % (2004–09) to 32 % (2021–26). Entering 1 h later kept ~40 % of it; 2 h later,
nothing. The effect lives in the thinnest minutes of the week.
2. **Real ticks.** EURCHF with real ticks for all of 2016–26 (`WarriorGapFade`,
Model 4): **51 trades, not 234; PF 0.74; −1,173.** Most "gaps" vanish because the
spread at the open is as wide as the gap. Example: 2026-08-17 00:05, bought at
0.93955 with the bid at 0.93873 — an 8-pip spread — stopped out one second later.
After fixing two EA defects found in that first run (take-profits rejected at the open
with rc 10016, and a delayed-entry path that could never fire), the real-tick verdict is
unchanged — every variant loses or breaks even:
| real ticks 2016–26 | entry at the open | entry 1 hour later |
|---|---|---|
| EURCHF | 59 trades, PF 0.52, −3,271 | 108 trades, PF 0.91, −691 |
| AUDNZD (bar-data OOS t 11) | 51 trades, PF 0.53, −2,861 | 125 trades, PF 0.97, −309 |
3. Bar data records one spread per bar. It cannot price the first seconds after a
session opens. **Any intraday FX result must be re-run on real ticks before it
is believed.**
## One watchlist item (not a strategy)
**Gold rises over the first two trading days of the month** — OOS the #1 of 19
two-day windows on XAUUSD and XAUEUR (+28 bp over drift, permutation p ≈ 0.01),
silver IS #1 / OOS #3. But in 2004–15 gold's first-two-days window was merely
average (rank 10/19), and the effect was found by looking at OOS cells, so after
multiplicity it is p ≈ 0.15. It would need a year of forward evidence before it
could be traded; it is not built into any EA.
## What this means for the account
The one validated edge remains the equity-index dip-buy (`STRATEGY.md`). The
reason it works — an asset with a premium (drift) that also reverts after sharp
drops — is exactly what forex (no drift, no reversion) and metals (drift, but
continuation) lack. The search confirms the mechanism rather than extending it.
## The same real-tick test, applied to the index strategy — PASSED
The check that killed the gap fade was run on the live index EA too (4 charts, 2022–26,
real ticks from mid/late 2022): account +14.6 % vs +14.7 % on M1-OHLC, drawdown 2.88 %
unchanged, same trades. See `STRATEGY.md`.