# FX study: six strategies on four currency pairs - frozen specification (RIP Backtest protocol v1.0 plus the 8 Oct 2026 rules)

Specification written **2026-10-08, before any FX price data was run through the engine for these strategies.** What was looked at before writing it: the file inventory, the date range
of the MT4 history files, and the `spread` field of the bars (it is zero in every file, so spreads are assumptions, see Costs). The only prices printed were five sample closing prices and the week-open and week-close timestamps of EURUSD, to check the New York time conversion (the week opens Sunday 17:00 and closes Friday 17:00 New York, as expected). No return, signal or trade result was looked at.
Bugs may be fixed after the run; rules may not. If the engine fails its self-test (below), nothing is run.

## What is being tested
The six strategies already tested on ES, with the same rules and the same default parameters, on four currency pairs. Nothing is tuned for FX. The point is to see whether any of
them works on a second, unrelated market, which is much stronger evidence than a second look at the same market.

| Strategy | ES post | Rules (unchanged) |
|---|---|---|
| RSI(2) Dip Buyer | the-rsi2-dip-buyer | `rsi2_spec.md`: SMA(200) trend, RSI(2) < 10 long / > 90 short, entries 10:00-16:00 New York, exit when the close crosses the 5-bar average, 24-bar limit, 3 x ATR(14) emergency stop |
| Supertrend | supertrend | `st_spec.md`: ATR(10) x 3, follow the colour, 60-minute bars only |
| Donchian Channel Breakout | donchian-channel-breakout | `dc_spec.md`: 20-bar entry, 10-bar exit |
| Bollinger Band Reversal | bollinger-band-reversal | `bb_spec.md`: (20, 2), enter on a close beyond the band, exit at the middle band |
| RSI Divergence | rsi-divergence | `dv_spec.md`: RSI(14), swings 5/5, spacing 5-60, exit when RSI crosses 50 |
| MACD Crossover | macd-crossover | `mc_spec.md`: (12, 26, 9), follow the state / enter on the cross |

Differences from the ES versions, all forced by the market and all declared here: the cost model and units (below); stops and targets are in price units with no tick rounding; the
Supertrend 5- and 15-minute "trading hours only" variants are not run (trading hours are an ES concept); the RSI(2) entry window (10:00-16:00 New York) is kept as it is part of that
strategy's rules, even though FX trades around the clock.

## Instruments and data
EURUSD, GBPUSD, USDJPY, AUDUSD. **Spot FX, not futures.** Source: MetaTrader 4 1-minute history of the IC Markets demo server (bid prices, bar time = open time; the engine converts to
close time and to New York wall-clock time, server time = New York + 7 hours). Hourly bars are built from the 1-minute bars exactly as for ES (bar time = close time, New York clock).
Entries fill at the open of the next 1-minute bar; stops and targets fill at their price, or at the open if the bar gaps through it; the stop wins ties; a Friday bar closing at or after
16:00 New York exits and no entries follow until the next week. Data used: 2004-01-01 to the end of the files (late September 2026). The broker history is a demo-server download and
early years may contain interpolated bars; that limitation applies to every FX result.

## Periods (same as the gold test)
Development 2004-01-01 .. 2012-12-31; Validation 2013-01-01 .. 2019-12-31; Holdout 2020-01-01 .. end of data.
**The holdout is not clean:** the 2020-2026 FX data was looked at in an earlier test of a different idea (weekly Fibonacci pivots with TDI). It is reported and flagged as used.

