Markets › FX · EUR/USD spot (1-hour bars)

Golden Cross Backtest: 1H Bars on EUR/USD

The 50/200 moving-average cross on 1-hour EUR/USD bars, around the clock, with and without a stop and take profits. A test of whether the gold survivor travels.

EUR/USD spot · 1-hour bars, 24 hours · Protocol v1.0 plus the 8 Oct 2026 rules

Buried · No proven edge

The gold survivor did not travel. 12 tries on EUR/USD, 12 funerals.

BornRules, variants and gates frozen 8 Oct 2026 (ge_cross_spec.md), before any EUR/USD hourly average was computed
Died8 Oct 2026

Variants tried: 12 · Passed every gate: 0 · Holdout opened: yes (used before this test)

Short answer: no, not in this test. We ran the 1-hour golden cross that survived on gold, unchanged, on EUR/USD in 12 variants with and without a stop and targets, net of costs. None passed every gate and none beat the shifted-state control at the 95th percentile. The long-only no-stop rule made +19 R over 434 trades but -1,240 pips.How much costs took here, compared across all 54 of our tests →Did the same rules work on other markets? The cross-market scoreboard →

00The verdict in three lines

  • The 1-hour golden cross had one survivor, on gold (read that test): long only, no stop, no target. We ran the same rules, unchanged, on EUR/USD, a pair with no long-term drift, to see whether it travels: 12 variants (long only and long and short, each with no stop, a 1 R stop, targets at 1 R, 2 R and 3 R, and a third at each), with the rules, gates, costs and a matched shifted-state control fixed in a dated specification before any EUR/USD hourly average was computed.
  • None of the 12 passed. The survivor's rule made +19 R over 434 trades (-1,240 pips), with a development t-statistic of 1.09 against 2.5 needed and the 68.8th percentile against the shifted-state control. Nothing in the 12 reached the 95th percentile, and in the 2020 to 2026 holdout period all 12 results were negative.
  • So the gold result stands alone: one survivor on one market, and the same rule failed on ES and on EUR/USD. That fits a trend rule that paid on a market that trended, not a general edge. It is still one pair, one broker's demo history, carry not modelled and one stop size.

01What we tested

Exactly the rules of the 1-hour test on ES and gold: the 50-bar and 200-bar simple averages of the 1-hour closes; entries only on a cross, filled at the next 1-minute open; all 24 hours, positions held over weekends; no re-entry after a stop or a target until the next cross; 1 R = 1.5 times the 14-bar ATR at the signal bar; the stop wins a tie and a level gapped through fills at the open. Results are in R per trade after costs, with pips next to them. The 12 variants are long only (L) and long and short (LS) with six exit rules: N (no stop, no target), S (stop only), T1, T2, T3 (stop and one target) and T123 (a third at each target, the exact average of T1, T2 and T3). The specification, written before the run, is linked at the end.

02Data and costs

EUR/USD spot, IC Markets MT4 demo-server 1-minute bid history built into 141,042 hourly bars, 1 Jan 2004 to 28 Sep 2026; the first signal is possible on 13 Jan 2004. The averages crossed 869 times in 22.7 years. A demo-server download can contain interpolated bars in early years, and 2 weekdays have almost no data. Median R is 25.5 pips. Periods: development 2004 to 2012, validation 2013 to 2019, holdout 2020 to 2026. The holdout is not clean: this pair and these years were used in earlier tests.

Costs are the FX study's model, unchanged: 0.15 pip adverse on every fill plus 0.7 pip commission per round trip, about 1.0 pip, which is about 0.04 R a trade. Our account is a Standard account (no commission, wider spread); we kept the FX study's middle figure so the results are comparable. Costs are constant across years, which flatters 2004 to 2012, and carry (the overnight swap) is not modelled; the no-stop versions hold about 10 days a trade, so it could matter in either direction.

Engine check: the engine of the ES and gold test got an FX cost branch, and before the run gh_selftest.js passed again for all three markets, including hand-worked EUR/USD cases and an independent re-implementation that matched the engine trade by trade on the real EUR/USD data for all 12 variants (ge_selftest_result.txt). It also exposed a floating-point tie on bars where the two averages are mathematically equal; ties below 1e-10 are now exact ties. ES results were reproduced exactly and a few gold figures moved in the second decimal, with no verdict changed; this is logged in both specifications.

03Results: all 12 variants

Net R is the sum of the trades' results in R after costs; the profit factor and t-statistic use R too. The 95% range is the Wilson interval for the win rate.

