Futures research guide

Futures Backtesting Costs: Commission, Slippage, Spread, and Position Size

Model futures commissions, spread, slippage, rolls, and position size with contract math, numerical examples, and conservative sensitivity checks.

Published · 1,479 words

Start with the contract’s price and tick arithmetic

A futures P&L model begins with the contract specification. The point value is the currency value of a one-point price change; the tick size is the minimum price increment; and the tick value is point value multiplied by tick size. The contract multiplier expresses how many underlying units one contract represents. Labels vary across markets, so store these quantities explicitly rather than inferring them from prices.

gross P&L = (exit price − entry price) × point value × contracts × direction
 tick count = (exit price − entry price) ÷ tick size
 gross P&L = tick count × tick value × contracts × direction

Use direction = +1 for long and −1 for short. With a $50 point value and a 0.25 tick, tick value is $12.50. A favorable 3.75-point move is 15 ticks and produces $187.50 per contract before costs. Test this arithmetic independently of the strategy.

Continuous derived data includes price_raw, back_adjustment, and price = price_raw + back_adjustment. Use adjusted prices for suitable signals, but the actual contract’s raw entry and exit prices for execution P&L. Applying the current back adjustment as though it were an executable historical price is incorrect.

Charge commissions and fees on every contract and side

A commission quoted “per side” applies on entry and exit. Round-turn cost is the complete entry-plus-exit charge per contract. Broker commission, exchange fees, clearing charges, and regulatory fees may be separate components. Model the total relevant to the account, and state whether each input is per side or round turn so it is not doubled.

commission and fees = contracts × (entry per-side cost + exit per-side cost)
net P&L = gross P&L − commissions and fees − spread/slippage costs − other modeled costs

Separate per-contract charges from per-order charges. A ticket fee behaves differently when five contracts are entered together rather than through five orders. Allocate costs to partial exits by actual executions. Currency conversion may matter when contract P&L and account capital use different currencies.

Frequent small trades are particularly sensitive to fixed charges. Report gross edge per trade in ticks alongside net edge after costs. This shows whether the strategy has a margin for error or depends on an implausibly low fee assumption.

Distinguish spread cost from order-type assumptions

The bid–ask spread is the difference between best ask and best bid. A marketable buy normally transacts at the ask and a marketable sell at the bid. Using midprice for both entry and exit can omit this cost. With midprice m and half-spread h, a simplified round trip pays h to buy and gives up h to sell: the full spread before additional impact.

A market-order model should cross the spread and add slippage appropriate to size and conditions. A limit-order model is not simply “zero slippage.” A buy limit below the ask may never execute, while a fill can occur during adverse movement. Simulate eligibility, trade-through or another defensible fill rule, and missed orders. A touch never guarantees a fill.

Midprice execution is a useful idealized benchmark, not the only result. Compare mid, spread-crossing, and stressed execution under identical signals to expose whether profitability survives realistic ordering.

Make slippage depend on conditions, not hope

Slippage is the difference between a defined reference price and modeled execution. It can reflect spread, impact, latency, order size, and movement between decision and execution. A constant one-tick penalty is auditable but may understate fast markets and overstate liquid periods. A conditional model can remain simple enough to explain.

Estimate a baseline in ticks, then increase it when spreads widen, volume falls, or short-term volatility rises. Order size relative to recent activity can provide another multiplier. Never cap slippage merely to preserve a backtest. Parameters should come from training-period evidence or explicit stress assumptions, not values that flatter the test period.

Model entry and exit separately. A stop during a rapid move may face worse conditions than a passive entry in a quiet session. Roll days, session opens, and announcements can change liquidity. If a required variable is unavailable, use a documented scenario assumption rather than manufacturing precision.

Include roll execution and contract-switch costs

A continuous-series transition is not a free accounting event. A portfolio must close the old contract and open the new one, paying commissions and friction on both sides. At the roll itself, charge the old-contract exit and new-contract entry; the original entry and eventual new exit are charged at their own executions.

