After Costsresearch log
Forex

Forex on a retail CFD account: 3,100 tests, no edge after costs

Intraday patterns, cross-pair lead-lag, carry, positioning data, FOMC days and yield momentum. Several of these are documented premia. On a retail CFD account the commission and the swap mark-up remove every one of them.

30 September 2026 · 9 min read

Key findings

  • 1,442 intraday and cross-pair configurations on nine instruments (1-minute bars, 2016–2026): none passed the multiple-testing filter, and the average trade before commission was about zero.
  • The one intraday idea we took to a sealed hold-out, the USD/JPY Tokyo-fix “gotobi” trade, went from +0.66 bp per trade in training to +3.19 bp in validation and −1.11 bp in the hold-out.
  • Carry is a real premium, and the broker keeps most of it. A G10 plus emerging-market carry basket earned 5.0% a year before mark-ups over 2001–2026 (Sharpe 0.48, t 2.34). With the broker’s overnight swaps it earned 2.1% a year (Sharpe 0.20) with a −56% drawdown. The mark-up is 1.0–1.8% a year per side on the majors.
  • Published anomalies faded. FOMC-day dollar weakness: +5.2 bp in 2000–10, −1.2 bp in 2016–26. Month-end hedge flows: Sharpe 0.33, then −0.41. Currency trend: net Sharpe −0.52 and −0.57 in 2016–26. In AQR’s own data the currency multi-style factor fell from a Sharpe of 0.70 (1976–2015) to 0.11 since 2016.
  • The best candidate, 2-year yield-gap momentum, had a Sharpe of 0.35 and 0.25 before costs in two periods, and 0.16 and 0.02 after them.

This post covers the daily, weekly and intraday currency studies. Together with the tick-level scalping grid and the exit tests in the scalping post, we tested more than 3,100 currency configurations. None passed an out-of-sample test after costs.

What a retail CFD account costs

Three costs matter for currency trading through a CFD broker.

EURUSD spread by hour of day (UTC)

The quoted spread is ~0.1 pip all day and jumps around the 21:00 UTC rollover (17:00 New York).

median90th percentilecommission per round trip (0.6 pip)
EUR/USD bid–ask spread (pips)
All hours except 21:00 UTC have a median spread of 0.1 pip. At 21:00 UTC, the daily rollover, the median is 3.8 pips and the 90th percentile 7.4 pips. Source: 8.7 million EUR/USD ticks from a cTrader demo feed, March–September 2026.
Show data · values in pips
Hour of day (UTC)median90th percentile
00:000.100.40
01:000.100.40
02:000.100.30
03:000.100.30
04:000.100.40
05:000.100.40
06:000.100.20
07:000.100.20
08:000.100.20
09:000.100.20
10:000.100.20
11:000.100.20
12:000.100.20
13:000.100.20
14:000.100.20
15:000.100.10
16:000.100.30
17:000.100.30
18:000.100.30
19:000.100.30
20:000.100.30
21:003.807.40
22:000.100.40
23:000.100.40
Pair Long swap, % a year Short swap, % a year Mark-up per side, % a year
EUR/USD −2.63 +0.48 1.08
GBP/USD −1.35 −0.88 1.12
USD/JPY +1.88 −3.92 1.02
AUD/USD −1.56 −2.08 1.82
NZD/USD −2.64 +0.06 1.29
USD/CAD +0.82 −2.83 1.00
USD/CHF +2.68 −5.70 1.51
USD/MXN −4.53 +0.81 1.86
USD/TRY −28.66 +22.86 2.90

The mark-up is paid on whichever side you hold. One to two percent a year is about the size of the premia that published currency strategies earn, which is why so many of them end up near zero on this account.

Intraday patterns: 788 configurations

