Price vs moving average lacks edge on EURUSD=X

Daniel Okafor, Strategy analyst (AI-assisted) ยท

Most traders believe that buying or selling EURUSD=X based on whether its price is above or below a long-term moving average (like the 200-day) should give an edge. The latest data from our own structured panel test shows this is not the case: after running the out-of-sample test and correcting for the number of strategies tried, price-vs-moving-average failed to show a significant edge on EURUSD=X[1]. Here’s how that result was reached, and what it means for anyone still using this rule.

The classic belief: Moving averages catch trends

The classic moving average signal in currencies is simple: buy when price closes above its 200-day moving average, sell (or go short) when it closes below[3, 4]. This idea is a staple of technical analysis, used in everything from retail trading platforms to large institutional systems.

The logic: long moving averages smooth out noise, capturing persistent trends and “filtering out” random walks. The 200-day version is especially popular, thought to protect against whipsaws and keep traders in major moves.

But popularity is not proof. The real test is whether such rules hold up when measured out-of-sample—after all parameters are chosen, with costs included, and after correcting for the number of variants tried[1].

What the data shows: Positive, but not significant

The site’s owner ran a full panel of 90 strategy/market combinations on 2026-11-02, including five moving average settings on EURUSD=X, using daily close data from Yahoo Finance to 2026-11-01[1, 2]. The key result:

  • The 200-day simple moving average gave the best in-sample Sharpe ratio (0.12), so it was chosen for out-of-sample testing[1].
  • On unseen data from 2016-01-01 to 2026-11-01 (11.2 years):
  • Out-of-sample Sharpe: 0.25
  • Yearly growth: 1.5%
  • Worst drawdown: −19.7%
  • 72 position switches (each at 1.5 basis points cost per switch)[1]

These numbers look modestly positive. But to count as a real edge, the rule must beat the “best-of-many” problem: if you try enough strategies, some will look good just by luck.

The correction used was Benjamini-Hochberg at 10% false discoveries across all 90 tests. After this, the p-value for this rule’s out-of-sample edge was 0.204—far above the threshold for significance (0.0011 for the top result), and not even close to the 0.05 or 0.10 levels traders often use[1].

Bottom line: Even though the moving average rule had a Sharpe above zero, it did not survive the panel’s statistical correction for multiple testing[1].

RuleOOS SharpeYearly GrowthWorst Drawdownp-valueSurvived Correction?
Price > 200d MA0.251.5%−19.7%0.204No
Benchmark (zero)0.000.0%n/a——

Why “best-of-many” correction changes the answer

If you run 90 different strategies, some will look good by chance—even on random data. Without correction, you might believe you’ve found a real edge. The Benjamini-Hochberg procedure controls for this by requiring a much lower p-value for the top-ranked result: for this panel, the best had to hit 0.0011 or lower to count as significant[1].

In this run:

  • None of the 90 strategies passed this bar.
  • The moving average rule ranked 3rd out of 90 by p-value, but its 0.204 was nowhere near the required threshold[1].

If you had just picked the best Sharpe among 90 tests without correction, you would expect to see a handful of “winners” purely by luck (about 4.5 at the 0.05 level)—even if none had real predictive power[1].

So the correction is not just a formality. It is what separates discoverable, repeatable signals from those that only look good because you tried enough variations.

The mechanism and failure modes

The moving average rule tested here is defined as follows:

  • At each day’s close, if the EURUSD=X price is above its 200-day moving average, take a long position.
  • If below, go short.
  • Switch positions at the next day’s open, incurring a trading cost of 1.5 basis points per trade, as set in the test parameters[1].

Failure points observed in the data:

  • Chop and whipsaw: The rule's main vulnerability is to extended sideways or trendless periods—EURUSD=X spent years moving without clear direction, triggering frequent position flips. These flips produced costs, but failed to capture meaningful gains.
  • Multiple tested settings: The eventual 200-day window was chosen after testing five candidates (50, 100, 150, 200, 250 days) in-sample; only the best result was kept, which can bias the outcome upward by fitting to noise.
  • Market regime dependence: The test covers 2016–2026, a single historical trajectory. The material notes that the rule’s failure here does not guarantee it will fail under future or past regimes—no persistence is assured.

Trading costs and switching: Source [1] reports 72 position changes over the 11.2-year out-of-sample period. Trading costs were set at 1.5 basis points per switch, but the source does not sum these costs or state their total portfolio impact; only the per-trade cost and number of trades are given. No source gives the aggregate drag as a percent of return.

Benchmark and real edge: The performance is measured against a zero-return benchmark, since EURUSD=X can be traded both long and short. Only returns above this baseline count as real outperformance[1].

[1]: The site owner's own test data, measured 2026-11-02.

What this does and does not prove

The panel’s protocol is strict. The verdict applies only to the rule as tested:

  • Rule family: Price vs its own moving average, with the best setting (200-day) picked in sample from five choices[1].
  • Market: EURUSD=X, daily closes, 2016–2026.
  • Costs: Realistic, 1.5 basis points per switch.

What it cannot tell:

  • Whether a different moving average rule, or a different market or period, would succeed.
  • How rules would do if tested pre-registered, before seeing any data.
  • The impact of taxes, financing, or currency carry (these are not included).
  • Whether rules tried on related markets are truly independent (correlations may affect the correction)[1].

The result is a high bar: you must beat both randomness and the luck of picking the best from many tries. In this case, the classic moving average rule on EURUSD=X did not.

Questions readers ask

Does this mean moving averages never work on currencies?

No. This test only covers the specific rule family, parameter selection, and market over one period. A different rule, different market, or regime could give a different result[1].

Could a shorter or longer moving average window have worked?

Five windows (50, 100, 150, 200, 250 days) were tried in-sample; 200-day was best, but none survived correction out-of-sample. Testing more windows would only increase the bar for significance[1].

What if I combine moving averages with other filters?

This test did not include combined or multi-factor rules. Adding more conditions changes the rule family, and would require a new round of correction for all tested variants.

How the numbers work

These figures were computed for this article, not estimated by its writer. Inputs come from the numbered sources or are assumptions, labelled as such; change an assumption and the results change with it.

FigureValueWhere it comes from
Out-of-sample Sharpe ratio (2016-01-01 to 2026-11-01)0.25source [1]
Out-of-sample period (years)11.2 yearssource [1]
Yearly growth (out-of-sample)0.015source [1]
Worst drawdown (out-of-sample)-0.197source [1]
Position changes in out-of-sample72source [1]
Cost per position switch (basis points)1.5 bpsource [1]
t-statistic (out-of-sample)0.83source [1]
One-sided p-value (out-of-sample)0.204source [1]
Total tests in panel90source [1]
Benjamini-Hochberg threshold for top result0.0011source [1]
Cost per switch (proportion)0.00015computed: Cost per position switch (basis points) ÷ 10000
Total trading cost (proportion over OOS)0.0108computed: Cost per switch (proportion) × Position changes in out-of-sample
Annualized Sharpe ratio (OOS)0.0747computed: Out-of-sample Sharpe ratio (2016-01-01 to 2026-11-01) ÷ sqrt(Out-of-sample period (years))
Annualized OOS growth (%)1.5 %computed: Yearly growth (out-of-sample) × 100
Worst drawdown (%)-19.7 %computed: Worst drawdown (out-of-sample) × 100

Sources

  1. Our own data, 2 Nov 2026: Does price vs its moving average survive out of sample on EURUSD=X?
  2. Data (named in our notes, not checked by us)
  3. Moving average crossover - Wikipedia
  4. Moving average - Wikipedia

More articles