Markets › Futures & Metals · ES futures + XAUUSD spot (1-hour bars)
Golden Cross Backtest: 1H Bars on S&P 500 Futures & Gold
The 50/200 moving-average cross on 1-hour bars, around the clock, with and without a stop and take profits. ES futures and spot gold.
Inconclusive · Data qualityPassed every gate on gold. Then the data check found thin ground.
Variants tried: 24 · Passed every gate in the run: 1, verdict changed to Inconclusive after a data check · Holdout opened: yes (used before this test)
Short answer: one variant passed every gate, on gold only, and a later data check changed its verdict to Inconclusive. We backtested the 50/200 golden cross on 1-hour bars, around the clock, on ES futures and spot gold in 24 variants with and without a stop and targets. Gold, long only, no stop and no target passed every gate (387 trades, +646 R). All 12 ES variants and every variant with a stop or a target failed. The pass is narrow: charging 3% a year of financing takes the development t-statistic below the bar, and it has not been confirmed on other data.How much costs took here, compared across all 54 of our tests →Did the same rules work on other markets? The cross-market scoreboard →Compare all 14 gold strategies we tested →
00The verdict in three lines
Verdict changed on 8 Oct 2026: Survivor to Inconclusive (data quality). A later audit of the gold data found that 2004 to 2012, the development period, is thin and has 2,099 suspect gaps. Without the 26 trades whose signal or fill touches one of them, the development t-statistic is 2.29, below the 2.5 needed; removing every trade open across a gap gives -3.57. Our data rule says a verdict that changes this way becomes Inconclusive. The numbers below are those of the original run; the data check section has the details, and the forward test continues as the deciding evidence.
- The same 50/200 golden cross as our daily test, on 1-hour bars, trading all 24 hours and holding over weekends, with and without a stop and take profits (1 R stop; targets at 1 R, 2 R, 3 R; and a third at each). We tested 24 variants, 12 on each of ES futures and spot gold, with the rules, gates, costs and a matched shifted-state control fixed in a dated specification before any hourly average was computed.
- One of the 24 passed every gate: gold, long only, no stop and no target (387 trades, +646 R, +$2,864 per ounce). All 12 ES variants and every variant with a stop or a target on either market failed. The same long-only rule on ES made +24 R over 133 trades and did not beat the shifted-state control (18.4th percentile).
- Read this result as a hypothesis, not as something to trade. The margin is narrow: the development t-statistic is 2.65 in the unit fixed in advance (R, 2.5 needed), 2.37 in percent, 1.90 in dollars and 2.38 if 3% a year of financing is charged (the baseline charges none). It is one of 24 results, on one market that rose about tenfold, the shifted-state control, which moves the same long episodes to other dates, averaged +0.98 R per trade against +1.67 R for the real crosses (a difference of +0.69 R), and the holdout was already used. It did not beat buying and holding. A follow-up on EUR/USD, with the same rules unchanged, did not reproduce it (read the EUR/USD test).
01What we tested
The rule is the one in the ThinkMarkets guide and in our daily test: entries only on a cross of the 50-bar and 200-bar simple averages of the closes (a golden cross opens a long; in the long-and-short versions a death cross opens a short), filled at the next 1-minute open. There is no time-of-day or session filter: every bar of the 24-hour session counts, and positions are held over weekends. After a stop or a target the position stays flat until the next cross. Each version was run long only (L) and long and short (LS), with six exit rules:
| Exit rule | What it does |
|---|---|
| N | No stop and no target. Exit on the opposite cross. |
| S | Stop 1 R. Exit on the stop or the opposite cross. |
| T1, T2, T3 | Stop 1 R and one target at 1 R, 2 R or 3 R. Exit on the stop, the target or the opposite cross. |
| T123 | Stop 1 R; a third of the position at 1 R, a third at 2 R, a third at 3 R; any third not filled by a target closes at the stop or on the opposite cross. No move to break even. It is the exact average of T1, T2 and T3 on the same entries. |
What is 1 R? 1 R is the distance from the fill to the stop. A moving-average cross has no natural stop, so we fixed R in advance as 1.5 times the 14-bar ATR of the 1-hour bars at the signal bar (the median is 17.3 points on ES and $5.20 on gold), the same 1.5 ATR stop used in our earlier stop-and-target variants. Another size would be a different variant. Results are in R per trade after costs, so the versions with and without a stop are comparable; R is defined for the no-stop version too, it is just not used for an order. Targets and stops use the same execution rules as our other hourly tests: checked minute by minute, the stop wins a tie, a level that price gaps through fills at the open, and slippage applies to every fill.
The data and the costs are the daily test's; the rule is a much faster version of it: the 200-bar average spans about 200 hours (roughly nine days) instead of 200 days. The ThinkMarkets article says the pattern can be used on any timeframe; its numbers (14%, 79%, 73%) are about daily charts.
02Data and costs
ES: E-mini S&P 500 futures, back-adjusted continuous 1-minute history built into 39,787 hourly bars, 1 Jan 2020 to 25 Sep 2026. Gold: spot XAUUSD, 1-minute bid history from an IC Markets MT4 demo server, 129,857 hourly bars, 11 Jun 2004 to 7 Oct 2026. Hourly bars are built as in all our hourly tests (one bar per New York clock hour, bar time = close time). The first signal is possible on 14 Jan 2020 (ES) and 23 Jun 2004 (gold). The 50/200 averages crossed 266 times on ES (6.7 years) and 775 times on gold (22.3 years).
| Market | Development | Validation | Holdout (already used) |
|---|---|---|---|
| ES | 2020-01-01 to 2023-12-31 | 2024-01-01 to 2025-03-31 | 2025-04-01 to the end of the data |
| Gold | 2004-01-01 to 2012-12-31 | 2013-01-01 to 2019-12-31 | 2020-01-01 to the end of the data |
Trades belong to the period of their entry date. The holdout is not clean on either market: the same data appeared in earlier tests, including the daily golden cross. The gold history has holes (34 weekdays with almost no data, listed in the daily post); 2 of the survivor's trades touch one.
| Market | Cost per trade | Also charged |
|---|---|---|
| ES | $30.76: $5.76 commission plus one tick of slippage on each fill (stops and targets included). About 0.04 R a trade. | The same $30.76 for each quarterly roll a position is held through (open at 17:00 New York on the second Thursday of March, June, September, December). |
| Gold | $0.30 per ounce per round trip, no slippage line. About 0.07 R a trade on the survivor. | Overnight financing is not in the baseline: the broker's swap rates are not known. The sensitivity below charges 3% a year of the entry price for every calendar day held, an assumption, not a measured rate. |
| Gold variant | Net, baseline | Net with 3% a year financing | PF, baseline | PF with financing |
|---|---|---|---|---|
| GH-L-N | +646 R | +542 R | 1.91 | 1.73 |
| GH-L-S | +88 R | +54 R | 1.26 | 1.15 |
| GH-L-T1 | -18 R | -21 R | 0.91 | 0.90 |
| GH-L-T2 | +6 R | +1 R | 1.02 | 1.00 |
| GH-L-T3 | +37 R | +30 R | 1.13 | 1.10 |
| GH-L-T123 | +9 R | +3 R | 1.04 | 1.01 |
| GH-LS-N | +551 R | +372 R | 1.36 | 1.23 |
| GH-LS-S | +2 R | -56 R | 1.00 | 0.92 |
| GH-LS-T1 | -21 R | -27 R | 0.95 | 0.93 |
| GH-LS-T2 | -11 R | -21 R | 0.98 | 0.96 |
| GH-LS-T3 | +18 R | +3 R | 1.03 | 1.01 |
| GH-LS-T123 | -5 R | -15 R | 0.99 | 0.97 |
The survivor stays positive with financing (+542 R, profit factor 1.73) because it holds about 12 days a trade and is in the market 56% of the time, but its development t-statistic falls to 2.38, below the 2.5 bar (section 06). The verdicts use the baseline, which charges no financing because the broker's swap rates are not known.
Engine check: before the run, gh_selftest.js checked hand-worked examples (stop, target, a stop and a target in the same minute, gaps through a stop and a target, exits on the cross, reversals, no re-entry after a stop, the first-state rule, rolls, gold costs, T123 as the average of T1, T2 and T3) and compared the engine trade by trade with an independent re-implementation on the real data for all 24 variants. It printed pass or fail only, no result. Every check passed (gh_selftest_result.txt). It also found that on two ES bars the two averages are exactly equal; the control's state definition was corrected to flip on the same bar as the cross rule, before the run (logged in the specification).
03Results: all 24 variants
Net R is the sum of the trades' results in R after costs; the profit factor and the t-statistic use R too. Dollars are per contract (ES) or per ounce (gold), with the same costs. The 95% range is the Wilson interval for the win rate. The gates, the verdicts and the matched control come further down.
ES futures
| Variant | Trades | Net after costs | R per trade | $ per contract | Winners (95% range) | Profit factor | Holdout* net | Verdict |
|---|---|---|---|---|---|---|---|---|
| ES GH-L-N | 133 | +24 R | +0.18 | +$49,752 | 53 of 133 (32% to 48%) | 1.08 | +20 R | Buried |
| ES GH-L-S | 133 | +76 R | +0.57 | +$72,711 | 27 of 133 (14% to 28%) | 1.72 | -2 R | Buried |
| ES GH-L-T1 | 133 | +10 R | +0.08 | +$17,945 | 72 of 133 (46% to 62%) | 1.17 | +3 R | Buried |
| ES GH-L-T2 | 133 | +22 R | +0.17 | +$30,880 | 52 of 133 (31% to 48%) | 1.27 | +4 R | Buried |
| ES GH-L-T3 | 133 | +36 R | +0.27 | +$40,346 | 43 of 133 (25% to 41%) | 1.40 | +7 R | Buried |
| ES GH-L-T123 | 133 | +23 R | +0.17 | +$29,724 | 52 of 133 (31% to 48%) | 1.34 | +5 R | Buried |
| ES GH-LS-N | 266 | -75 R | -0.28 | -$87,413 | 82 of 266 (26% to 37%) | 0.88 | -27 R | Buried |
| ES GH-LS-S | 266 | +95 R | +0.36 | +$58,728 | 40 of 266 (11% to 20%) | 1.42 | -26 R | Buried |
| ES GH-LS-T1 | 266 | +19 R | +0.07 | +$28,238 | 144 of 266 (48% to 60%) | 1.16 | +9 R | Buried |
| ES GH-LS-T2 | 266 | +21 R | +0.08 | +$31,321 | 97 of 266 (31% to 42%) | 1.13 | +14 R | Buried |
| ES GH-LS-T3 | 266 | +29 R | +0.11 | +$30,514 | 76 of 266 (23% to 34%) | 1.16 | +21 R | Buried |
| ES GH-LS-T123 | 266 | +23 R | +0.09 | +$30,024 | 97 of 266 (31% to 42%) | 1.17 | +15 R | Buried |
ES: cumulative net R by month for the long-only no-stop, long-and-short no-stop and long-only stop-only versions.
Spot gold
| Variant | Trades | Net after costs | R per trade | $ per ounce | Winners (95% range) | Profit factor | Holdout* net | Verdict |
|---|---|---|---|---|---|---|---|---|
| Gold GH-L-N | 387 | +646 R | +1.67 | +$2,864 | 157 of 387 (36% to 46%) | 1.91 | +212 R | Inconclusive (data) |
| Gold GH-L-S | 387 | +88 R | +0.23 | +$192 | 61 of 387 (12% to 20%) | 1.26 | +18 R | Buried |
| Gold GH-L-T1 | 387 | -18 R | -0.05 | -$51 | 198 of 387 (46% to 56%) | 0.91 | -2 R | Buried |
| Gold GH-L-T2 | 387 | +6 R | +0.02 | +$243 | 142 of 387 (32% to 42%) | 1.02 | +8 R | Buried |
| Gold GH-L-T3 | 387 | +37 R | +0.10 | +$278 | 116 of 387 (26% to 35%) | 1.13 | +10 R | Buried |
| Gold GH-L-T123 | 387 | +9 R | +0.02 | +$157 | 142 of 387 (32% to 42%) | 1.04 | +5 R | Buried |
| Gold GH-LS-N | 775 | +551 R | +0.71 | +$2,011 | 285 of 775 (33% to 40%) | 1.36 | +153 R | Buried |
| Gold GH-LS-S | 775 | +2 R | +0.00 | -$801 | 112 of 775 (12% to 17%) | 1.00 | -2 R | Buried |
| Gold GH-LS-T1 | 775 | -21 R | -0.03 | -$9 | 404 of 775 (49% to 56%) | 0.95 | -9 R | Buried |
| Gold GH-LS-T2 | 775 | -11 R | -0.01 | +$436 | 278 of 775 (33% to 39%) | 0.98 | +15 R | Buried |
| Gold GH-LS-T3 | 775 | +18 R | +0.02 | +$315 | 220 of 775 (25% to 32%) | 1.03 | -5 R | Buried |
| Gold GH-LS-T123 | 775 | -5 R | -0.01 | +$248 | 279 of 775 (33% to 39%) | 0.99 | +0 R | Buried |
Gold: cumulative net R by month for the same three versions. * Holdout already used before this test. PF = profit factor.
04With and without a stop and targets
Long only on the left, long and short on the right. Net R is rounded to one decimal; “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.
ES futures
| Exit rule | Long only, net R | Winners | How the trades ended | Long and short, net R | Winners | Gross / cost per trade (long only) |
|---|---|---|---|---|---|---|
| N: no stop, no target | +23.6 R | 40% | stop 0 · target 0 · cross 132 · open 1 | -75.0 R | 31% | +0.22 R / 0.04 |
| S: stop 1 R only | +75.6 R | 20% | stop 102 · target 0 · cross 31 | +94.9 R | 15% | +0.61 R / 0.04 |
| T1: stop 1 R, target 1 R | +10.2 R | 54% | stop 58 · target 72 · cross 3 | +19.2 R | 54% | +0.11 R / 0.04 |
| T2: stop 1 R, target 2 R | +22.2 R | 39% | stop 78 · target 52 · cross 3 | +21.3 R | 36% | +0.20 R / 0.04 |
| T3: stop 1 R, target 3 R | +35.8 R | 32% | stop 87 · target 42 · cross 4 | +29.5 R | 29% | +0.31 R / 0.04 |
| T123: a third at 1 R, 2 R and 3 R | +22.7 R | 39% | stop 223 · target 166 · cross 10 | +23.3 R | 36% | +0.21 R / 0.04 |
Spot gold
| Exit rule | Long only, net R | Winners | How the trades ended | Long and short, net R | Winners | Gross / cost per trade (long only) |
|---|---|---|---|---|---|---|
| N: no stop, no target | +646.2 R | 41% | stop 0 · target 0 · cross 387 | +550.9 R | 37% | +1.74 R / 0.07 |
| S: stop 1 R only | +88.2 R | 16% | stop 316 · target 0 · cross 71 | +2.0 R | 14% | +0.30 R / 0.07 |
| T1: stop 1 R, target 1 R | -17.8 R | 51% | stop 182 · target 193 · cross 12 | -20.6 R | 52% | +0.03 R / 0.07 |
| T2: stop 1 R, target 2 R | +6.2 R | 37% | stop 238 · target 137 · cross 12 | -11.2 R | 36% | +0.09 R / 0.07 |
| T3: stop 1 R, target 3 R | +37.4 R | 30% | stop 264 · target 110 · cross 13 | +17.7 R | 28% | +0.17 R / 0.07 |
| T123: a third at 1 R, 2 R and 3 R | +8.6 R | 37% | stop 684 · target 440 · cross 37 | -4.7 R | 36% | +0.09 R / 0.07 |
On gold the 1 R stop cut the profit and also cut the largest open loss. The same long entries made +646 R with no stop and +88 R with a 1 R stop: 316 of 387 trades ended at the stop and 16% won, against 41% with no stop. The stop reduced the worst loss inside a trade (from 12.1 R to 3.8 R) and the worst drawdown including open losses in dollars (from $1,320 to $610 an ounce, marked at every hourly close), while the closed-trade drawdown in R was about the same (-56.0 R against -53.3 R). The single targets (T1, T2, T3) win more often but cap the winners; the 1 R target made -18 R (gross +9.7 R, so costs of 0.07 R a trade turned it into a loss). 4 of the 24 variants were positive before costs and not after (cause “Costs” below). None of the tested stop and target configurations passed every gate.
On ES the stop improved the result. The long-only stop-only version made +76 R against +24 R with no stop, with a smaller closed-trade drawdown (-19.6 R against -64.2 R) and a smaller worst drawdown including open losses ($24,095 against $57,454 per contract), and beat 98.4% of the shifted-state control runs. It still failed the development t-statistic (1.25), the holdout (-2 R) and the ten-best-trades test.
The three targets are really one test of how much of a move you leave on the table: with a 1 R stop, a 3 R target made +36 R on ES and +37 R on gold, a 1 R target +10 R and -18 R. The thirds version (T123) is their average: +23 R and +9 R long only. Without a stop the trade is free to run until the death cross, and on gold that is where the money was.
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 entry, stop, target and exit rules and the same costs are applied, and the ATR-based R (and with it 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.
| Variant | Trades | Real average per trade | Control median | Control 5th to 95th | Percentile (95 needed) |
|---|---|---|---|---|---|
| ES GH-L-N | 133 | +0.18 R | +0.62 R | -0.14 R to +1.33 R | 18.4 |
| ES GH-L-S | 133 | +0.57 R | +0.04 R | -0.29 R to +0.44 R | 98.4 |
| ES GH-L-T1 | 133 | +0.08 R | -0.01 R | -0.15 R to +0.14 R | 86.6 |
| ES GH-L-T2 | 133 | +0.17 R | 0.00 R | -0.19 R to +0.18 R | 92.4 |
| ES GH-L-T3 | 133 | +0.27 R | +0.01 R | -0.20 R to +0.23 R | 97.8 |
| ES GH-L-T123 | 133 | +0.17 R | 0.00 R | -0.17 R to +0.15 R | 96.4 |
| ES GH-LS-N | 266 | -0.28 R | +0.04 R | -0.65 R to +0.75 R | 22.6 |
| ES GH-LS-S | 266 | +0.36 R | -0.06 R | -0.30 R to +0.26 R | 98.6 |
| ES GH-LS-T1 | 266 | +0.07 R | -0.03 R | -0.15 R to +0.06 R | 97.2 |
| ES GH-LS-T2 | 266 | +0.08 R | -0.04 R | -0.18 R to +0.08 R | 94.2 |
| ES GH-LS-T3 | 266 | +0.11 R | -0.03 R | -0.20 R to +0.11 R | 94.8 |
| ES GH-LS-T123 | 266 | +0.09 R | -0.03 R | -0.16 R to +0.08 R | 97.0 |
| Gold GH-L-N | 387 | +1.67 R | +0.98 R | +0.53 R to +1.43 R | 99.4 |
| Gold GH-L-S | 387 | +0.23 R | +0.22 R | -0.03 R to +0.57 R | 52.8 |
| Gold GH-L-T1 | 387 | -0.05 R | -0.07 R | -0.15 R to +0.02 R | 63.4 |
| Gold GH-L-T2 | 387 | +0.02 R | -0.04 R | -0.16 R to +0.07 R | 76.2 |
| Gold GH-L-T3 | 387 | +0.10 R | 0.00 R | -0.14 R to +0.14 R | 88.8 |
| Gold GH-L-T123 | 387 | +0.02 R | -0.03 R | -0.14 R to +0.07 R | 80.2 |
| Gold GH-LS-N | 775 | +0.71 R | +0.03 R | -0.38 R to +0.47 R | 99.8 |
| Gold GH-LS-S | 775 | 0.00 R | +0.05 R | -0.12 R to +0.28 R | 31.6 |
| Gold GH-LS-T1 | 775 | -0.03 R | -0.07 R | -0.13 R to -0.01 R | 88.2 |
| Gold GH-LS-T2 | 775 | -0.01 R | -0.06 R | -0.14 R to +0.02 R | 83.2 |
| Gold GH-LS-T3 | 775 | +0.02 R | -0.04 R | -0.14 R to +0.05 R | 88.0 |
| Gold GH-LS-T123 | 775 | -0.01 R | -0.05 R | -0.13 R to +0.01 R | 89.6 |
The survivor reached the 99.4th percentile. Gold rose about tenfold over the test, and the shifted-state control, which moves the same long episodes to other dates, still made +0.98 R per trade on average (5th to 95th: +0.53 R to +1.43 R) against +1.67 R for the real crosses. The observed difference is about +0.69 R per trade; we do not attribute it to a cause. The 8 results at or above the 95th percentile (ES GH-L-S, ES GH-L-T3, ES GH-L-T123, ES GH-LS-S, ES GH-LS-T1, ES GH-LS-T123, Gold GH-L-N, Gold GH-LS-N) are not independent: within a market and a position mode they share every entry.
06How hard is the survivor to break?
These checks were added after the first run and change no gate and no verdict; they use the published trade log of Gold GH-L-N.
The same 387 trades in other units
| Unit | Development t | Validation PF | Holdout* PF | All trades, t | All trades, PF |
|---|---|---|---|---|---|
| R (the unit fixed in advance) | 2.65 | 1.58 | 1.94 | 3.57 | 1.91 |
| Percent of the entry price | 2.37 | 1.50 | 1.67 | 3.24 | 1.71 |
| Dollars per ounce | 1.90 | 1.39 | 1.67 | 2.35 | 1.61 |
It clears the 2.5 development bar only in R, the unit fixed in advance, and not in percent or dollars. Across all trades the t-statistic is above 2 in R, in percent and in dollars. That describes the historical result; it is not independent confirmation of an edge, and the pass on the development gate is narrow.
With a higher cost per trade
| Cost per round trip | Net R, all trades | Profit factor | Development t |
|---|---|---|---|
| $0.30 an ounce (baseline) | +646 R | 1.91 | 2.65 |
| $0.60 an ounce | +619 R | 1.85 | 2.53 |
| $1.00 an ounce | +582 R | 1.78 | 2.37 |
| $2.00 an ounce | +490 R | 1.61 | 1.96 |
| $4.00 an ounce | +307 R | 1.33 | 1.15 |
Spreads on gold were wider in 2004 to 2012 than our flat $0.30 allows for. The result stays positive up to $4.00 an ounce a trade. The development t-statistic reaches 2.5 at an estimated $0.66 an ounce per round trip under this fixed-cost model (between $0.60 and $1.00 in the table): gate 3 passes below that cost and fails above it.
With financing charged
| Financing, a year of the entry price | Development t | Validation PF | Holdout* net R | All trades, net R | Percentile against the shifted-state control (same financing) | Gates failed |
|---|---|---|---|---|---|---|
| 0% (baseline) | 2.65 | 1.58 | +212 R | +646 R | 99.4 | none |
| 1% | 2.56 | 1.51 | +202 R | +611 R | 99.4 | none |
| 1.5% | 2.51 | 1.48 | +196 R | +594 R | 99.4 | none |
| 2% | 2.47 | 1.45 | +191 R | +577 R | 99.4 | 3 |
| 3% | 2.38 | 1.39 | +181 R | +542 R | 99.4 | 3 |
| 4% | 2.29 | 1.33 | +170 R | +507 R | 99.4 | 3 |
| 5% | 2.19 | 1.28 | +160 R | +472 R | 99.4 | 3 |
Gate 3 is passed at financing rates up to an estimated 1.65% a year under the financing model used (a flat annual rate charged on the entry price for every calendar day held) and the $0.30 baseline cost, computed from the published trade log, whose values are rounded. It passes at 1% and 1.5% and fails at 2% and above. The survivor holds a position for about 12 days a trade, so overnight swap matters. The other gates were re-assessed with the same financing applied to the shifted-state control runs (same seeds and shifts): at 3% a year gates 1, 2, 4, 5 and 6 still pass (control percentile 99.4; +147 R without the ten best trades) and gate 3 fails (t 2.38), so that scenario does not pass the complete protocol. Both statements are true and are kept apart: the baseline verdict stays Survivor, because the frozen rules charge no financing; with 3% a year the result stays profitable (+542 R, profit factor 1.73) but fails gate 3. Real swap on gold can be a charge or a credit and changed with interest rates over 22 years, so it has to be measured, not assumed: that is the first job of any forward test.
By calendar year
| Year (entry) | Trades | Net R | $ per ounce |
|---|---|---|---|
| 2004 | 10 | -0.8 R | +$2 |
| 2005 | 18 | +71.8 R | +$97 |
| 2006 | 11 | +67.6 R | +$153 |
| 2007 | 17 | +73.8 R | +$184 |
| 2008 | 23 | -13.0 R | -$116 |
| 2009 | 15 | +41.6 R | +$183 |
| 2010 | 18 | +27.8 R | +$110 |
| 2011 | 15 | +59.6 R | +$353 |
| 2012 | 22 | -20.5 R | -$122 |
| 2013 | 16 | -14.0 R | -$43 |
| 2014 | 16 | +23.5 R | +$147 |
| 2015 | 12 | -0.5 R | -$1 |
| 2016 | 17 | +42.6 R | +$147 |
| 2017 | 13 | +65.9 R | +$216 |
| 2018 | 19 | -30.1 R | -$110 |
| 2019 | 19 | +38.9 R | +$17 |
| 2020 | 20 | -4.8 R | -$80 |
| 2021 | 19 | +15.6 R | +$57 |
| 2022 | 17 | +29.2 R | +$144 |
| 2023 | 21 | +15.1 R | +$105 |
| 2024 | 18 | +57.8 R | +$358 |
| 2025 | 15 | +96.1 R | +$1,012 |
| 2026 | 16 | +3.1 R | +$51 |
16 of 23 calendar years were positive in R. The ten best trades (2025-08-24, 2006-03-27, 2019-05-27, 2011-07-06, 2025-01-02, 2012-08-19, 2007-08-24, 2005-11-10, 2024-02-20, 2022-02-07) made 63% of the net result; without them it is still +239 R, which is why it passes the ten-best-trades gate. That is the usual shape of a trend rule: many small losses and a few large winners (41% of trades won, average winner +8.64 R, average loser -3.09 R).
Against buying and holding
One ounce bought at the first possible fill (23 Jun 2004) and held to the end (393.8 to 4109.82) made +$3,716 with no costs, against +$2,864 for the survivor, which was in the market 56% of the time. Compounding each trade's return, the survivor grew 551% against 944% for buying and holding. The worst drawdown including open losses, marked at every hourly close, was $1,320 an ounce for the survivor and $1,600 for buying and holding. The cross captured most of gold's move with fewer days in the market and a somewhat smaller worst drawdown including open losses, but did not beat the plain position on the dollars.
07Against the daily version
The daily test of the same idea could not decide anything: it had too few trades. The hourly version trades far more often, and that is what lets the gates speak.
| Market and rule | Trades | Net after costs | Percentile against the shifted-state control | Verdict |
|---|---|---|---|---|
| ES, daily, GC-L-SMA | 3 | +$71,402 per contract | 3.6 | Inconclusive |
| ES, 1 hour, no stop (GH-L-N) | 133 | +$49,752 per contract | 18.4 | Buried |
| Gold, daily, GC-L-SMA | 15 | +$3,015 per ounce | 97.4 | Inconclusive |
| Gold, 1 hour, no stop (GH-L-N) | 387 | +$2,864 per ounce | 99.4 | Inconclusive (data) |
On gold the two timeframes point the same way: the long-only cross captured a large part of the move (+$3,015 daily, +$2,864 hourly per ounce) and beat the shifted-state control (97.4th and 99.4th percentile). On ES neither timeframe beat the shifted-state control. Because the hourly rule is a faster version of the same trend signal, the two are one idea seen at two speeds, not two independent confirmations.
08The gates
| Variant | Trades | 1. PF ≥ 1.2 in validation | 2. ≥ 50 trades in each period | 3. t ≥ 2.5 on development | 4. Above the 95th percentile of the shifted-state control | 5. Positive without the 10 best trades | 6. Holdout net positive (already used) |
|---|---|---|---|---|---|---|---|
| ES GH-L-N | 133 | fail | fail | fail | fail | fail | pass |
| ES GH-L-S | 133 | pass | fail | fail | pass | fail | fail |
| ES GH-L-T1 | 133 | fail | fail | fail | fail | pass | pass |
| ES GH-L-T2 | 133 | pass | fail | fail | fail | pass | pass |
| ES GH-L-T3 | 133 | pass | fail | fail | pass | pass | pass |
| ES GH-L-T123 | 133 | pass | fail | fail | pass | pass | pass |
| ES GH-LS-N | 266 | fail | pass | fail | fail | fail | fail |
| ES GH-LS-S | 266 | pass | pass | fail | pass | fail | fail |
| ES GH-LS-T1 | 266 | fail | pass | fail | pass | pass | pass |
| ES GH-LS-T2 | 266 | fail | pass | fail | fail | pass | pass |
| ES GH-LS-T3 | 266 | pass | pass | fail | fail | fail | pass |
| ES GH-LS-T123 | 266 | fail | pass | fail | pass | pass | pass |
| Gold GH-L-N | 387 | pass | pass | pass | pass | pass | pass |
| Gold GH-L-S | 387 | fail | pass | fail | fail | fail | pass |
| Gold GH-L-T1 | 387 | fail | pass | fail | fail | fail | fail |
| Gold GH-L-T2 | 387 | fail | pass | fail | fail | fail | pass |
| Gold GH-L-T3 | 387 | fail | pass | fail | fail | pass | pass |
| Gold GH-L-T123 | 387 | fail | pass | fail | fail | fail | pass |
| Gold GH-LS-N | 775 | pass | pass | fail | pass | pass | pass |
| Gold GH-LS-S | 775 | fail | pass | fail | fail | fail | fail |
| Gold GH-LS-T1 | 775 | fail | pass | fail | fail | fail | fail |
| Gold GH-LS-T2 | 775 | fail | pass | fail | fail | fail | pass |
| Gold GH-LS-T3 | 775 | fail | pass | fail | fail | fail | fail |
| Gold GH-LS-T123 | 775 | fail | pass | fail | fail | fail | pass |
All 24 variants have at least 30 trades, so the sample-size rule fixed in advance never applied and every verdict is Buried or Survivor. Gate 3 (development t-statistic of at least 2.5, raised from 2.0 because more than four variants were tried) was passed only by Gold GH-L-N. The closest other result was Gold GH-LS-N, which failed only gate 3 (t 1.36): adding the short side gave back 95 R of the long side's +646 R.
09Verdict by variant
| Variant | Cause | Gates failed | Verdict |
|---|---|---|---|
| ES GH-L-N | No proven edge | 1, 2, 3, 4, 5 | Buried |
| ES GH-L-S | No proven edge | 2, 3, 5, 6 | Buried |
| ES GH-L-T1 | No proven edge | 1, 2, 3, 4 | Buried |
| ES GH-L-T2 | No proven edge | 2, 3, 4 | Buried |
| ES GH-L-T3 | No proven edge | 2, 3 | Buried |
| ES GH-L-T123 | No proven edge | 2, 3 | Buried |
| ES GH-LS-N | No proven edge | 1, 3, 4, 5, 6 | Buried |
| ES GH-LS-S | No proven edge | 3, 5, 6 | Buried |
| ES GH-LS-T1 | No proven edge | 1, 3 | Buried |
| ES GH-LS-T2 | No proven edge | 1, 3, 4 | Buried |
| ES GH-LS-T3 | No proven edge | 3, 4, 5 | Buried |
| ES GH-LS-T123 | No proven edge | 1, 3 | Buried |
| Gold GH-L-N | Data quality | none | Inconclusive (data) |
| Gold GH-L-S | No proven edge | 1, 3, 4, 5 | Buried |
| Gold GH-L-T1 | Costs | 1, 3, 4, 5, 6 | Buried |
| Gold GH-L-T2 | No proven edge | 1, 3, 4, 5 | Buried |
| Gold GH-L-T3 | No proven edge | 1, 3, 4 | Buried |
| Gold GH-L-T123 | No proven edge | 1, 3, 4, 5 | Buried |
| Gold GH-LS-N | No proven edge | 3 | Buried |
| Gold GH-LS-S | No proven edge | 1, 3, 4, 5, 6 | Buried |
| Gold GH-LS-T1 | Costs | 1, 3, 4, 5, 6 | Buried |
| Gold GH-LS-T2 | Costs | 1, 3, 4, 5 | Buried |
| Gold GH-LS-T3 | No proven edge | 1, 3, 4, 5, 6 | Buried |
| Gold GH-LS-T123 | Costs | 1, 3, 4, 5 | Buried |
What this test covers, exactly: the 50/200 simple-average cross on 1-hour bars of ES futures (6.7 years, back-adjusted) and spot gold (22.3 years, broker data), around the clock, positions held over weekends, R fixed at 1.5 ATR(14), with the costs above. “No proven edge” means a convincing edge was not demonstrated; it is not proof that none exists. A “Survivor” cleared every gate; the protocol says it still needs forward testing.
What we did not test: other averages or stop sizes (we left them alone on purpose), a break-even move after TP1, exponential averages on this timeframe, other markets, other timeframes and live trading.
What would change our mind about the survivor: the same rule has already failed on ES and on EUR/USD, which weighs against it as a general edge. It would be dropped if it fails on a forward sample of gold, or if real gold costs and swaps erase it. What would strengthen it: the same rule, declared in advance, clearing the gates on a forward sample of gold. The forward-test protocol is published: Gold golden cross forward test: protocol and journal.
TWhat this shows, and what to take into your own tests
What the results show
- One of the 24 variants passed every gate: gold, long only, no stop, no target (387 trades, +646 R, +$2,864 per ounce, development t 2.65, 99.4th percentile against the shifted-state control, positive without its 10 best trades). The same rule on ES did not pass: +24 R over 133 trades, 18.4th percentile.
- No version with a stop, a target or both passed every gate, on either market. On gold the 1 R stop alone cut the same entries from +646 R to +88 R (16% of trades won against 41%) and also cut the worst drawdown including open losses from $1,320 to $610 an ounce. On ES the stop alone raised the result from +24 R to +76 R, but that version failed the t-statistic, the holdout and the ten-best-trades test.
- The pass is narrow. The development t-statistic is 2.65 in R (2.5 needed), 2.37 in percent of the entry price, 1.90 in dollars per ounce and 2.38 with 3% a year of financing. It is one of 24 results, on one market that rose about tenfold.
- Shorting the death cross lost money again: -95 R on gold and -99 R on ES. The long-and-short gold version with no stop failed only the development t-statistic (1.36).
What remains unknown
- Whether it works on other markets. ES with the same rule did not pass, and neither did EUR/USD in a follow-up test; other pairs and other futures were not tested.
- Live fills, real overnight financing on gold and the wider spreads of 2004 to 2012. Our cost is a flat $0.30 an ounce, and financing is shown only as a 3% a year sensitivity.
- Other stop sizes. R was fixed at 1.5 ATR(14) in advance; another size would be a new variant. A break-even move after TP1 was not tested either.
- Whether it holds on data we have not looked at: the holdout was used before this test.
Why one survivor is not yet an edge
It cleared the gates fixed in advance, and it should be read as a hypothesis for a clean test, not as a result to trade. The margin on the t-statistic is thin and depends on the unit and on financing. It is one of 24 variants here and was one of 180 on this site when it was tested. It sits on one market that rose about tenfold: the shifted-state control, which moves the same long episodes to other dates, earned +0.98 R per trade against +1.67 R for the real signal, a difference of +0.69 R; this comparison cannot say how much of the rest is drift and how much is timing. The same rule on ES did not work, and the holdout was already used.
What you can apply to your own tests
- Test the exit as well as the entry. In this test the choice of exit changed the result by hundreds of R on gold, and the stop traded profit for a smaller worst open loss.
- Re-run a result in other units (percent, dollars, R). A pass in one unit and a miss in another means a thin margin.
- Ask what a shifted-state control would have earned: on gold, the same long episodes moved to other dates also made money.
- Count your tries. One pass in 24 is weaker than it looks.
- Keep a market or a period back for the real test, and do not touch it until the rules are frozen.
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 the 1-hour chart?
Not proven. On gold only, and then not firmly: a later check of the thin 2004 to 2012 gold data made the verdict Inconclusive. Long only with no stop and no target, the 1-hour 50/200 cross passed all six gates (387 trades, +646 R, development t-statistic 2.65, 99.4th percentile against the shifted-state control). The same rule on ES did not pass (+24 R over 133 trades). The margin is narrow (3% a year of financing takes the development t-statistic below the bar) and the holdout had been used before.
Does a stop loss help a golden cross strategy?
It depends on the market, and none of the tested stop and target versions passed every gate. On gold a 1 R stop (1.5 times the hourly ATR) cut the same long entries from +646 R to +88 R and also cut the worst drawdown including open losses (from $1,320 to $610 an ounce). On ES it raised the result from +24 R to +76 R, but that version still failed the development t-statistic and the holdout.
Do take profit targets of 1R, 2R or 3R help a moving average crossover?
In our test they did not produce a passing version. With a 1 R stop, long only, targets at 1 R, 2 R and 3 R made -18 R, +6 R and +37 R on gold and +10 R, +22 R and +36 R on ES, against +646 R and +24 R with no stop and no target. None of the target versions passed.
Is shorting the death cross profitable?
Not in our test. In the long-and-short versions with no stop the short side made -95 R on gold and -99 R on ES after costs.
How was the 1-hour golden cross tested?
On ES futures and spot gold in 1-hour bars, 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. The stop distance (1 R = 1.5 ATR) was fixed in advance. Read the protocol.
10Check our arithmetic
gh_cross_spec.md
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
gh_selftest_result.txt · gh_results.txt · gh_summary.json
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.
11Data notes
Added 8 Oct 2026, after a data audit; no result, gate or verdict on this page changed. The ES 1-minute file used here (NinjaTrader, back-adjusted; hashes in data_manifest.md) has holes: 10 windows of missing data inside sessions or whole sessions, listed in data_holes.json (for example 19 to 23 October 2020, 6 to 7 November 2022, 27 to 28 November 2025). They are shared with the NQ and gold files from the same source, and we did not fill them. We removed every trade that was open across one of them and recomputed the gates and verdicts (the benchmark percentile is taken from the original run): 17 trade-hole overlaps summed over the 12 ES variants, no verdict changed. The full table is in hole_sensitivity.txt.
The prices are also back-adjusted: each contract roll shifts older prices by a fixed amount so that the series has no jump at the roll. Results in R and in dollars are right; older prices are not the prices that traded. The gold and EUR/USD series are MetaTrader 4 broker history: whole-day holes are listed in the daily test's specification and flagged in the trade lists, but gaps inside a day were not audited for them, and the hole test above was not run on them (see the data record).
12Data check of the gold result (8 Oct 2026)
After this test was published we audited the gold history before running another test on it. Two findings concern this page: the server clock was one hour off in 20 weeks between 2020 and 2026 (it changes only time stamps here, no trade result), and the years 2004 to 2012 are thin, with 2,099 suspect or unclear gaps (data_holes_xau.json). Our data rule removes the trades affected by such gaps and recomputes the verdict; if it changes, the result is Inconclusive. For gold, long only, no stop (387 trades):
| Version | Trades removed | Development t (2.5 needed) | Gates failed | Verdict |
|---|---|---|---|---|
| As published | 0 | 2.65 | none | Survivor |
| Strict: every trade open across a gap | 159 | -3.57 | 1, 2, 3, 5 | Buried |
| Targeted: signal bar, entry or exit touches a gap | 26 | 2.29 | 3 | Buried |
The strict version is biased against this rule: winning trades were held about 484 hours and losing ones about 142, so long winners are the trades most likely to cross a gap in the thin years. The targeted version is the fairer one. For scale, removing 26 trades at random (2,000 draws) leaves a mean development t-statistic of 2.56, below 2.5 in 36% of draws; the targeted result is at the 9th percentile, so the trades that touch gaps contributed more than an average trade. We cannot tell whether the gaps made those trades better than they were, and we cannot rule it out. That is what Inconclusive means here. The calculation: gh_data_review.js, gh_data_review.txt, gx_audit.txt.
13Corrections
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. 14 Oct 2026, after a site audit: (1) our protocol page said the sample-size gate needs 200 trades per period “for long histories”. No specification ever used that figure; this test, like every other, used 50. Under 200, XAU-GH-L-N (149, 112 and 126 trades in its three periods) would have failed that gate in its run, so “passed every gate” holds only under the rules actually frozen for it. Its verdict is Inconclusive either way. The figure has been removed from the protocol, with a note there. (2) “One of 180 on this site” was the count when the test ran; it now says so. 14 Oct 2026: the control percentiles of the financing table (section 06) had shown 99.8 instead of 99.4 since a rebuild after 8 October, because the helper that computes that table read gold bars appended to the live MT4 file after the study's last bar (7 October 2026, 16:57 New York). It now stops at that bar, as the study does, and shows 99.4 again. No other number, gate or verdict changed.
8 Oct 2026, after outside reviews, no result, gate or verdict changed: (1) financing: the post now states that the development t-statistic falls to 2.38 (below the 2.5 bar) at 3% a year of financing, with a financing table in section 06; the estimated threshold is 1.65% a year under the financing model used, gate 3 also passes at 1% and 1.5%, and the other gates were re-assessed with the same financing applied to the control runs (the baseline verdict remains Survivor because the frozen rules charge no financing). (2) The statement that about 59% of the average trade was market drift was removed; the post reports the observed comparison (+1.67 R per real trade against a +0.98 R control median, a difference of +0.69 R). (3) The stop and target text no longer says they destroyed or did not help the result: on gold the stop cut profit and the largest open loss, on ES it improved the result, and none of the configurations passed every gate. (4) “So the signal is there” was replaced by wording that does not claim independent confirmation. (5) The benchmark is described as a circularly shifted state-series control, with R recomputed at the shifted signal time. (6) The development t-statistic crosses 2.5 at an estimated $0.66 an ounce per round trip, not “immediately above $0.60”. (7) The ES and gold trade-log exports were regenerated at full precision (prices and R distance to six decimals); no number changed. (8) A link to the published forward-test protocol was added. 8 Oct 2026, after an audit of the gold data, the verdict of gold long only with no stop changed from Survivor to Inconclusive (data quality): see the data check section. 8 Oct 2026, after a data audit, no result, gate or verdict changed: (9) a Data notes section was added (the holes in the ES file, the back-adjustment, and a check without the trades open across the holes, which changed no verdict). 18 Oct 2026, navigation: added links to the new guide that compares all 11 gold strategy tests. No result changed. 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
- Best gold trading strategy
- Golden cross backtest eur usd
- Golden cross backtest
- Supertrend indicator backtest
- Gold opening range breakout backtest
- Did the stop loss help? This test next to the other with-and-without pairs
- Trend following vs mean reversion: this test next to the others of its style
- Free prop firm challenge calculator
- What all the backtests found so far
- The backtesting protocol
- How to backtest a trading strategy without fooling yourself
- Backtesting glossary