## Costs (IC Markets Raw Spread account, as published; account type to be confirmed by the author)
Commission USD 3.50 per lot per side, USD 7 per round turn on a 100,000 lot. Expressed in pips: 0.7 pip on EURUSD, GBPUSD and AUDUSD; 0.9 pip on USDJPY (the yen pip is worth
less in dollars over most of the period). Spread: **0.3 pip assumed on every pair**, deliberately above the 0.0-0.3 pip averages IC Markets and third-party reviews publish for these pairs,
to leave room for news and rollover widening. Modelled as 0.15 pip adverse on every fill (entry, exit, stop, target) plus the commission once per round trip.
**Total about 1.0 pip per round trip (1.2 pips on USDJPY), constant across years.** Spreads in 2004-2012 were wider than today, so the constant cost flatters the development period.
Because the cost per trade is a constant, net results at half and at double the cost are reported exactly (net = gross - trades x cost).
Results are in pips per trade (1 pip = 0.0001, or 0.01 for USDJPY), one unit, no compounding.

## Variants (declared up front; the ONLY ones tested): 24 per pair, 96 in total
- RSI(2): A (long + short), B (long only), A2 (long + short, stop 1.5 ATR, target 3 ATR, 24 bars), B2 (long only, same stop and target).
- Supertrend: ST60-LS, ST60-L, ST60-LS-T, ST60-L-T (the "-T" versions add a stop 1.5 ATR(10) and target 3 ATR(10), and the flip still exits).
- Donchian: DC-LS-S, DC-L-S, DC-LS-F, DC-L-F. Bollinger: BB-LS-S, BB-L-S, BB-LS-F, BB-L-F. RSI divergence: DV-LS-S, DV-L-S, DV-LS-F, DV-L-F. MACD: MC-LS-S, MC-L-S, MC-LS-F, MC-L-F.
("S" = simple exit, "F" = fixed stop and target, "LS" = long and short, "L" = long only; stop and target distances exactly as in the ES specifications.)
Long-only versions have no natural market-drift rationale on FX; they are kept so that the variants stay identical to the ES tests.

## Gates (net of costs, per variant and pair)
1. Profit factor >= 1.2 in validation. 2. At least 50 trades in each period. 3. Development t-statistic >= **2.5** (more than four variants of every strategy have been tried in total, so the
stricter bar from the 7 Oct 2026 rule applies to all FX variants). 4. Above the 95th percentile of 500 random runs of the **matched control** below (average net pips per trade over the full sample).
5. Positive after removing the 10 best trades. 6. Holdout net positive (flagged used).

## Matched random control (rule of 8 Oct 2026: matched on the signal's entry state; fixed seeds, trade count matched; same exits, session rules and costs)
- RSI(2): random entries on bars in the signal's state without the RSI(2) extreme: long when the close is above SMA(200) and below SMA(5), short when below SMA(200) and above SMA(5) (long only for B).
- Supertrend: the real Supertrend direction series circularly shifted by a random offset of at least 5% of the series.
- Donchian: random entries while the close is in the top quarter (long) or bottom quarter (short) of the previous 20-bar range.
- Bollinger: random entries matched on the distance of the close from the middle band in ATR units (buckets of 0.25 ATR), separately for longs and shorts.
- RSI divergence: random entries matched on RSI(14) at entry (buckets of 5 points), separately for longs and shorts.
- MACD: simple versions, the real MACD state series circularly shifted by at least about 3 months; full versions, random entries while the MACD is above its signal (long) or below it (short).
The earlier "any bar, random side" control is not run on FX: it was shown to be unmatched on ES, and the gate uses the matched control only.

## Verdicts and the cross-market rule
Per variant and pair: Buried (failed one or more gates) or Survivor (all six). **A variant counts as supported across markets only if it is a Survivor on at least 3 of the 4 pairs.**
A Survivor on one or two pairs is reported as a single-pair result, not as support. All 96 results are published whatever they show, in a table per strategy and in a matrix per pair.

## Before anything is run
The engine is a generalisation of the ES engine (costs per instrument, pips). Before any FX run it must reproduce, trade for trade (count and net), the published ES result of every variant listed
above, and reproduce the published control percentiles of the ES control audits (within calibration noise). Only then is it pointed at FX.

## Reading the result
"No proven edge" means a statistically convincing edge was not demonstrated; it is not proof that none exists. Spot FX results from one broker's demo history do not carry over to futures, or to a different broker's fills.