VariantTradesNet after costsR per tradeNet pipsWinners (95% range)Profit factorHoldout* netVerdict
EURUSD GH-L-N434+19 R+0.04-1,240 pips153 of 434 (31% to 40%)1.02-41 RBuried
EURUSD GH-L-S434-9 R-0.02-1,281 pips64 of 434 (12% to 18%)0.98-13 RBuried
EURUSD GH-L-T1434-39 R-0.09-1,143 pips205 of 434 (43% to 52%)0.83-21 RBuried
EURUSD GH-L-T2434-29 R-0.07-1,296 pips141 of 434 (28% to 37%)0.90-15 RBuried
EURUSD GH-L-T3434+5 R+0.01-230 pips115 of 434 (23% to 31%)1.01-9 RBuried
EURUSD GH-L-T123434-21 R-0.05-890 pips141 of 434 (28% to 37%)0.92-15 RBuried
EURUSD GH-LS-N869+3 R+0.00-1,196 pips306 of 869 (32% to 38%)1.00-64 RBuried
EURUSD GH-LS-S869+68 R+0.08+1,818 pips134 of 869 (13% to 18%)1.09-32 RBuried
EURUSD GH-LS-T1869-34 R-0.04-1,095 pips432 of 869 (46% to 53%)0.92-26 RBuried
EURUSD GH-LS-T2869-11 R-0.01-697 pips299 of 869 (31% to 38%)0.98-30 RBuried
EURUSD GH-LS-T3869+23 R+0.03+946 pips235 of 869 (24% to 30%)1.04-30 RBuried
EURUSD GH-LS-T123869-7 R-0.01-282 pips300 of 869 (31% to 38%)0.99-29 RBuried
-0100200520092013201720212025validationholdout*EURUSD GH-L-NEURUSD GH-LS-NEURUSD GH-LS-S

Cumulative net R by month for long only with no stop (the rule that passed every gate on gold before a data check made it Inconclusive), long and short with no stop, and long and short with only a stop. * Holdout already used before this test. PF = profit factor.

The unit matters. 3 variants (EURUSD GH-L-N, EURUSD GH-L-T3, EURUSD GH-LS-N) are positive in R and negative in pips: R weights each trade by the volatility at entry, so quiet-market trades count for more. With a result this close to zero, neither unit tells you much.

04With and without a stop and targets

Long only on the left, long and short on the right. “Stop / target / cross” counts how the long-only trades ended (for T123 each third counts as one exit). The last column is the average gross result per trade in R before costs, then the average cost per trade in R.

Exit ruleLong only, net RWinnersHow the trades endedLong and short, net RWinnersGross / cost per trade (long only)
N: no stop, no target+18.9 R35%stop 0 · target 0 · cross 434+3.0 R35%+0.09 R / 0.04
S: stop 1 R only-9.0 R15%stop 364 · target 0 · cross 70+67.6 R15%+0.02 R / 0.04
T1: stop 1 R, target 1 R-39.0 R47%stop 224 · target 202 · cross 8-34.1 R50%-0.05 R / 0.04
T2: stop 1 R, target 2 R-29.3 R32%stop 288 · target 138 · cross 8-10.8 R34%-0.03 R / 0.04
T3: stop 1 R, target 3 R+4.6 R26%stop 314 · target 112 · cross 8+23.3 R27%+0.05 R / 0.04
T123: a third at 1 R, 2 R and 3 R-21.2 R32%stop 826 · target 452 · cross 24-7.2 R35%-0.01 R / 0.04

No exit rule produced a variant that passed every gate. The 1 R and 2 R targets lost money in both position modes; the best single result was long and short with only a 1 R stop (+68 R, +1,818 pips), which still failed the development t-statistic (1.20) and the holdout (-32 R). 4 of the 12 variants were positive before costs and not after (cause “Costs” below). On gold the 1 R stop cut the survivor's profit from +646 R to +88 R and its largest open loss; EUR/USD gave no such result to compare.

05Is it the cross or the market?

The benchmark is a circularly shifted state-series control, not a random-entry test. The real series of up and down episodes of the two averages (the state) is shifted by a random offset of at least 5% of its length, so the same episodes fall on other dates; the real prices, the same entries, exits and costs are applied, and the ATR-based R (and every stop and target distance) is recomputed at the shifted signal time from the real prices. This is done 500 times with fixed seeds. The bar is the 95th percentile of the average net R per trade.

