Skip to main content

The Carry Killed the Arbitrage

13 min read Blog 10 sections
Two EUR/USD price lines — futures and spot — converging at the September futures expiration date, with the basis gap shaded purple and an AI annotation noting the carry cost.
A professional FX trader sat down with us last quarter for a feedback session on the simulator. He poked around the order ticket, scrolled through the fee log, opened and closed the futures contract panel a few times. Then he asked the question that turned a product demo into this article:

"Can your simulator backtest a cash-and-carry basis trade? Long SPOT, short futures, pocket the basis at expiry."

That was the entire spec. One sentence. We backtested it — and discovered, two months and 53 swap charges of simulated time later, that we had quietly built a different trade than the one he'd described. The AI assistant inside the app delivered the verdict — "the carry killed the arbitrage" — and a $17 hole in the test account agreed with it.

This is the diary of why "long SPOT" and "long CFD" look identical on the chart and behave nothing alike in the fee log, how a UI-first backtesting simulator and an integrated AI co-pilot made the gap visible, and why the next test we're queuing up — true SPOT at 100x retail leverage — is the version of this trade the pro actually meant.

What he asked for, and the assumption nobody flagged

The thing about a pro's one-sentence strategy is that to him, the sentence is complete. It contains a structure, a hedge, an exit condition, and an implicit warning about every way it could go wrong. To anyone newer to the desk, it sounds like free money. Hedged. Mechanical convergence. Pocket the spread. What's not to like?

There's also one assumption inside that sentence that none of us flagged at the time: when a pro says long SPOT, he means a real cash position with no daily holding cost. When a retail trader on a margin-enabled broker tries to do the same trade, they almost always end up long a CFD — a contract that tracks spot tick-for-tick on the chart but carries an overnight swap charge in the fee log. Same picture, completely different cost structure.

We didn't catch that distinction when we set the test up. The simulator did, eventually — through the per-trade fee log and an AI assistant that walked us through what we were actually looking at. That gap, between what the pro said and what we built, is the whole story.

The hypothesis: if we're hedged, we should win the basis

Reconstructing the trade from his sentence: same notional long EUR/USD spot and short EUR/USD futures for September 2022. Directionally flat — whether the euro rallies or collapses, one leg gives back exactly what the other leg makes.

The futures contract was trading roughly 40 pips above spot. Convergence at expiry isn't optional; it's mechanical. So if we just held both legs to September 21, the gap had to close, and we'd walk away with that 40-pip premium.

We opened the long leg on the simulator's spot panel — which, like every retail platform, is actually a CFD with overnight swap enabled — and asked the AI assistant inside the app to formalise the strategy.

AI assistant: "What you are describing is a classic Cash-and-Carry Arbitrage. The logic is convergence — by definition, as a futures contract approaches expiration, its price must converge with spot. If futures trade higher (contango), you sell the expensive one and buy the cheaper one. You aren't betting on direction. You're betting that the gap will close."

So far the pro's one-liner and the AI's textbook agreed. Then the AI added a footnote that turned into the entire story:

"The most critical part is cost of carry. To hold a long CFD position, you pay overnight swap fees. If those fees are higher than the basis you captured, you lose money even if the prices converge."

Filed away. Not yet worried.

The first AI mistake — and why it mattered

When we asked whether the simulator could actually run this, the assistant's first answer was no:

"The backtesting app is currently tracking a single instrument. To accurately backtest a basis trade, the software would need to simultaneously track two different data feeds — the CFD price and the specific futures contract price — calculate a synthetic PnL, and factor in swaps."

It wasn't wrong about most simulators. It was wrong about this one — even our own AI didn't immediately recognise what it was looking at.

We sent it the side panel:

FX Futures
Current Contract EXP Date   Wed Sep 21 2022
Last Trade                  Mon, 19 Sep 2022 14:00 GMT
Days to EXP                 80
EUR/USD (spot)              1.04232
EUR-USD (Current CNT)       1.04630
Basis (pips)                39.8

The assistant rewrote its answer in real time:

"I stand corrected. Looking at the specific data you've provided, your version of the app does provide the exact tools needed to track a basis trade. Since you have the basis in pips, the expiration date, and the swap log, you can quantify whether this trade will be profitable."

That moment was the demo. The pro's sentence got us to the trade. The AI's textbook answer got us the strategy name. Neither would have been enough on its own. What got us to understanding was an assistant that updated when the evidence on the screen contradicted it, and then walked us line-by-line through numbers that were already in front of us.