We wrote down eight families of intraday hypotheses before the run and tested them on cTrader 1-minute bars for nine instruments: opening-range breakouts and fades around the London, New York and Tokyo opens (360 configurations), hour-of-day seasonality (189), Donchian breakouts during London hours (81), the London 16:00 and Tokyo 9:55 fixes (41), overnight mean reversion (36), 5-minute bursts (36), breaks of the previous day’s high or low (27) and weekend-gap fades (18).

The simulator enters at the next bar’s open, buys at the ask and sells at the bid using the measured spread for that hour, checks the stop before the target within a bar and exits before the rollover. Commission was 1 bp per round trip. The data was split into training (2016–2022), validation (2023–2024) and a vault (2025–2026) reserved for finalists. All configurations were corrected together with Benjamini–Hochberg.

1,442 intraday FX configurations: the edge before commission is about zero

Average result per trade after the spread but before the 1 bp commission, pooled over all trades of each strategy family.

training 2016–2022validation 2023–2024needed to pay the 1 bp commission
0 of 1,442 configurations passed the false-discovery filter in training. Numbers in brackets: configurations per family. Source: 1,442 configurations on nine instruments, 1-minute bars; trade-weighted average after the hourly spread, with the 1 bp commission added back.
Show data · values in bp
training 2016–2022validation 2023–2024
Session opening-range break/fade (360)-0.15-0.18
Hour-of-day seasonality (189)-0.23-0.26
Intraday Donchian breakout (81)-0.38-0.20
London/Tokyo fix (41)0.10-0.25
Overnight mean reversion (36)-0.02-0.11
M5 burst follow/fade (36)-0.20-0.17
Previous-day high/low break (27)-0.16-0.63
Weekend-gap fade (18)-1.38-0.46
Lead-lag catch-up (cross-pair) (360)-0.11-0.12
Idiosyncratic move (cross-pair) (160)-0.20-0.15
Pairs-spread reversion (cross-pair) (80)-0.66-0.24
USD-basket laggard (cross-pair) (48)-0.06-0.18
Triangular cross deviation (cross-pair) (6)-0.13-0.19

40 configurations (5.1%) were profitable in training and none passed the false-discovery filter. Ten were profitable in both training and validation, against about three expected by chance, all with t-statistics below 2. The average trade lost 1.2 bp after costs, which puts the gross edge at about −0.15 bp. No family had an edge before commission.

The gotobi test

On gotobi days, the 5th, 10th, 15th, 20th, 25th and 30th of the month, Japanese importers are said to buy dollars into the 9:55 Tokyo fix. The trade is long USD/JPY from 08:00 to 09:55 Tokyo time. It was the only intraday hypothesis declared in advance for the vault.

Period Trades Net per trade t
Training 2016–22 351 +0.66 bp 0.79
Validation 2023–24 100 +3.19 bp 1.95
Vault 2025–26 87 −1.11 bp −0.69

The same trade on every day lost in all three periods.

Cross-pair lead-lag: 654 configurations

The second grid watched one pair (or a basket of dollar pairs) and traded another: catch-up trades when one pair moves and a correlated pair lags (360 configurations), fades of moves that happen without the related pair (160), pairs trading on the spread between two pairs (80), a dollar basket against a lagging dollar pair (48) and triangular deviations between the crosses and their legs (6). Betas came from 2016–2022 data, and entries were at the next bar of the traded pair so that asynchronous closes could not create a fake lag.

16 configurations (2.4%) were profitable in training and none passed the filter. The average trade lost 1.2 bp after costs, about −0.2 bp before commission. On 1-minute bars there is no tradeable lead-lag between currency pairs. Lead-lag at the sub-second level exists, but it belongs to high-frequency firms, and our measured order latency was 286 ms.

Carry

Carry means holding high-interest currencies against low-interest ones. We ranked 16 currencies at every month-end by the previous month’s 3-month interbank rate from FRED and held the portfolio for a month, with the actual rate differential, rebalancing costs (3 bp for G10, 10 bp for emerging markets, 30 bp for the Turkish lira) and, in a second version, the broker’s swap mark-up.