The price difference between contracts is not automatically roll P&L. Back adjustment preserves a continuous-price convention, while realized P&L belongs to each contract leg. Record contract identifiers, raw execution prices, quantities, timestamps, and costs. Reconcile equity from those legs rather than from a jump in the adjusted series.

Roll slippage can differ from ordinary entries as liquidity migrates between contracts. Stress timing and cost independently. Moving a roll changes exposure and transaction costs; it is not a costless optimization knob.

Work through a complete numerical trade

A two-contract illustration

  1. Suppose the decision reference is a buy at 5,000.00 and a later sale at 5,004.50 for two contracts. Point value is $50 and tick size is 0.25, so tick value is $12.50. The reference-to-reference move is 4.50 points, or 18 ticks, giving 4.50 × $50 × 2 = $450 before execution costs.
  2. The modeled fills are 5,000.25 on entry and 5,004.00 on exit: one tick adverse on entry and two ticks adverse on exit. Slippage therefore costs (1 + 2) × $12.50 × 2 = $75. Commissions and fees of $2.00 per contract per side add 2 contracts × 2 sides × $2 = $8. Net P&L is $450 − $75 − $8 = $367.
  3. Cross-check the result from the fills: the 3.75-point fill-to-fill move produces $375 gross, less $8 of commissions and fees, for the same $367 net. Do not deduct slippage again after starting with those actual modeled fills. Add no separate spread charge if the fills already include spread crossing. Maintain a ledger with reference price, fill, and every cost component.

Stress results with conservative sensitivity tables

A single estimate creates false precision. Rerun identical signals and positions under several scenarios, varying assumptions individually and then combining adverse conditions. This illustrative grid is not a claim about any market:

Scenario     Commission/side   Entry slippage   Exit slippage   Roll slippage/side
Idealized    $0.00             0 ticks          0 ticks         0 ticks
Base         $2.00             1 tick           1 tick          1 tick
Conservative $3.00             2 ticks          2 ticks         2 ticks
Stressed     $4.00             3 ticks          4 ticks         3 ticks

Compare the scenarios on several dimensions:

  • Net P&L, maximum drawdown, and net expectancy per trade.
  • Trade count, including missed fills for passive orders.
  • Performance by year or regime, not just the full-sample total.

A robust result need not be unchanged, but its degradation and key sensitivities should be visible.

Do not choose the base case because it produces the preferred curve. Start with observed fees and defensible execution evidence, then locate break-even cost. Break-even slippage in ticks tells a reviewer how much execution deterioration gross edge can absorb.

Respect the limits of trade and bar data

Historical tick trades cannot reconstruct the historical order queue or full order book. In per-contract tick derived datasets, bid_sz and ask_sz are executed volume at bid and ask, not resting book sizes. They are not displayed liquidity available to a new order. Likewise, volume measures traded activity, not queue depth ahead of a simulated order.

Trade data cannot establish that a passive order filled merely because price touched its limit. Queue position, cancellations, hidden interest, and competing orders are unrecoverable from the tape. Bars summarize open, high, low, close, volume, and trade count, not order priority. The tick data versus OHLCV bars guide details their different uses.

Marketable-order scenarios can cross an estimated spread and apply stress; limit-order scenarios need uncertainty and non-fill cases. Never infer guaranteed execution from a bar extreme or tick size field. The available derived datasets and documentation define fields and intervals; execution realism comes from the model around them.

Translate net expectancy into a bounded position-size experiment

Position size multiplies both edge and model error. Before varying quantity, express net trade results in account currency and estimate losses under gaps, stop slippage, and correlated positions. Contract granularity matters: rounding to whole contracts changes risk in discrete steps.

Research can compare fixed one-contract trading, volatility-scaled quantity, and equity-based quantity without prescribing a choice. Define maximum position, margin and cash constraints, correlated-exposure rules, and behavior after losses. Recalculate only at stated decision times using available information. Charge every additional contract, and consider whether slippage should worsen with size.

Evaluate outcome distributions, not just final return. Drawdown, worst daily loss, margin utilization, and concentration reveal dependence on a few fortunate trades. These simulations are analytical tools, not personalized recommendations; they show how mechanics, costs, and uncertainty interact before capital is exposed.