EdgeVeris
Menu

FUTURES BACKTESTING · AN INSPECTABLE RESEARCH WORKFLOW

Backtest futures with
the assumptions exposed.

Before trusting the equity curve, check the contract, the fills and the dollars.

For systematic traders and Python strategy developers, EdgeVeris connects strategy inputs, bar-based backtests, cost analysis and validation reports. This guide shows what to inspect, what the current engine does, and what it does not model.

01 · CONTRACTWhat was actually traded?

Outright symbol, units, session and period.

02 · EXECUTIONCould this fill occur in the model?

Information timing, resolution and exit order.

03 · ACCOUNTINGDoes every dollar reconcile?

Quantity, fees, slippage and net P/L.

BUILD THE LEDGER BEFORE JUDGING THE STRATEGY

What is futures backtesting?

Futures backtesting applies trading rules to historical observations under a specified execution and accounting model. The output is a conditional simulation, not a record of orders that actually traded. A useful result lets you trace the final balance back to the contract, signal, entry, exit, quantity and costs of each trade.

A root symbol is not a contract

A root identifies a product family. An outright adds a contract month and year, with an expiry and settlement process. Different expiries can trade at different prices and liquidity. A continuous research symbol is a constructed series, not one instrument you could buy throughout its history.

Price movement is not account P/L

For a linear contract quoted in price points, gross P/L equals signed price change × point value × contracts. Tick value equals tick size × point value. Account margin is collateral, not a substitute for the contract multiplier or a cap on loss.

LONG(exit − entry) × point value × quantitySHORT(entry − exit) × point value × quantity

These are pre-cost price P/L formulas in the contract’s quoted currency. Currency conversion, daily settlement cash flows and account margin rules require their own treatment. The worked example below uses one USD-denominated specification.

Check the exchange’s actual contract specification rather than inferring units from a ticker. CME Group’s contract P/L explanation shows why tick size, contract size and quantity must agree.

EdgeVeris today: the reference engine evaluates a single instrument using explicitly configured contract units and whole-contract long/short targets. Hosted data selection is bounded by the available catalogue. A symbol definition or chart menu is not a promise of available history or data rights.

AN AUDIT YOU CAN APPLY TO ANY ENGINE

What can break a futures backtest?

These checks separate an accounting or modeling error from a weak trading idea. Correct calculations can still rest on unrealistic assumptions.

On a narrow screen, focus this table and scroll horizontally. Each row connects a failure to a concrete check and the current product boundary.