VariantTradesReal average per tradeControl medianControl 5th to 95thPercentile (95 needed)
EURUSD GH-L-N434+0.04 R-0.08 R-0.45 R to +0.32 R68.8
EURUSD GH-L-S434-0.02 R-0.07 R-0.25 R to +0.15 R64.8
EURUSD GH-L-T1434-0.09 R-0.04 R-0.12 R to +0.02 R14.2
EURUSD GH-L-T2434-0.07 R-0.05 R-0.15 R to +0.05 R41.0
EURUSD GH-L-T3434+0.01 R-0.06 R-0.18 R to +0.06 R80.8
EURUSD GH-L-T123434-0.05 R-0.05 R-0.14 R to +0.04 R51.8
EURUSD GH-LS-N8690.00 R-0.05 R-0.43 R to +0.32 R60.6
EURUSD GH-LS-S869+0.08 R-0.05 R-0.19 R to +0.11 R89.4
EURUSD GH-LS-T1869-0.04 R-0.05 R-0.10 R to +0.01 R56.8
EURUSD GH-LS-T2869-0.01 R-0.05 R-0.13 R to +0.02 R80.6
EURUSD GH-LS-T3869+0.03 R-0.06 R-0.15 R to +0.03 R93.2
EURUSD GH-LS-T123869-0.01 R-0.05 R-0.12 R to +0.02 R84.8

Nothing reached the bar; the highest was EURUSD GH-LS-T3 at percentile 93.2. The no-stop long-only rule that cleared it on gold at the 99.4th percentile reached only the 68.8th here.

06Did the gold result travel?

Market, rule GH-L-NTradesNet after costsDevelopment tPercentile against the shifted-state controlVerdict
Gold, 1 hour (the survivor)387+646 R2.6599.4Survivor
ES futures, 1 hour133+24 R-0.0318.4Buried
EUR/USD, 1 hour434+19 R1.0968.8Buried

