TRADING LAB / NOTESResearch note 01 · 6 October 2026
Execution costs · Historical case study

Backtest turnover costs: 36 ETH/USDT comparisons.

In one ETH/USDT backtest, a simple drift rule returned 18.15% before costs. After modelled fees and slippage, it returned 3.54%.

Reducing trading helped against that rule. It still failed to beat a much simpler alternative: buying and holding.

Download all 36 results · CSV
August 2026 · same 100 USDT starting capital
Drift · before costs+18.15%
Drift · after costs+3.54%
Buy & hold · after costs+32.09%

Historical simulation. Costs: 10 bps fees + 5 bps slippage on each traded side. These are assumptions, not a broker bill.

36comparisons, including losses
2 monthsAugust & September 2026
100 USDTindependent starting cash per run

The same signal, a different decision to trade

The simple rule holds ETH when its estimated 30-hour drift is positive and cash when it is negative. A hold band adds a cost threshold and a noise threshold: small changes keep the previous position instead of triggering another switch.

We tested the full band, each threshold removed separately, and both removed. Cash and buy & hold provide controls. Parameters were fixed before retrieving the data for this comparison; these past months remain exploratory evidence.

August · 744 hourly bars

RuleEnd value
USDT
Net returnMax drawdownEntriesCosts
USDT
Drift rule103.54+3.54%-13.79%4412.67
Full hold band110.92+10.92%-5.92%10.32
Without cost threshold113.85+13.85%-10.27%51.59
Without noise threshold115.28+15.28%-11.85%31.04
Buy & hold132.09+32.09%-5.92%10.35
Cash100.00+0.00%0.00%00.00

All values include modelled execution costs. Max drawdown is the largest peak-to-trough fall in the simulated path. Each row starts with its own 100 USDT.

The drift rule opened 44 positions and traded 8,444.33 USDT of notional. Its modelled costs were 12.67 USDT. The full hold band opened once and cost 0.32 USDT, but buy & hold ended with 132.09 USDT versus the band’s 110.92.

September · 720 hourly bars

RuleEnd value
USDT
Net returnMax drawdownEntriesCosts
USDT
Drift rule90.99-9.01%-11.61%3810.75
Full hold band108.52+8.52%-9.10%10.31
Without cost threshold92.59-7.41%-13.86%51.41
Without noise threshold102.83+2.83%-7.49%30.88
Buy & hold108.52+8.52%-9.10%10.31
Cash100.00+0.00%0.00%00.00

The full band and buy & hold are identical in September: both stay long for the entire month and finish at 108.52 USDT. The band’s positive return therefore does not demonstrate extra forecasting skill.

Removing the cost threshold improves August’s result by 2.93 USDT but reduces September’s by 15.94 USDT. The trade-off changes with the path: fewer trades can avoid friction and can also delay a useful switch.

Fees are not the whole difference

The drift rule’s August gross-to-net return gap is 14.61 percentage points. That is different from the 12.67 USDT sum of modelled costs. Costs change the capital available for later returns; the final equity gap is not simply the fee bill.

For each execution, the direct cost model is traded notional × (fee bps + slippage bps) / 10,000. Compounding then affects the rest of the path.

Two fixed stress checks

At 35 bps per side, the drift rule finishes with 86.83 USDT in August and 78.16 USDT in September. With an extra hour of execution delay at the original costs, the full band’s August end value falls from 110.92 to 107.62 USDT. The CSV includes every stress case; none was selected as a new default after seeing these results.

What this comparison does—and does not—show

This is a worked example of cost sensitivity and controls, not a recommendation to trade the rule or evidence of future profits.

Use the data to challenge your own result

Keep the gross result, the actual modelled cost total and the final net result separate. Compare the same starting capital, time window and execution assumptions. Include a simple market-exposure control before crediting a strategy with an edge.

Download all 36 results · CSV

The download contains aggregate simulation results, including losing variants, exposure, turnover and independently recomputed end values. Raw market bars and internal operating records are not included.

Read the CSV correctly

Background: Binance public market-data documentation · Backtesting.py documentation on commission and spread.

Check your own candle data

Before analysing turnover and costs, check your input for duplicate timestamps, ordering problems and inconsistent OHLC prices. Our checker accepts your own JSON rows and reports findings without repairing the data.

These optional paid tools check internal consistency. They do not verify market accuracy, trading costs, complete exchange calendars or future returns. Free alternatives may be sufficient. This article and its 36-result CSV remain free.

Support this open research

If this worked example saved you time, you can leave a small tip. Suggested amount: 3 USDC. The article and all 36 results remain free; support does not buy a subscription, trading advice or an additional service.

Native USDC on Base only · Network ID 8453. Use an existing compatible wallet and check the network, token and recipient before sending. Your wallet may charge a network fee.


View recipient on BaseScan

You can also select and copy the address above. This page never connects to your wallet or initiates a transaction.

Check the USDC token

Base mainnet contract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. Confirm it against Circle’s official contract list.

Already bought the offline kit? Existing order and download access remains available using your original private recovery link. New Lightning and AgentMart sales have ended.