That's what "UI-first" actually means in practice. The data is on the canvas. The AI reads it with you. The pro's one-sentence wisdom becomes something you can take apart instead of something you have to take on faith.

Why this trade was even possible

A regular backtester would have failed this test on day one. ForexThrive's simulator showed us, in one panel:

  • Spot (CFD) price — live tick.
  • Current futures contract price — live, labelled with its expiration.
  • Basis (pips) — pre-computed, updated each tick.
  • Days to expiration — counting down.
  • Per-trade fee log — every overnight swap, separated from the position's mark-to-market.

That last detail is the whole reason this article exists. Without a fee log that's distinct from price PnL, we would have looked at the balance, seen +$44.50, called the trade a win, and walked the pro away with exactly the wrong lesson about his own strategy.

Watching it converge

We opened the trade. Long 12,500 EUR/USD CFD at 1.04828. Short 12,500 EUR/USD futures at 1.05240. Locked basis: ~40 pips. Important to flag now for what comes later: that 12,500-unit size used a tiny fraction of the simulator's available margin. We were running it lean on purpose.

Then we fast-forwarded.

By September 8, 2022 — two months in, two weeks before expiry — the side panel told the story:

Start (July) Sept 8
Futures 1.04630 1.00030
Spot 1.04232 0.99974
Basis 39.8 pips 5.6 pips
Net price PnL $0.00 +$44.50

The euro had collapsed almost four big figures during those two months. It didn't matter. The futures-short leg made $651.25; the CFD-long leg lost $606.75. The hedge worked exactly as the pro had implied. The basis closed from 40 to 5.6 pips, on schedule.

We asked the assistant to summarise.

"The strategy worked perfectly. The gap shrunk from ~40 pips to ~6 pips. You have successfully captured almost the entire price divergence. The optimal move now would be to close both positions simultaneously to lock in the $44.50 profit before the daily fees eat any more of it."

Reasonable advice. There was just one thing the AI hadn't priced in.

The carry trap

We pushed back: the CFD swap log was in a different ledger from the account balance. The +$44.50 was price PnL only. The fees were a separate column the AI hadn't summed.

It owned the mistake and rebuilt the math:

"You are right. I was looking at price PnL. The cost of carry is being tracked in a separate log. Let me recalculate.

  • Standard-day swap: ≈ −$0.85 × 43 days = −$36.55
  • Triple-swap days (Wednesdays): ≈ −$2.50 × 10 days = −$25.00
  • Total estimated swap cost: −$61.55

Real profit = $44.50 − $61.55 = −$17.05"

There it was. The basis converged exactly as the textbook said it would. We captured every pip of premium we had locked in. And the trade still finished underwater because the cost of holding the long leg for 80 days was more expensive than the gap we had bought.

"You have just encountered the biggest risk in basis trading: negative carry. Even though the price divergence converged, the cost of holding the position was more expensive than the premium you captured. The carry killed the arbitrage."

But he said SPOT, not CFD

Here's the realisation the carry trap forced us to have. The pro had been very specific. He said "long SPOT, short futures." We opened a long position on the only spot-style instrument a retail-flavoured simulator gives you — a CFD. They look identical on the chart. They print the same tick. They share a price feed. But the pro's strategy and the trade we executed were not the same trade.

A textbook cash-and-carry basis arbitrage uses a real spot (cash) position with no daily holding cost. Convergence + zero carry = clean profit. That's the trade the pro was describing in his head. It's also a trade most retail traders never actually do, because retail brokers don't give them cash spot — they give them a CFD with an overnight swap line item that ticks against them every day the position is held.

Our friend hadn't fully connected the dots between "the pro said SPOT" and "we built it on CFD" when the order went in. The simulator's per-trade fee log is what made the gap visible. He got it the moment the AI summed the swap column: the −$61.55 wasn't a flaw in the strategy. It was a feature of the instrument we'd substituted into the strategy. The pro's sentence is correct for SPOT. It's a losing trade on CFD. Same chart, different cost structure.

The good news for the test: our simulator can model true SPOT for this kind of arbitrage by setting the overnight fee on the long leg to zero. That single configuration flip is the difference between executing the pro's actual strategy and executing the retail-leveraged version of it that the carry kills. Which means the next test writes itself.

A fraction of the margin — and the 100x trap

