October 19, 2026 · execution

The Rebalance Looked Cheap Until We Counted the Spread

The Rebalance Looked Cheap Until We Counted the Spread

At 09:00 UTC, our cross-sectional crypto futures strategy wanted to rotate $200,000 across ten perpetual contracts. The backtest reported 4 basis points of trading cost. The paper run, using the same signal and venue fee tier, estimated a little over 20.

Nothing was wrong with the fee schedule. We had counted the fee and called it execution cost. That mistake survived because the strategy traded liquid markets, used modest orders, and turned over only once a day. Each phrase sounded reassuring until we asked what price the orders could actually get.

The rebalance was a useful one to pull apart. It showed how a low-fee backtest can still understate costs by treating the market price as if it were available in unlimited quantity.

We started with the order list. The strategy was long the five strongest contracts and short the five weakest, with equal dollar weights. Most positions needed about $20,000 of adjustment. One contract needed just $3,400; another needed $31,000. The backtest valued every trade at the bar’s closing price, then charged the venue’s 2-basis-point taker fee on each side.

Cost componentBacktest assumptionPaper estimate
Venue fee, per side2 bp2 bp
Spread, per side0 bpAbout 4 bp
Impact and delay, per side0 bpAbout 4 bp
Estimated round trip4 bpAbout 20 bp

The paper estimate was not a promise of a fill. It was a cost model: the observed spread around the decision time, plus an impact estimate based on order size and recent traded volume, with a small allowance for the time needed to submit and execute. That last allowance was deliberately rough. A model that makes uncertainty disappear is more comforting than useful.

We checked the spread first. The signal was calculated from a completed one-minute bar, so the strategy could only submit after that bar closed. For each contract, we took the best bid and ask available when the order would have reached the venue. The midpoint was a benchmark, not an executable price. A buy starts at the ask; a sell starts at the bid.

That difference alone explained about 8 basis points round trip for the average name. It varied across contracts and minutes. The most liquid contract was closer to 2 bp per side. A thinner one widened to 9. Applying one spread number to every order would have hidden the very variation we needed to see.

Then came size. A $20,000 market buy can often cross the best ask without consuming much depth, but “often” depends on the book at that moment. We estimated impact by walking the visible levels in the snapshot: how much quote value sat at each price, and what volume-weighted average price would result from consuming enough levels to fill the order. For the $31,000 adjustment, the snapshot implied about 6 bp of additional cost against the midpoint. The $3,400 order barely moved the estimate.

And the snapshot itself was imperfect. It showed displayed depth, not hidden liquidity or what would remain when our order arrived. Crypto books can change between observation and submission; a backtest built from sparse snapshots cannot reconstruct that queue precisely. We used the book to bound a plausible cost, then compared it with paper fills to see whether the estimate was systematically optimistic.

For a market order, the midpoint is a measuring stick. It is not the price you bought or sold at.

We ran the rebalance through three assumptions. Crossing the spread but ignoring depth gave a 12 bp round-trip estimate. Walking the displayed book raised it to 18 bp. Adding the venue fees and a 2 bp allowance per side for delay brought the estimate to about 22 bp. The exact figure depended on the order list and the book snapshot; the direction did not.

That wasn’t a reason to abandon the strategy. It was a reason to rerun the backtest with costs that respond to the trades it proposes. We added spread and impact estimates per order, kept fees separate in the report, and recorded the benchmark, timestamp, and assumed execution method beside each simulated fill.

In the next paper run, one contract’s order was split into smaller clips because the first clip consumed more depth than expected. The strategy’s signal did not change. Its execution did, and that was enough to change the cost attribution.

If your backtest says a rebalance costs only the fee, ask it to show the price, size, and available liquidity behind every fill. A convincing answer starts with those particulars, not a single number labeled “slippage.”

market impactbid-ask spreadbacktestingportfolio rebalancingcrypto futures
← All posts