Strategy 2001–09 2010–19 2020–26 2001–26
G10 carry, 3 long / 3 short, no mark-up 5.8% (Sharpe 0.67) 0.1% (0.01) 1.5% (0.30) 2.5% (0.33)
G10 carry, with the broker’s swaps 3.5% (0.40) −2.1% (−0.28) −0.4% (−0.07) 0.3% (0.04)
G10 + EM carry, no mark-up 9.9% (0.86) 0.9% (0.09) 4.7% (0.49) 5.0% (0.48)
G10 + EM carry, with the broker’s swaps 7.0% (0.61) −2.0% (−0.20) 1.6% (0.17) 2.1% (0.20)
G10 + EM carry with a momentum filter, with swaps 5.7% (0.73) −0.5% (−0.07) 1.9% (0.25) 2.3% (0.30)

Returns are per year and per unit of gross exposure on each side. Carry earned well in the 2000s and about nothing in the 2010s, which matches the literature. The best version after swaps earned 2.3% a year with a t-statistic of 1.6 and a −29% drawdown. Carry is real, and it needs cheap funding, such as currency futures, to be worth holding.

Positioning, trend, FOMC days and month-end flows

2-year yield-gap momentum

Changes in short-term rate differentials are one of the better-documented currency predictors (Ang and Chen; AQR’s macro momentum). We built daily 2-year yields for seven currencies from central-bank sources and FRED and went long a currency against the dollar when its 20-day change in the yield gap was above +5 bp, short below −5 bp, rebalanced weekly. The success criteria were fixed in advance: a net Sharpe of at least 0.3 over the full period, positive in 2016–26 and a HAC t-statistic of at least 2.64.

The best FX candidate, before and after the swap mark-up

2-year yield-gap momentum (7 currencies vs. USD, weekly), growth of 1 scaled to 10 % annual volatility, 2001-2026.