Issue → consequence → inspection → implementation
IssueWhy it mattersExample failureHow to test itEdgeVeris handling / limit
Contract multiplierA price point is not a dollar.A 2-point move is treated as $2 instead of 2 × point value × quantity.Recalculate one winning and one losing trade from prices.The reference engine uses configured point value. A wrong specification still produces wrong economics.
Tick valueTicks and points are different units.Multiplying tick count by point value overstates P/L.Check tick value = tick size × point value.The cost model converts ticks using contract units. T18 checks a declared tick value against the entered tick size × point value, not an exchange-specification database.
Double-counted costsFill prices may already include slippage.Subtracting slippage again from already-net results.Reconcile raw prices, recorded costs and final net P/L.Reports distinguish recorded costs and modeled scenarios. In T18, unknown included costs prevent alternative-cost reconstruction.
Quantity mismatchCosts scale with contracts, not row count.Charging one contract on every trade in a variable-size ledger.Sum matched entry/exit contract quantities, not just trades.Whole-contract targets and quantity-aware costs are supported. T18 handles fully closed matched quantities, not a partial-fill ledger.
Session boundariesAn overnight session spans civil dates.Resetting a daily loss limit at UTC midnight rather than the intended trading-day boundary.Inspect trades either side of the session rollover and a weekend.The current data layer assigns trading days using a Chicago-time rollover. It is not a complete exchange-calendar service.
LookaheadThe signal must exist before the modeled fill.Using the completed bar high to buy at that same bar’s open.Compare information timestamps, signal time and earliest executable price.Reference-engine targets execute at the next bar open. This does not prove user Python is free from future-data leakage.
Continuous-series artifactsAdjusted research prices are not executable contract prices.Applying absolute stops to a back-adjusted history as if it were an outright.Record adjustment method and map every fill to an actual contract.No built-in continuous-contract construction or continuous execution is claimed. Use the explicitly bound outright dataset.
Roll gapsA contract switch can change quoted price without a tradeable gain.Booking the old-to-new contract price difference as strategy profit.Reconcile closing the old and opening the new contract, including costs.The supported single-outright workflow does not simulate a roll schedule. Joining files is not a roll model.
Contract selectionLiquidity and contract choice change through history.Choosing whichever expiry later produced the best backtest.Predeclare a selection rule and use only information then available.Exact dataset/symbol binding prevents silent substitution. It does not establish historical liquidity or remove selection bias.
Coarse-bar ambiguityOHLC does not reveal the order of extremes.Both stop and target are touched and the target is assumed first.Count ambiguous bars and compare finer data or adverse-order scenarios.Reference-engine same-bar conflicts use stop-first precedence. That is a policy, not observed tick order.
Optimistic same-bar fillsSignal time and order eligibility constrain fills.A close-generated signal is filled earlier inside that bar.Audit signal-to-entry timestamps and first-bar exit behavior.Next-open entries are explicit. Protective exits remain bar based, with disclosed gap and touch rules.
Missing slippageA zero-friction edge may not survive execution.Treating every market order as a guaranteed open-price fill.Stress entry and exit assumptions separately, then inspect net outcomes.Configured legacy tick-based or modern entry-only cash/percentage scenarios are available. They do not forecast liquidity, queue priority or market impact.
Current fees applied historicallyFee schedules and account arrangements vary.Calling today’s rate the exact cost of a past trade.Label the schedule, effective dates and any constant-rate approximation.Rates are configured assumptions, not an automatically verified archive of historical broker and exchange fees.
Timezone and DSTA local session can shift relative to UTC.Using one fixed UTC opening time all year.Test named-zone conversion around DST and early-close dates.UTC timestamps and named-zone trading-day assignment are used. Holiday and early-close coverage needs separate inspection.
Mixed resolutionsResampling can change signals, bar boundaries and exits.Researching on one interval but silently evaluating on another.Keep source interval, aggregation and evaluation interval with the result.Data and execution context are retained with inputs. A chart display interval is not proof of a supported calculation interval.

FIRST-PARTY UTILITY · T18

Six trades. Ten contracts. Every dollar accounted for.

This is the public cost tool’s synthetic, fully closed six-trade ledger, not market performance or a broker quote. Quantities vary. Each row’s gross P/L is already the total for that trade, so it must not be multiplied by quantity again.

Point value
$20 / point / contract
Tick size
0.25 points
Tick value
0.25 × $20 = $5
Combined fees
$2.50 / contract / side
Slippage assumption
1 tick / contract / side
Entry + exit
2 sides per round turn
USD totals for each complete trade
TradeContractsGross P/LFeesSlippageNet P/L
11$250.00$5.00$10.00$235.00
22$-120.00$10.00$20.00$-150.00
33$480.00$15.00$30.00$435.00
41$-85.00$5.00$10.00$-100.00
52$310.00$10.00$20.00$280.00
61$65.00$5.00$10.00$50.00
Total10$900.00$50.00$100.00$750.00
Gross P/L$900
Fees · 10 × 2 × $2.50$50
Slippage · 10 × 2 × $5$100
Net P/L$750

One additional tick on each side costs another $100. The unchanged ledger then nets $650. A $5 round-turn fee is equivalent to $2.50 on entry plus $2.50 on exit. It is not $5 on each side.

If the input is already net

Start with $750 net and known included costs of $150. Reconstruct $900 gross once, then apply the new total cost of $250 to obtain $650. Deducting that entire $250 directly from $750 would double-count the original $150.

If included costs are unknown

Do not guess the gross result. T18 can summarize the original net ledger, but alternative-cost reconstruction stays unavailable. Likewise, if slippage is embedded in execution prices, first establish which P/L and cost fields include it.

Open the free futures backtest cost audit → Change units, quantity, fee convention and slippage scenarios locally. No signup is required. The tool reconciles a fixed ledger. It does not generate fills, predict market impact, or re-run a strategy whose entries and exits would change under different execution.

Do not confuse the two cost models. T18 above applies its declared entry and exit slippage. The current EdgeVeris report scenario instead applies entry-only slippage, in currency per contract or a percentage of entry notional, and commission per side, in currency per contract or a percentage of traded notional. A saved modern scenario replaces the corresponding legacy cost fields rather than stacking them. Inspect the actual recorded model before comparing its results with a T18 scenario.

MORE DETAIL IS NOT PERFECT EXECUTION

One bar can hide two very different trades.