The same rule, unchanged, was a Survivor on gold and Buried on ES and on EUR/USD. We set no cross-market bar for this single pair (the FX study's rule needs a pass on three of four pairs); the question was whether the survivor itself survives, and it did not.

07The gates

VariantTrades1. PF ≥ 1.2 in validation2. ≥ 50 trades in each period3. t ≥ 2.5 on development4. Above the 95th percentile of the shifted-state control5. Positive without the 10 best trades6. Holdout net positive (already used)
EURUSD GH-L-N434failpassfailfailfailfail
EURUSD GH-L-S434failpassfailfailfailfail
EURUSD GH-L-T1434failpassfailfailfailfail
EURUSD GH-L-T2434failpassfailfailfailfail
EURUSD GH-L-T3434failpassfailfailfailfail
EURUSD GH-L-T123434failpassfailfailfailfail
EURUSD GH-LS-N869failpassfailfailfailfail
EURUSD GH-LS-S869failpassfailfailfailfail
EURUSD GH-LS-T1869failpassfailfailfailfail
EURUSD GH-LS-T2869passpassfailfailfailfail
EURUSD GH-LS-T3869failpassfailfailfailfail
EURUSD GH-LS-T123869failpassfailfailfailfail

All 12 variants have at least 30 trades, so the sample-size rule never applied. Gate 3 (development t-statistic of at least 2.5) is the wall again: no variant passed it.

08Verdict by variant

VariantCauseGates failedVerdict
EURUSD GH-L-NNo proven edge1, 3, 4, 5, 6Buried
EURUSD GH-L-SCosts1, 3, 4, 5, 6Buried
EURUSD GH-L-T1No proven edge1, 3, 4, 5, 6Buried
EURUSD GH-L-T2No proven edge1, 3, 4, 5, 6Buried
EURUSD GH-L-T3No proven edge1, 3, 4, 5, 6Buried
EURUSD GH-L-T123No proven edge1, 3, 4, 5, 6Buried
EURUSD GH-LS-NNo proven edge1, 3, 4, 5, 6Buried
EURUSD GH-LS-SNo proven edge1, 3, 4, 5, 6Buried
EURUSD GH-LS-T1Costs1, 3, 4, 5, 6Buried
EURUSD GH-LS-T2Costs3, 4, 5, 6Buried
EURUSD GH-LS-T3No proven edge1, 3, 4, 5, 6Buried
EURUSD GH-LS-T123Costs1, 3, 4, 5, 6Buried

What this test covers, exactly: the 50/200 simple-average cross on 1-hour EUR/USD bars (22.7 years, one broker's demo history), around the clock, positions held over weekends, R fixed at 1.5 ATR(14), costs of about 1 pip a round trip, no carry. “No proven edge” means a convincing edge was not demonstrated; it is not proof that none exists.

What we did not test: other pairs, other futures, other averages or stop sizes, carry, a break-even move after TP1, and live trading.

TWhat this shows, and what to take into your own tests

What the results show

  • None of the 12 variants passed. All failed the development t-statistic (the best was 1.20, 2.5 needed) and none beat the shifted-state control at the 95th percentile (the best was percentile 93.2).
  • The rule that survived on gold, long only with no stop and no target, made +19 R over 434 trades on EUR/USD, with a profit factor of 1.02 and the 68.8th percentile against the shifted-state control. It lost 41 R in the 2020 to 2026 holdout.
  • No stop or target version passed. The best result, long and short with only a 1 R stop, made +68 R (+1,818 pips) and lost 32 R in the holdout.
  • The sign depends on the unit: 3 variants were positive in R and negative in pips, including the no-stop long-only rule (+19 R but -1,240 pips).

What remains unknown

  • Other pairs, other futures and other timeframes. Only EUR/USD was run.
  • Carry: a position held for days earns or pays the overnight swap, which we did not model.
  • The real spread and commission of a Standard account; we used the FX study's model of about 1 pip a round trip.
  • Other stop sizes. R was fixed at 1.5 ATR(14) in advance; another size would be a new variant.

Why the gold result did not travel

On gold the rule earned its money from a few long trend trades in a market that rose about tenfold: the shifted-state control, which moves the same long episodes to other dates, earned +0.98 R per trade there. EUR/USD ended the test 1,387 pips lower than it started (1.2755 to 1.13685) and has no such drift, so the same rule made an average gross +0.09 R per trade against a cost of 0.04 R, which is within the noise (434 trades, development t-statistic 1.09). The gold result stands alone: one survivor on one market out of three tested.

What you can apply to your own tests

  • Test a result on a market with a different character before you trust it; a trend rule that works where the market trends can fail where it does not.
  • Declare the transfer test before you run it, and keep the pass bar the same.
  • Check the sign of a result in more than one unit. R, pips and dollars can disagree.
  • Keep the stops and targets question separate from the entry question; here neither helped.

A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.

FAQCommon questions

Does the golden cross work on EUR/USD?

Not in our test. On 1-hour bars from 2004 to 2026, none of 12 variants passed every gate. The best development t-statistic was 1.20 against 2.5 needed, the best result against the shifted-state control was percentile 93.2 against 95 needed, and all 12 results were negative in the 2020 to 2026 holdout period.

Does the gold golden cross result work on forex?

It did not travel. The same rule that passed every gate on gold, long only with no stop and no target, made +19 R on EUR/USD with a profit factor of 1.02 and the 68.8th percentile against the shifted-state control. The same rule also failed on ES.

Do a stop loss and take profit help a golden cross on forex?

In our test, no version passed. Long only, a 1 R stop with targets at 1 R, 2 R and 3 R made -39 R, -29 R and +5 R, and a stop alone made -9 R. The best of all 12 variants, GH-LS-S, made +68 R and still failed the development t-statistic and the holdout.

How was the EUR/USD golden cross tested?

On EUR/USD 1-hour bars, around the clock, with rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Costs were about 1 pip a round trip and carry was not modelled. Read the protocol.

09Check our arithmetic

Frozen specificationRules, variants, costs, gates, control. Dated before any EUR/USD hourly average was computed; it also logs the numerical note.
ge_cross_spec.md · gh_cross_spec.md
CodeEngine, runner, self-test and helpers. The run needs your own MT4 history folder.
gh_lib.js · gh_run.js · gh_selftest.js · ma_lib.js · fx_data.js · control_audit_lib.js · hourly_lib.js · rsi2_protocol.js
ResultsSelf-test result, the console output of the run and all numbers as one file.
ge_selftest_result.txt · gh_results.txt · gh_summary.json
Trade log (CSV)Every trade of every variant, net of costs, with R and the exit reason (the variant in the first column).
EUR/USD

Code provenance: our own code, written from the standard definitions of the averages and of the ATR. No third-party source code is used or published.

10Corrections

14 Oct 2026, display only: values that round to zero were shown with a sign (“-0.00 R” or “+0.00 R”); they are now shown as 0.00 R. No number changed. 8 Oct 2026, after a data check of the gold history, no result on this page changed: the gold rule this test repeats is no longer called a survivor, because its verdict became Inconclusive (data quality). 8 Oct 2026, after outside reviews, no result changed: (1) the EUR/USD trade-log export had R_points at two decimals, so 403 of the 434 GH-L-N trades showed 0.00 (an R of 25 pips is 0.0025 in price), and prices were exported at two decimals; the exports were regenerated with six decimals for prices and eight for R, every trade is checked to keep a positive R distance, and the results did not change; (2) the benchmark is described as a circularly shifted state-series control with R recomputed at the shifted signal time; (3) the stop and target wording no longer makes blanket claims. 22 Oct 2026, navigation: added a link to the new guide comparing trading costs across all our tests. No result changed. 22 Oct 2026, navigation: added a link to the new cross-market scoreboard, which includes this test. No result changed. 22 Oct 2026, navigation: added a link to the new guide comparing trend following and mean reversion across all our tests. No result changed. 22 Oct 2026, navigation: added a link to the new guide comparing versions with and without a stop loss across our tests. No result changed.

+More tests and guides