before costsafter the broker's costs (0.6 bp turnover + swap mark-up)
Growth of 1, scaled to 10% annual volatility
Both lines use the same volatility scaling. End values ×1.94 before costs and ×1.12 after. Full-period Sharpe 0.31 before costs (t 1.68) and 0.09 after (t 0.51). Source: 2-year yield-gap momentum, seven currencies against USD, weekly rebalancing, 2001–2026.
Show data · values in x
Datebefore costsafter the broker's costs (0.6 bp turnover + swap mark-up)
2001-01-050.990.99
2001-02-020.950.95
2001-03-020.960.96
2001-03-300.930.93
2001-04-270.910.91
2001-05-250.870.87
2001-06-220.870.86
2001-07-200.890.88
2001-08-170.900.89
2001-09-140.890.88
2001-10-120.880.86
2001-11-090.870.86
2001-12-070.860.84
2002-01-040.860.85
2002-02-010.840.82
2002-03-010.840.82
2002-03-290.840.82
2002-04-260.830.81
2002-05-240.850.82
2002-06-210.910.88
2002-07-190.920.89
2002-08-160.920.89
2002-09-130.920.89
2002-10-110.900.87
2002-11-080.910.87
2002-12-060.910.88
2003-01-030.890.85
2003-01-310.890.85
2003-02-280.890.86
2003-03-280.920.88
2003-04-250.960.91
2003-05-230.950.91
2003-06-200.960.91
2003-07-180.970.92
2003-08-151.020.96
2003-09-121.040.98
2003-10-101.081.02
2003-11-071.091.03
2003-12-051.091.03
2004-01-021.040.98
2004-01-301.081.02
2004-02-271.111.04
2004-03-261.131.06
2004-04-231.141.07
2004-05-211.101.03
2004-06-181.091.02
2004-07-161.050.97
2004-08-131.020.95
2004-09-101.020.94
2004-10-081.040.96
2004-11-050.960.89
2004-12-030.950.87
2004-12-310.960.89
2005-01-280.980.90
2005-02-250.950.87
2005-03-250.980.90
2005-04-220.980.90
2005-05-201.000.92
2005-06-171.020.93
2005-07-151.040.95
2005-08-121.020.93
2005-09-090.980.89
2005-10-070.960.87
2005-11-040.990.90
2005-12-021.010.92
2005-12-301.010.91
2006-01-271.030.93
2006-02-241.030.93
2006-03-241.040.94
2006-04-210.980.87
2006-05-190.950.85
2006-06-160.960.85
2006-07-140.940.83
2006-08-110.940.84
2006-09-080.930.82
2006-10-060.910.81
2006-11-030.930.82
2006-12-010.970.86
2006-12-290.930.82
2007-01-260.940.83
2007-02-230.940.83
2007-03-230.950.84
2007-04-200.960.85
2007-05-180.970.85
2007-06-150.980.86
2007-07-131.020.89
2007-08-101.000.87
2007-09-071.030.89
2007-10-051.060.92
2007-11-021.060.92
2007-11-301.020.89
2007-12-281.010.88
2008-01-251.030.89
2008-02-221.070.92
2008-03-211.120.96
2008-04-181.130.97
2008-05-161.110.95
2008-06-131.130.97
2008-07-111.160.99
2008-08-081.171.00
2008-09-051.181.01
2008-10-031.271.08
2008-10-311.251.06
2008-11-281.291.10
2008-12-261.301.11
2009-01-231.361.16
2009-02-201.431.21
2009-03-201.301.10
2009-04-171.311.11
2009-05-151.251.05
2009-06-121.241.04
2009-07-101.231.04
2009-08-071.211.01
2009-09-041.201.00
2009-10-021.251.04
2009-10-301.201.00
2009-11-271.190.99
2009-12-251.180.98
2010-01-221.200.99
2010-02-191.211.00
2010-03-191.241.03
2010-04-161.241.03
2010-05-141.261.04
2010-06-111.291.06
2010-07-091.391.14
2010-08-061.401.14
2010-09-031.401.15
2010-10-011.481.21
2010-10-291.481.21
2010-11-261.401.14
2010-12-241.371.12
2011-01-211.411.15
2011-02-181.421.15
2011-03-181.421.15
2011-04-151.401.13
2011-05-131.351.09
2011-06-101.341.08
2011-07-081.311.06
2011-08-051.301.04
2011-09-021.271.02
2011-09-301.281.02
2011-10-281.200.96
2011-11-251.251.00
2011-12-231.271.02
2012-01-201.301.03
2012-02-171.321.05
2012-03-161.331.06
2012-04-131.341.07
2012-05-111.361.08
2012-06-081.351.06
2012-07-061.371.08
2012-08-031.381.09
2012-08-311.401.10
2012-09-281.391.09
2012-10-261.411.11
2012-11-231.441.12
2012-12-211.461.14
2013-01-181.441.13
2013-02-151.471.14
2013-03-151.461.14
2013-04-121.461.13
2013-05-101.431.11
2013-06-071.401.09
2013-07-051.401.08
2013-08-021.481.14
2013-08-301.461.13
2013-09-271.461.13
2013-10-251.511.16
2013-11-221.521.17
2013-12-201.511.16
2014-01-171.531.17
2014-02-141.511.15
2014-03-141.521.16
2014-04-111.521.15
2014-05-091.511.15
2014-06-061.531.16
2014-07-041.531.16
2014-08-011.561.17
2014-08-291.581.19
2014-09-261.611.21
2014-10-241.541.16
2014-11-211.571.17
2014-12-191.621.22
2015-01-161.611.20
2015-02-131.681.25
2015-03-131.741.29
2015-04-101.801.34
2015-05-081.821.35
2015-06-051.741.29
2015-07-031.771.31
2015-07-311.751.29
2015-08-281.751.29
2015-09-251.741.28
2015-10-231.721.26
2015-11-201.781.30
2015-12-181.721.25
2016-01-151.731.26
2016-02-121.791.31
2016-03-111.701.24
2016-04-081.671.21
2016-05-061.661.20
2016-06-031.641.19
2016-07-011.651.19
2016-07-291.591.15
2016-08-261.541.11
2016-09-231.571.12
2016-10-211.661.19
2016-11-181.671.19
2016-12-161.711.22
2017-01-131.671.19
2017-02-101.641.17
2017-03-101.611.15
2017-04-071.611.14
2017-05-051.651.17
2017-06-021.601.13
2017-06-301.561.10
2017-07-281.561.10
2017-08-251.581.11
2017-09-221.521.07
2017-10-201.561.09
2017-11-171.531.07
2017-12-151.541.08
2018-01-121.521.06
2018-02-091.491.04
2018-03-091.541.07
2018-04-061.561.08
2018-05-041.631.13
2018-06-011.651.14
2018-06-291.651.14
2018-07-271.701.17
2018-08-241.701.17
2018-09-211.691.16
2018-10-191.731.19
2018-11-161.731.18
2018-12-141.741.19
2019-01-111.741.19
2019-02-081.711.16
2019-03-081.691.15
2019-04-051.671.14
2019-05-031.691.14
2019-05-311.721.16
2019-06-281.701.15
2019-07-261.691.14
2019-08-231.651.11
2019-09-201.691.13
2019-10-181.681.13
2019-11-151.681.12
2019-12-131.681.12
2020-01-101.651.10
2020-02-071.601.07
2020-03-061.571.04
2020-04-031.581.05
2020-05-011.601.06
2020-05-291.681.11
2020-06-261.631.08
2020-07-241.541.01
2020-08-211.551.02
2020-09-181.541.01
2020-10-161.480.97
2020-11-131.450.95
2020-12-111.380.90
2021-01-081.380.90
2021-02-051.420.92
2021-03-051.410.92
2021-04-021.390.90
2021-04-301.350.88
2021-05-281.360.88
2021-06-251.410.91
2021-07-231.410.91
2021-08-201.400.90
2021-09-171.420.91
2021-10-151.420.91
2021-11-121.430.91
2021-12-101.420.91
2022-01-071.390.89
2022-02-041.410.90
2022-03-041.450.92
2022-04-011.450.92
2022-04-291.520.96
2022-05-271.490.94
2022-06-241.460.92
2022-07-221.460.92
2022-08-191.430.90
2022-09-161.400.88
2022-10-141.430.90
2022-11-111.330.84
2022-12-091.320.83
2023-01-061.370.85
2023-02-031.380.86
2023-03-031.440.89
2023-03-311.430.89
2023-04-281.470.91
2023-05-261.470.91
2023-06-231.490.92
2023-07-211.440.89
2023-08-181.480.92
2023-09-151.500.93
2023-10-131.500.92
2023-11-101.500.92
2023-12-081.510.93
2024-01-051.530.94
2024-02-021.510.92
2024-03-011.490.91
2024-03-291.530.93
2024-04-261.560.95
2024-05-241.570.95
2024-06-211.570.95
2024-07-191.590.96
2024-08-161.681.01
2024-09-131.681.01
2024-10-111.661.00
2024-11-081.751.05
2024-12-061.751.05
2025-01-031.771.06
2025-01-311.751.05
2025-02-281.821.09
2025-03-281.821.08
2025-04-251.881.12
2025-05-231.871.11
2025-06-201.861.10
2025-07-181.851.09
2025-08-151.821.07
2025-09-121.821.07
2025-10-101.791.05
2025-11-071.771.04
2025-12-051.801.05
2026-01-021.791.05
2026-01-301.801.05
2026-02-271.771.03
2026-03-271.741.01
2026-04-241.811.05
2026-05-221.851.07
2026-06-191.941.12
2026-07-171.921.11
2026-08-141.941.12
2026-09-111.941.12
2026-09-251.941.12