Suppose a long position is already open at 100, with a stop at 99 and a target at 102. A later bar has open 100, high 103, low 98 and close 101. Both of these illustrative paths fit those same four prices:

High first

  1. 100 open
  2. 103 high · target touched
  3. 98 low
  4. 101 close

Low first

  1. 100 open
  2. 98 low · stop touched
  3. 103 high
  4. 101 close

OHLC alone cannot identify which path occurred. Assuming the favorable sequence changes the trade outcome without adding evidence. Even knowing a level was touched does not establish that a real order filled there.

1-minute bars

Compact and useful for bar-based signals, but aggregate many possible price sequences. Stops and targets can both fall inside one bar.

1-second bars

Narrow the unknown sequence to smaller intervals, at greater data and computation cost. They are still OHLC aggregates, not the complete trade tape.

Tick / event data

Can reveal recorded event order, depending on the schema. Trades alone still do not reconstruct queue priority, available depth or your order’s impact.

EdgeVeris reference model: close-generated targets are applied at the next bar open. If stop and target are both reached in the same bar, the stop takes precedence. A stop gapped through is evaluated from the adverse open rather than its untouched level. These are explicit simulation rules, not a claim of tick-perfect fills. Finer source bars do not add an order-book simulator.

Keep the signal interval, execution interval and chart display interval distinct. Compare a sample of ambiguous trades before paying the computational cost of finer data. No empirical claim about how much a finer interval improves results is made here. See data feeds and execution models for the broader model-selection problem.

A LONG HISTORY NEEDS A CONTRACT POLICY

Continuous futures, rolls and trading sessions

A research series is not a fill contract

A continuous series joins successive expiries so an indicator can use a longer history. Unadjusted concatenation retains inter-contract gaps. Back-adjustment modifies earlier prices to reduce those discontinuities, changing the meaning of historical absolute price levels. The adjustment and roll rule must be recorded, not inferred from a chart’s smoothness.

A roll policy also needs a decision time. A volume-based switch must use information available when the choice was made, not the completed day’s volume before that day ended. Separate the series generating the signal from the actual contracts used for execution and P/L. A position roll means closing one contract and opening another, with the relevant prices and costs. See CME’s expiry and roll explanation and QuantConnect’s explicit distinction between a continuous symbol and its mapped contract.

Current EdgeVeris boundary: the supported hosted execution workflow binds an outright-contract dataset. It does not build continuous futures, choose a historical roll schedule or execute automatic rollover trades. Loading or charting a continuous series is not evidence of continuous-contract execution support. Do not treat concatenated files as an implemented roll model.

A trading day is not necessarily a calendar day

An evening session can belong to the following trading day. Session selection affects indicator resets, daily limits, overnight exposure and period comparisons. Record the named timezone, allowed trading hours and date assignment. A fixed UTC offset is not a year-round substitute for a timezone with daylight-saving rules. Holiday and early-close schedules can require exceptions.

Current EdgeVeris boundary: timestamps are normalized to UTC and the current futures data preparation assigns trading days using a 17:00 America/Chicago rollover with weekend handling. That is a trading-date convention, not a complete exchange holiday/early-close calendar or universal session filter. The reference engine uses supplied bars and signals. Session restrictions must be reflected in the prepared data or strategy logic and checked explicitly.

KEEP WITH YOUR RESEARCH RECORD

A practical futures backtest checklist

Use these checks before interpreting performance. The checklist remains readable without JavaScript and is formatted for printing with your browser’s Print command.

Data

  • Record the source, exact interval, schema and bar timestamp convention.
  • Check missing, duplicate and out-of-order observations.
  • Keep a reproducible data version. Verify permitted use separately.

Contract

  • Record the outright symbol, expiry and currency.
  • Verify tick size × point value = tick value.
  • Document selection, roll and adjustment rules, or explicitly state no roll.

Session

  • Specify the named timezone and trading-day rollover.
  • Check overnight trades, weekends, DST and early closes.
  • Align indicator resets, daily limits and evaluation boundaries.

Execution

  • State signal time and earliest possible entry.
  • State gap, touch and same-bar stop/target rules.
  • Inspect ambiguous trades rather than hiding them in aggregate P/L.

Costs

  • Reconcile a long and a short trade with their quantities.
  • Record per-side or round-turn fees and included cost components.
  • Stress slippage without deducting already-included costs twice.

Validation

  • Preserve code, input set, data and cost context together.
  • Record the search and fix rules before OOS evaluation.
  • Keep a genuinely untouched holdout and document remaining limitations.

