Scalping EUR/USD live: fast fills, no edge
We ran four scalping strategies on two broker demo accounts and studied the order book. Orders filled in under 300 ms with no slippage. The strategies still lost, because a 0.7-pip round trip is bigger than almost anything they could predict.
Key findings
- A EUR/USD round trip on a raw-spread CFD account costs about 0.7 pip: 0.1 pip of spread plus 0.6 pip of commission. In the London and New York session only 0.4% of 1-second moves, 31% of 1-minute moves and 52% of 5-minute moves are larger than that, before direction even matters.
- In a tick backtest of 1,443 momentum and reversion configurations, none was profitable in both the training and the test period. The 15 best in training averaged +0.19 pip per trade in training and −1.45 pip in the test.
- Live on two demo accounts (about 28 hours, 201 trades) all four strategies lost. Roughly 81% of the loss was commission. Market orders filled in 286 ms on average with no adverse slippage.
- Limit orders on a CFD broker do not earn the spread. At the fill the mid price was already past our price, and two minutes later the average position was 0.22 pip under water.
- Level-1 order-book imbalance predicts the next move very reliably (t = 16) and very weakly (0.01–0.04 pip). On the demo account we used, the broker’s depth-of-market stream showed a fixed ladder of sizes, so its size imbalance is always zero.
The cost of a round trip
Scalping lives or dies on the cost of a round trip. On the raw-pricing account we used, EUR/USD had a median spread of 0.1 pip in every hour except the daily rollover at 21:00 UTC, when it jumps to a median of 3.8 pips. Commission is 6 USD per lot per round trip, which is 0.6 pip. A typical market-order round trip during the day therefore costs about 0.7 pip.
We measured how often the price moves that far at all, using 8.7 million ticks from six months of a cTrader price feed.
How long until a EURUSD move pays for the trade?
Share of 1-second start points in the 07:00-16:00 UTC session whose absolute mid move over the horizon exceeds the ~0.7-pip round-trip cost.
Show data · values in %
| larger than the cost (0.7 pip) | larger than twice the cost (1.4 pips) | |
|---|---|---|
| 1 s | 0.40 | 0.0000 |
| 2 s | 1.00 | 0.10 |
| 5 s | 3.30 | 0.40 |
| 10 s | 7.50 | 1.20 |
| 15 s | 11.30 | 2.20 |
| 30 s | 20.50 | 5.70 |
| 1 min | 31.10 | 12.30 |
| 2 min | 41.40 | 22 |
| 3 min | 46.60 | 28.50 |
| 5 min | 51.80 | 36.10 |
| 10 min | 57.30 | 45.10 |
| 15 min | 59.80 | 49.40 |
A strategy that holds for a few seconds can almost never cover its costs, however good its direction calls are. At one minute, two moves in three are still smaller than the cost. Only from about five minutes on is the typical move larger than the round trip, and at that horizon a scalping signal has to compete with ordinary market noise.
A tick backtest of 1,536 configurations
The simulator works on a 1-second bid/ask grid. A signal at the end of one second is filled in the next second at the ask (buy) or the bid (sell). If a take-profit and a stop are both reached within the same second, the stop counts. The 0.6-pip commission is charged, trades are only allowed while the spread is at most 0.3 pip, and only one position is open at a time.
The grid combined two ideas (trade with a burst, or against it), four lookbacks (5 to 60 seconds), four trigger sizes (1 to 5 pips), four maximum holds (1 to 15 minutes), four exit plans and three sessions: 1,536 configurations. The first two thirds of the six months were used for training (about 86 trading days), the last third for testing (about 43).
Tick backtest: the 15 best configurations in training all lose in the test period
Average net result per trade (after spread and 0.6-pip commission) for the 15 best of 1,443 momentum/reversion configurations, ranked on the training period.
Show data · values in pips
| training (first two thirds) | test (last third) | |
|---|---|---|
| Mom 5s/3p, hold 300s, TP5/SL3, 7-10h | 0.41 | -3.65 |
| Rev 10s/5p, hold 900s, TP8/SL5, 12-16h | 0.38 | -0.65 |
| Mom 10s/3p, hold 300s, no TP/SL, 7-10h | 0.37 | -1.97 |
| Rev 10s/5p, hold 180s, TP8/SL5, 7-16h | 0.28 | -1.25 |
| Mom 5s/3p, hold 900s, TP5/SL3, 7-10h | 0.26 | -3.75 |
| Rev 10s/5p, hold 900s, TP8/SL5, 7-16h | 0.25 | -0.63 |
| Rev 10s/5p, hold 180s, TP8/SL5, 12-16h | 0.24 | -1.17 |
| Rev 10s/5p, hold 180s, no TP/SL, 12-16h | 0.17 | -0.70 |
| Rev 10s/5p, hold 180s, no TP/SL, 7-16h | 0.17 | -0.84 |
| Mom 5s/3p, hold 180s, TP5/SL3, 7-10h | 0.16 | -3.25 |
| Rev 5s/5p, hold 180s, no TP/SL, 7-16h | 0.05 | -0.42 |
| Rev 30s/5p, hold 300s, no TP/SL, 12-16h | 0.03 | -1.00 |
| Rev 10s/5p, hold 300s, TP8/SL5, 7-16h | 0.01 | -0.94 |
| Rev 10s/2p, hold 900s, no TP/SL, 12-16h | 0.0030 | -0.45 |
| Rev 30s/5p, hold 300s, TP8/SL5, 12-16h | -0.0010 | -1.02 |
Of the 1,443 configurations with at least 50 training trades, 14 were profitable in training, 72 in the test period and none in both. The average configuration lost 0.71 pip per trade in training and 0.72 in the test. The best training configurations did worse out of sample than the average one, which is what selection on noise looks like.
We also tried to rescue the live entry rules with better exits: 45 trailing-stop variants for each entry type, from tight to loose stops with different activation levels, at the 1.1-pip commission of the first demo account. None of the 90 was profitable in training or in the test. Exits cannot fix entries that have no edge.
Four strategies, live
We ran the bot anyway, on demo accounts only, to measure what a backtest cannot: latency, slippage, real commission and the behaviour of limit orders. It connected to the broker through the cTrader Open API and traded 1,000 units of EUR/USD per position.
| Strategy | Entry | Exit (since day 1, 12:51 UTC) |
|---|---|---|
| Momentum burst | The mid moves at least 2 pips within 10 s, 07:00–16:00 UTC. Market order in the direction of the move. | Stop 5 pips. At +2 pips the stop moves to 3 pips behind the price and becomes a broker-side trailing stop. |
| Spike reversion | The same trigger with at least 3 pips. Market order against the move. | Same as momentum. |
| Session breakout | The 30-minute range before the 07:00 and 13:30 UTC opens. In the first hour after the open, a break of the range by 0.5 pip. One trade per session. | Stop at half the range (at least 4 pips), trailing stop at the same distance from +3 pips. |
| Market making | Only in a quiet market (spread at most 0.2 pip, 60-second range at most 2 pips). Limit orders 0.6 pip below and above the mid, re-quoted every 20 s. | Take-profit 1.5 pips, stop 3 pips. |
Every position had a 4-hour safety limit and was closed before the rollover. Daily loss limit: 20 USD.
Live demo scalping: cumulative net P&L per strategy
Every strategy lost money on the demo accounts; market making lost the most because it traded by far the most.
Show data · values in USD
| Date | Market making (180 trades) | Momentum burst (15 trades) | Spike reversion (4 trades) | Session breakout (2 trades) |
|---|---|---|---|---|
| 2026-09-29T09:43 | 0.0000 | 0.0000 | 0.0000 | 0.0000 |
| 2026-09-29T09:46 | -0.07 | – | – | – |
| 2026-09-29T09:48 | -0.29 | – | – | – |
| 2026-09-29T09:51 | -0.45 | – | – | – |
| 2026-09-29T09:53 | -0.46 | – | – | – |
| 2026-09-29T09:54 | -0.88 | – | – | – |
| 2026-09-29T09:57 | -1.03 | – | – | – |
| 2026-09-29T09:59 | -1.34 | – | – | – |
| 2026-09-29T10:02 | -1.67 | – | – | – |
| 2026-09-29T10:10 | -1.85 | – | – | – |
| 2026-09-29T10:13 | -1.87 | – | – | – |
| 2026-09-29T10:15 | -1.84 | – | – | – |
| 2026-09-29T10:17 | -2.17 | – | – | – |
| 2026-09-29T10:19 | -2.19 | – | – | – |
| 2026-09-29T10:22 | -2.41 | – | – | – |
| 2026-09-29T10:24 | -2.38 | – | – | – |
| 2026-09-29T10:26 | -2.35 | – | – | – |
| 2026-09-29T10:29 | -2.51 | – | – | – |
| 2026-09-29T10:32 | -2.60 | – | – | – |
| 2026-09-29T10:34 | -2.85 | – | – | – |
| 2026-09-29T10:40 | -2.91 | – | – | – |
| 2026-09-29T10:42 | -3.03 | – | – | – |
| 2026-09-29T10:48 | -3.10 | – | – | – |
| 2026-09-29T10:51 | -3.40 | – | – | – |
| 2026-09-29T10:54 | -3.41 | – | – | – |
| 2026-09-29T10:56 | -3.59 | – | – | – |
| 2026-09-29T10:58 | -3.78 | – | – | – |
| 2026-09-29T11:01 | -3.80 | – | – | – |
| 2026-09-29T11:03 | -4.09 | – | – | – |
| 2026-09-29T11:05 | -4.21 | – | – | – |
| 2026-09-29T11:08 | -4.41 | – | – | – |
| 2026-09-29T11:10 | -4.52 | – | – | – |
| 2026-09-29T11:13 | -4.74 | – | – | – |
| 2026-09-29T11:15 | -4.80 | – | – | – |
| 2026-09-29T11:17 | -4.97 | – | – | – |
| 2026-09-29T11:20 | -5.21 | – | – | – |
| 2026-09-29T11:22 | -5.32 | – | – | – |
| 2026-09-29T11:25 | -5.28 | – | – | – |
| 2026-09-29T11:27 | -5.52 | – | – | – |
| 2026-09-29T11:32 | -5.65 | – | – | – |
| 2026-09-29T11:34 | -5.61 | – | – | – |
| 2026-09-29T11:36 | -5.78 | – | – | – |
| 2026-09-29T11:37 | -5.75 | – | – | – |
| 2026-09-29T11:40 | -5.86 | – | – | – |
| 2026-09-29T11:41 | -5.83 | – | – | – |
| 2026-09-29T11:44 | -5.88 | – | – | – |
| 2026-09-29T11:47 | -6.11 | – | – | – |
| 2026-09-29T11:49 | -6.08 | – | – | – |
| 2026-09-29T11:50 | -6.52 | – | – | – |
| 2026-09-29T11:55 | -6.70 | – | – | – |
| 2026-09-29T11:58 | -6.64 | – | – | – |
| 2026-09-29T12:01 | -6.79 | – | – | – |
| 2026-09-29T12:03 | -7.03 | – | – | – |
| 2026-09-29T12:05 | -7.27 | – | – | – |
| 2026-09-29T12:08 | -7.43 | – | – | – |
| 2026-09-29T12:09 | -7.40 | – | – | – |
| 2026-09-29T12:11 | -7.36 | – | – | – |
| 2026-09-29T12:13 | -7.63 | – | – | – |
| 2026-09-29T12:15 | -7.79 | – | – | – |
| 2026-09-29T12:16 | -7.75 | – | – | – |
| 2026-09-29T12:18 | -7.85 | – | – | – |
| 2026-09-29T12:21 | -8.16 | – | – | – |
| 2026-09-29T12:23 | -8.17 | – | – | – |
| 2026-09-29T12:25 | -8.13 | – | – | – |
| 2026-09-29T12:28 | -8.35 | – | – | – |
| 2026-09-29T12:30 | -8.51 | – | – | – |
| 2026-09-29T12:32 | -8.55 | – | – | – |
| 2026-09-29T12:35 | -8.96 | – | – | – |
| 2026-09-29T12:37 | -9.13 | – | – | – |
| 2026-09-29T12:38 | -9.26 | – | – | – |
| 2026-09-29T12:42 | -9.55 | – | – | – |
| 2026-09-29T12:46 | -9.46 | – | – | – |
| 2026-09-29T12:48 | -9.45 | – | – | – |
| 2026-09-29T12:59 | -9.81 | – | – | – |
| 2026-09-29T13:06 | -9.72 | – | – | – |
| 2026-09-29T13:18 | -10.08 | – | – | – |
| 2026-09-29T13:33 | -10.44 | – | – | – |
| 2026-09-29T13:41 | -10.33 | – | – | – |
| 2026-09-29T13:47 | -10.23 | – | – | – |
| 2026-09-29T13:50 | -10.12 | – | – | – |
| 2026-09-29T13:58 | -10.52 | – | – | – |
| 2026-09-29T14:00 | -10.90 | – | – | – |
| 2026-09-29T14:04 | -11.28 | – | – | -0.11 |
| 2026-09-29T14:09 | -11.19 | – | – | – |
| 2026-09-29T14:17 | -11.55 | – | – | – |
| 2026-09-29T14:21 | -11.44 | – | – | – |
| 2026-09-29T14:27 | -11.34 | – | – | – |
| 2026-09-29T14:37 | -11.25 | – | – | – |
| 2026-09-29T14:43 | -11.16 | – | – | – |
| 2026-09-29T14:46 | -11.06 | – | – | – |
| 2026-09-29T15:03 | -11.42 | – | – | – |
| 2026-09-29T15:12 | -11.78 | – | – | – |
| 2026-09-29T15:23 | -11.69 | – | – | – |
| 2026-09-29T15:24 | -12.05 | – | – | – |
| 2026-09-29T15:25 | -11.96 | – | – | – |
| 2026-09-29T15:28 | -11.86 | -1.20 | – | – |
| 2026-09-29T15:33 | -12.22 | – | – | – |
| 2026-09-29T15:40 | -12.13 | – | – | – |
| 2026-09-29T15:47 | -12.50 | – | – | – |
| 2026-09-29T15:56 | -12.41 | – | – | – |
| 2026-09-29T16:00 | -12.32 | – | – | – |
| 2026-09-29T16:12 | -12.68 | – | – | – |
| 2026-09-29T16:20 | -13.04 | – | – | – |
| 2026-09-29T16:26 | -13.40 | – | – | – |
| 2026-09-29T16:33 | -13.77 | – | – | – |
| 2026-09-29T16:40 | -13.68 | – | – | – |
| 2026-09-29T16:45 | -14.05 | – | – | – |
| 2026-09-29T16:49 | -13.95 | – | – | – |
| 2026-09-29T16:56 | -13.86 | – | – | – |
| 2026-09-29T16:57 | -13.75 | – | – | – |
| 2026-09-29T17:01 | -13.66 | – | – | – |
| 2026-09-29T17:02 | -13.56 | – | – | – |
| 2026-09-29T17:04 | -13.92 | – | – | – |
| 2026-09-29T17:09 | -13.82 | – | – | – |
| 2026-09-29T17:21 | -13.71 | – | – | – |
| 2026-09-29T17:45 | -14.07 | – | – | – |
| 2026-09-29T17:48 | -13.98 | – | – | – |
| 2026-09-29T18:00 | -13.81 | – | – | – |
| 2026-09-29T18:03 | -13.71 | – | – | – |
| 2026-09-29T18:05 | -14.07 | – | – | – |
| 2026-09-29T18:09 | -13.98 | – | – | – |
| 2026-09-29T18:13 | -14.34 | – | – | – |
| 2026-09-29T18:16 | -14.71 | – | – | – |
| 2026-09-29T18:23 | -14.62 | – | – | – |
| 2026-09-29T18:28 | -14.52 | – | – | – |
| 2026-09-29T18:30 | -14.43 | – | – | – |
| 2026-09-29T18:36 | -14.32 | – | – | – |
| 2026-09-29T18:38 | -14.69 | – | – | – |
| 2026-09-29T18:43 | -14.60 | – | – | – |
| 2026-09-29T18:52 | -14.51 | – | – | – |
| 2026-09-29T19:03 | -14.42 | – | – | – |
| 2026-09-29T19:15 | -14.78 | – | – | – |
| 2026-09-29T19:25 | -15.14 | – | – | – |
| 2026-09-29T19:44 | -15.50 | – | – | – |
| 2026-09-29T19:45 | -15.41 | – | – | – |
| 2026-09-29T19:54 | -15.30 | – | – | – |
| 2026-09-29T19:56 | -15.20 | – | – | – |
| 2026-09-29T19:59 | -15.10 | – | – | – |
| 2026-09-29T20:05 | -15.01 | – | – | – |
| 2026-09-30T10:35 | -15.37 | – | – | – |
| 2026-09-30T10:44 | -15.28 | – | – | – |
| 2026-09-30T10:50 | -15.17 | – | – | – |
| 2026-09-30T10:53 | -15.06 | – | – | – |
| 2026-09-30T10:59 | -14.97 | – | – | – |
| 2026-09-30T11:02 | -14.88 | – | – | – |
| 2026-09-30T11:17 | -15.24 | – | – | – |
| 2026-09-30T11:18 | -15.13 | – | – | – |
| 2026-09-30T11:23 | -15.04 | – | – | – |
| 2026-09-30T11:34 | -14.95 | – | – | – |
| 2026-09-30T11:46 | -14.85 | – | – | – |
| 2026-09-30T11:47 | -14.75 | – | – | – |
| 2026-09-30T11:54 | -15.11 | – | – | – |
| 2026-09-30T11:58 | -15.47 | – | – | – |
| 2026-09-30T12:04 | -15.83 | – | – | – |
| 2026-09-30T12:09 | -15.73 | – | – | – |
| 2026-09-30T12:15 | -15.64 | – | – | – |
| 2026-09-30T12:18 | -16 | – | – | – |
| 2026-09-30T12:21 | -15.90 | – | – | – |
| 2026-09-30T12:22 | -15.75 | – | – | – |
| 2026-09-30T12:24 | -15.66 | – | – | – |
| 2026-09-30T12:26 | -16.02 | -1.64 | – | – |
| 2026-09-30T12:30 | -15.55 | -1.53 | -0.38 | – |
| 2026-09-30T12:38 | -15.91 | – | – | – |
| 2026-09-30T12:40 | -15.82 | – | – | – |
| 2026-09-30T12:44 | -15.73 | – | – | – |
| 2026-09-30T12:46 | -15.64 | – | -0.46 | – |
| 2026-09-30T12:50 | -16 | – | – | – |
| 2026-09-30T12:52 | -15.84 | – | – | – |
| 2026-09-30T12:54 | -15.75 | – | – | – |
| 2026-09-30T12:58 | -16.12 | – | – | – |
| 2026-09-30T13:00 | -16.03 | -1.81 | – | – |
| 2026-09-30T13:04 | -16.44 | – | – | – |
| 2026-09-30T13:07 | -16.32 | – | – | – |
| 2026-09-30T13:08 | -16.21 | – | – | – |
| 2026-09-30T13:11 | -16.11 | – | – | – |
| 2026-09-30T13:12 | -16.01 | – | – | – |
| 2026-09-30T13:15 | -16.39 | – | – | – |
| 2026-09-30T13:16 | -16.30 | – | – | – |
| 2026-09-30T13:17 | -16.21 | -2.06 | – | – |
| 2026-09-30T13:21 | -16.12 | – | – | – |
| 2026-09-30T13:26 | -16.51 | – | – | – |
| 2026-09-30T13:27 | -16.51 | -2.06 | -0.46 | -0.60 |
| 2026-09-29T09:47 | – | -0.03 | – | – |
| 2026-09-29T09:56 | – | -0.44 | – | – |
| 2026-09-29T11:52 | – | -0.73 | – | – |
| 2026-09-29T14:02 | – | -1.29 | – | – |
| 2026-09-29T15:48 | – | -1.38 | – | – |
| 2026-09-30T09:25 | – | -1.06 | – | – |
| 2026-09-30T12:33 | – | -2.09 | -0.30 | – |
| 2026-09-30T12:43 | – | -1.82 | – | – |
| 2026-09-30T12:47 | – | -1.64 | – | – |
| 2026-09-30T13:06 | – | -1.98 | – | – |
| 2026-09-29T14:03 | – | – | 0.18 | – |
| 2026-09-30T07:27 | – | – | – | -0.60 |
| Strategy | Trades | Net win rate | Average net result | Net P&L | Of which commission |
|---|---|---|---|---|---|
| Market making | 180 | 46.7% | −0.92 pip | −16.51 USD | −14.49 USD |
| Momentum burst | 15 | 33.3% | −1.37 pip | −2.06 USD | −1.06 USD |
| Spike reversion | 4 | 50.0% | −1.15 pip | −0.46 USD | −0.24 USD |
| Session breakout | 2 | 0% | −3.00 pip | −0.60 USD | −0.12 USD |
| All | 201 | 45.3% | −0.98 pip | −19.62 USD | −15.91 USD |
The first 72 trades ran on a demo account with a higher commission (about 1.1 pip per round trip); the rest ran on the raw-pricing account at 0.6 pip. Amounts are in US-dollar equivalent. Outside market making the samples are far too small to judge the strategies. They are included for completeness.
Execution was not the problem. Over 21 market orders the time from sending the order to receiving the fill was 286 ms on average (median 276 ms, range 224–397 ms), and it was the same from a home PC and from a cloud container. Average slippage was −0.06 pip, slightly in our favour: 43% of fills had no slippage, 43% were better than the signal price and 14% were worse.
Why “market making” fails on a CFD broker
The market-making strategy had a take-profit of 1.5 pips and a stop of 3 pips. After commission a take-profit earned 1.04 pip on average and a stop lost 3.66 pips, so the strategy needed 3.66 / (1.04 + 3.66) ≈ 78% take-profit hits to break even. On the raw-pricing account it got 63%.
The reason is visible in the markouts, the move of the mid price after each fill:
Market making: where the mid price goes after a limit fill
Mean mid-price move in the direction of the filled position; the move needed just to pay the commission is far above anything observed.
Show data · values in pips
| Seconds after the fill | 29 Sep, 68 fills | 30 Sep, 42 fills |
|---|---|---|
| 0 | 0.0000 | 0.0000 |
| 1 | -0.02 | 0.04 |
| 5 | -0.07 | -0.09 |
| 30 | -0.14 | -0.02 |
| 120 | -0.22 | 0.24 |
| 60 | – | 0.14 |
On an exchange a resting limit order sits in a queue and can earn the spread. On a CFD broker a limit order behaves like a triggered order: it fills once the broker’s quote reaches it. At that moment the mid had already moved about 0.03 pip past our price, so no spread was captured. On the first day the price then kept moving against the position (−0.14 pip after 30 seconds, −0.22 pip after 2 minutes). On the second day it drifted slightly our way, but with 42 fills that is indistinguishable from zero. On both days the markout was far below the 0.6 pip that each round trip costs in commission.
Order-book imbalance: real, and tiny
Academic work on limit order books (for example Cont, Kukanov and Stoikov, 2014, and Gould and Bonart, 2016) shows that the balance between bid and ask sizes at the best price predicts the next price move. We tested it on EUR/USD with Dukascopy tick data, which includes best bid and ask sizes: 44 sampled working days between March and September 2026, 07:00–19:00 UTC, split into 22 training and 22 test days, with bucket thresholds taken from the training period only.
Order-book imbalance predicts the next move, but only by hundredths of a pip
Mean EURUSD mid-price change 60 s ahead by level-1 volume-imbalance bucket, compared with the round-trip cost of trading on it.
Show data · values in pips
| Level-1 imbalance (bid size − ask size) / (bid size + ask size), deciles of the training period | training, 30 Mar – 28 Jun | test, 29 Jun – 28 Sep |
|---|---|---|
| D1: I < -0.5 | -0.10 | -0.03 |
| D2: -0.5 to -0.33 | -0.03 | -0.02 |
| D3: -0.33 to -0.2 | -0.03 | -0.01 |
| D4: -0.2 to 0 | -0.0077 | 0.0057 |
| D5-7: 0 to 0.2 | 0.0048 | 0.0031 |
| D8: 0.2 to 0.33 | 0.01 | 0.01 |
| D9: 0.33 to 0.5 | 0.02 | 0.03 |
| D10: I >= 0.5 | 0.04 | 0.02 |
The predictor is real. In the test period the relationship had a Newey–West t-statistic of 16.2 one second ahead and 4.4 sixty seconds ahead. It is also tiny: the difference between the top and bottom decile was 0.014 pip at one second and 0.042 pip at sixty seconds.
- As a taker signal (buy when the imbalance is in the top decile, sell in the bottom, with a 250 ms delay) it earned 0.01–0.02 pip before costs and lost 0.87 pip per trade after the spread and the commission, in every horizon we tried.
- As a filter for market making it helped a little: in the test period the two-minute markout improved from about −0.34 pip when the imbalance was against us to about −0.15 pip when it was on our side. That is still far below the 0.6 pip commission, and the improvement did not show up for buy orders in the training period.
What the broker’s depth feed actually shows
We then recorded the depth-of-market stream from the broker’s demo server around the clock. Over 53,686 recorded book states the best level showed 1,000 units on both sides in 99.75% of cases, and the total displayed size was 396,000 units on each side in 99.93% of cases. Each side is one of a few fixed ladders of sizes (such as 1k, 15k, 30k, 50k, 100k and 200k). Size imbalance is therefore zero by construction, and the only thing that changes is how far apart the price levels are.
Whether that spacing predicts anything is the last open question for this strategy. We wrote the test down before looking at any results. It measures the predictive strength of the spacing skew, a taker version and a market-making filter. The decision rule was fixed in advance: the signal counts only if it is tradeable after costs, meaning a taker strategy with a positive average after costs, or a favourable market-making third with a two-minute markout above the 0.6-pip commission. A significant t-statistic alone does not count. The test runs automatically once 24 hours of non-rollover recording are available. The first scheduled run is on 3 October 2026, and its result will be added here.
Caveats
- Demo accounts only. Demo fills, latency and slippage can be better than on a live account. No real money was traded.
- A short live sample. About 28 hours and 201 trades, most of them market making. The other strategies traded 2 to 15 times.
- Conditions changed during the sample. Two demo accounts with different commissions, a change of exit rules after three hours, market making switched off overnight and back on the next morning, and a move of the bot from a home PC to the cloud.
- Different feeds. The tick backtest used a cTrader demo price feed with next-second fills and no queue model. The imbalance test used Dukascopy’s own feed, a different venue from the broker we traded with.