It is the only currency signal that was positive before costs in both halves: Sharpe 0.35 in 2001–13 and 0.25 in 2014–26. After the broker’s costs it fell to 0.16 and 0.02, and the full-period t-statistic after costs was 0.51. The cross-sectional and 60-day versions were weaker. On futures, where the interest differential is in the price and there is no swap mark-up, it might be worth a closer look; even before costs its full-period t-statistic was only 1.7.

Daily mean reversion and an 11-predictor lab

Where the FX edge disappears: Sharpe before and after retail CFD costs

Pre-registered FX tests from the literature, each in an older and a newer period; costs = spread/commission plus the broker's swap mark-up.

older period, before costsolder period, after costsnewer period, before costsnewer period, after costspre-set success bar (net 0.3)
Periods in brackets: older | newer. Before-cost Sharpe ratios were not saved for the weekly positioning and trend signals, so only their after-cost bars exist. Source: pre-registered FX tests; costs are commission or spread plus the broker's swap mark-up.
Show data · values in Sharpe
older period, before costsolder period, after costsnewer period, before costsnewer period, after costs
2Y yield-gap momentum (2001-13 | 2014-26)0.350.160.250.02
Month-end equity-hedge flows (2001-13 | 2014-26)0.330.26-0.41-0.50
D1 mean reversion, 16 rules (2000-15 | 2016-26)-0.17-0.330.280.07
Carry G10 3/3 (2010-19 | 2020-26)0.01-0.280.30-0.07
Carry G10+EM + momentum filter (2010-19 | 2020-26)0.11-0.070.430.25
CFTC COT leveraged-fund extremes (2006-15 | 2016-26)–-0.44–-0.15
Currency trend 13 weeks (2006-15 | 2016-26)–0.08–-0.52
Currency trend 52 weeks (2006-15 | 2016-26)–0.11–-0.57