ACTUAL EDGEVERIS IMPLEMENTATION

From Python inputs to an inspectable report.

Python supplies strategy logic. The backtest engine supplies the execution and accounting model. The analysis workflow then organizes the evidence. These are distinct responsibilities. EdgeVeris is a research application, not presented here as an open-source Python backtesting library.

  1. Bind the experiment. Select the available dataset and interval, code version, inputs and execution costs. Confirm the outright contract and period instead of assuming a root symbol implies continuous history.
  2. Prepare the strategy. The supported Python interface produces target positions from bars and inputs. Preserve the code and parameter values. See the reproducible Python backtest workflow. Code validation is not proof that arbitrary logic contains no lookahead.
  3. Inspect the Initial Backtest. Compare trades, quantities, exit reasons, gross/net results and cost assumptions. Reconcile at least one long and one short trade before searching parameters.
  4. Evaluate fixed choices. Optimization, Development/Validation, robustness, Monte Carlo and Final Holdout reports retain the selected context. Available portfolio diagnostics add synchronized strategy context. Downloadable reports collect supported stored evidence, not a guarantee of future returns.
Current EdgeVeris Strategy settings interface separating code version, data and costs, and the parameters of input set A.
What you can verify: code version, input values and data/cost context are separate selections. Genuine current component rendered with a synthetic UI fixture. It does not demonstrate available market coverage or a completed strategy run.
Current EdgeVeris Initial Backtest cost analysis showing recorded costs and modeled sensitivity for an anonymous synthetic regression fixture.
What you can verify: the Initial Backtest report exposes cost accounting and scenario sensitivity. Genuine current renderer with an existing two-trade synthetic regression fixture, separate from the six-trade T18 example. No customer trades or licensed market-price series are shown. This is interface evidence, not an empirical futures performance case.

No rights-cleared empirical futures demonstration is presented on this page. The public numerical example is synthetic and reproducible in T18. Available instruments, periods and permitted data use must be confirmed separately, not inferred from illustrative symbols or screenshots.

CHOOSE A MODEL THAT FITS YOUR QUESTION

What EdgeVeris does not model

  • Queue position, full depth and venue microstructure. A bar touching a price does not prove your limit order would execute. The current reference engine is not an order-book simulator.
  • Latency, market impact or capacity. Fixed slippage assumptions are stress scenarios, not a forecast of execution at a particular size or connection speed.
  • Tick-perfect event sequencing. Same-bar stop/target precedence is a declared policy. OHLC cannot supply an unobserved path.
  • Automatic continuous-contract construction and rollover execution. The current supported workflow uses an explicitly bound outright. It is not a multi-expiry roll engine.
  • Guaranteed historical fee and session accuracy. Configured rates and the current trading-date convention do not certify every historical broker schedule, holiday or early close.
  • Exchange margin, daily settlement and liquidation mechanics as a complete clearing model. Research P/L and report margin assumptions are not a complete broker or clearing-house model.
  • Future profitability. Clean accounting and a disclosed execution model are necessary checks, not proof of an enduring edge.

A useful fit

Systematic futures researchers and Python strategy developers who want to inspect bar-based assumptions, compare fixed inputs and carry results into validation. This can include algorithmic prop-trading research, without implying a simulated challenge pass will become a live pass.

A different tool may be needed

Discretionary chart replay as the primary workflow, high-frequency research requiring queue-position simulation, or strategies dependent on detailed multi-contract roll execution. No backtesting product can supply guaranteed profitable strategies.

CORRECT CONSTRUCTION IS ONLY THE BEGINNING

Now ask how much evidence supports the strategy.

This page asks whether the futures backtest was constructed correctly. The strategy validation framework asks how much confidence the evidence warrants, through search discipline, parameter stability, OOS, robustness and holdout protection. For practical next steps, read optimization for stability and walk-forward testing and reused holdouts.

Monte Carlo comes downstream. Resampling a flawed trade ledger cannot repair wrong costs, contract selection, fills or sessions. Once the ledger is credible, compare sampling assumptions with the free drawdown tool. The R03 synthetic study shows that dependence assumptions can change risk estimates even when the underlying trade outcomes are unchanged. It is methodological evidence, not a futures-market return claim.

Build a backtest you can inspect.

Keep code, inputs, assumptions and evaluation reports connected.

Implementation and synthetic product evidence reviewed October 8, 2026. This is research methodology, not investment advice.