Before we get to that next test, one more thing the pro pointed out as we wrapped up. The 12,500-unit position we opened used a tiny fraction of what the simulator's margin would allow on the same balance. On a real retail account with leverage enabled, the same margin comfortably holds a hundred times the size — and an unprepared retail trader who'd just been told "long spot, short futures, pocket the basis" by someone they trusted is exactly the trader who'd open the full size, because it looks hedged and mechanical and free.

So we ran the extrapolation right there on screen, with the swap column still on:

Our test (12,500 units) 100x retail leverage (1,250,000 units)
Locked basis ~40 pips ~40 pips
Price PnL at convergence +$44.50 +$4,450
Standard swap (43 days × ≈$0.85) −$36.55 −$3,655
Triple-swap (10 Weds × ≈$2.50) −$25.00 −$2,500
Net result −$17.05 −$1,705

Same trade. Same convergence. Same swap mechanics. The only thing that changes is position size — and therefore the absolute size of the loss.

At our test size, the carry trap is a $17 lesson — annoying, instructive, cheap. At a fully-leveraged retail size on the same starting balance, it's $1,705 vanishing from an account that the trader was sure had a "hedged, mechanical, can't-lose" trade in it. And that's only the swap damage; we haven't yet modelled what happens when the equity curve drifts during the 80 days and the broker triggers a partial liquidation on the wrong leg before expiry. That's its own failure mode.

This is what makes the carry trap dangerous instead of just disappointing. The leveraged retail trader doesn't lose because they were wrong about the strategy. They lose because they were right about the strategy, executed it on the wrong instrument, and got eaten by a fee column they didn't read. The pro's one sentence is a perfectly accurate description of the trade he meant. It just isn't a description of what the retail-CFD version of that trade costs.

What's next for the test: SPOT, no swap, 100x leverage

The next session we're queuing up in the simulator is the trade the pro actually described. Same starting state, same instruments, same convergence — but with the long leg's overnight fee zeroed out to model true SPOT, and the position scaled up to 100x what we ran here, the kind of size a retail trader on a fully-leveraged margin account would actually open after hearing this is "basically free money."

That run should look very different. With the carry trap defused — no overnight swap on the long leg — the +$4,450 of price PnL becomes the actual net result instead of dissolving into a $1,705 loss. Same trade. Different instrument. Opposite outcome. That's the textbook cash-and-carry working the way the pro described, and it's the demonstration we couldn't show him in this session because we hadn't yet flipped the right switch.

After that, the pro left us with a shopping list of variants worth backtesting:

  • Bigger basis — a pair where the gap is closer to 100 pips, not 40, to give the trade real room.
  • Positive carry — a short CFD with positive swap (where you get paid to hold the position) flips the sign on the entire equation, even before zeroing fees.
  • Shorter time to expiration — fewer days means fewer standard swaps and fewer triple-swap Wednesdays.

We'll publish those runs as we do them.

Why this is what learning a market actually looks like now

The pro was right. Long SPOT, short futures, pocket the basis at expiry. Every word of that sentence is true. It's also the kind of true that quietly assumes you've already internalised contango, swap mechanics, the difference between SPOT and CFD, the difference between price PnL and net PnL, and what happens when you scale all of it by a leverage factor.

If you haven't, the sentence is a trap dressed as a tip.

This is where UI-first trading simulators with real backtesting and extended customisation earn their keep. They turn a one-sentence pro tip into something a less-experienced trader can take apart and rebuild safely:

  • The UI puts both instruments and the basis on one screen, so the strategy is a number ticking down, not an abstraction.
  • The backtesting runs 80 days of real historical data in minutes, with no rent on the line.
  • The customisation — separate fee logs, contract expirations, swap schedules, configurable position sizing and leverage, and the ability to zero overnight fees to model true spot — exposes the costs that get hidden in worse tools and lets you run the actual trade your mentor described, not just the closest retail approximation of it.
  • The AI sits on top of all of it, reads what you're reading, gets things wrong sometimes, and updates when you push back.

That stack is how a retail trader closes the gap on a pro's one-liner — not by reading another article about cash-and-carry, but by taking the trade in a place where losing teaches you something instead of breaking you. Our friend didn't get the full picture from the sentence alone. He got it from the simulator session. The pro who walked out of our office that afternoon already knew everything in this post. The point of building this app is so the trader who hears his sentence next doesn't have to learn it the expensive way.


Reported from a feedback session with a professional FX trader at the ForexThrive office. The full conversation log, the trade's fee log, and the upcoming SPOT-mode 100x leverage follow-up are all reproducible inside the simulator from the same starting state.