What the literature says

We compared every approach with published work before testing it. Where a paper reports an effect, our tests usually show the same effect weakening after publication and then disappearing after retail costs.

Approach Literature Our result
Exchange-rate direction in general Models do not beat a random walk at 1–12 months (Meese and Rogoff 1983; Rossi 2013) Intraday, cross-pair and 1-second scalping grids: nothing after costs
Carry A real premium with crash risk (Menkhoff et al. 2012); AQR Sharpe 0.46 before 2016, 0.35 after 2–5% a year before mark-ups, 0–2% with the broker’s swaps
Yield-gap momentum Short-rate changes predict currencies (Ang and Chen) Sharpe 0.35 and 0.25 before costs, 0.09 after
Value Real exchange rates predict the cross-section (Menkhoff et al. 2017); AQR 0.67 before 2016, −0.06 after Positive before costs, negative after costs in 2014–26
Time-series trend Strong until 2009, about zero since 2016 (Moskowitz, Ooi and Pedersen 2012) 4, 13 and 52 weeks all lose in 2016–26
Technical rules Stopped working in currencies in the early 1990s (Neely, Weller and Ulrich 2009) 162 rules, nothing better than random after costs
FOMC days Dollar weakness on announcement days, 1994–2010 (Mueller, Tahbaz-Salehi and Vedolin 2017) +5 bp in 2000–10, −1.2 bp in 2016–26
Speculator positioning Position changes coincide with moves and do not predict them (Klitgaard and Weir 2004) No signal in 2006–26
Retail CFD trading 74–89% of retail CFD accounts in the EU lose money (ESMA, 2018) Consistent with everything above

AQR’s public factor data tells the same story at the style level. Its currency value, momentum, carry and multi-style factors had Sharpe ratios of 0.67, 0.23, 0.46 and 0.70 in 1976–2015, and −0.06, −0.16, 0.35 and 0.11 from 2016 to February 2026, before any costs.

What we would do instead

  1. Do not trade currency direction with CFDs. A random strategy loses exactly its costs, so the more often a strategy trades, the faster it loses.
  2. If you want currency exposure to a documented premium, use futures, where there is no swap mark-up.
  3. Treat any backtest that ignores the swap mark-up as optimistic by one to two percent a year per side.

Caveats