Continuous Futures
Individual futures contracts expire on fixed dates, so a long price history for any product is really a chain of short contract lives glued together. A continuous futures contract is that glued series, one uninterrupted price line built from many expiring contracts. How the gluing is done matters because every method trades off something: smooth charts versus real traded prices, percentage accuracy versus dollar accuracy, simplicity versus fidelity. This article explains Kibot's method, walks through a concrete rollover, and contrasts it with the three adjustment methods customers commonly layer on top.
The Problem
If you simply concatenate the raw contract data, you get price gaps at every rollover, sometimes several points wide. These discontinuities break technical indicators, distort backtesting results, and make long-term charting unreliable. A continuous series resolves the visual and analytical problem, but the way it does so determines what the resulting prices actually mean.
Kibot's Approach
Kibot builds continuous contracts using calendar-based unadjusted rollover (per Kibot's continuous-futures reference). There is a fixed rollover date per contract, determined by a published offset from the expiration date, not by volume crossover or open interest. There is no back-adjustment: prices are the actual traded prices from each contract, with no shifting, scaling, or blending applied to historical data. And every rollover date is published, so customers can verify exactly when each contract switch occurred.
The Kibot Faq reinforces this: "The continuous contract rolls to the next contract as is. We do not back-adjust previous contract's data to current contract. Rollover is either on expiration date or 1-10 days before the expiration date" (per Kibot's Historical Futures FAQ). This gives a clean baseline, the data reflects what actually traded, and customers can apply any adjustment method on top if their strategy requires one.
Complete rollover rules, including the offset in trading days for every instrument, are documented in Futures rollover rules.
How Rollover Works
Here is a step-by-step example using the ES (E-mini S&P 500) continuous contract. ES trades on a quarterly cycle (see futures symbols for month codes) with four contracts per year:
| Code | Month |
|---|---|
| H | March |
| M | June |
| U | September |
| Z | December |
The rollover offset for ES is 5 trading days before expiration. Walking through a specific roll: ESH26 (March 2026) expires on March 20, 2026. With a 5-trading-day offset, the continuous contract switches on approximately March 13, 2026. On March 13 the continuous series stops using ESH26 prices and begins using ESM26 (June 2026) prices. All data before March 13 comes from ESH26 (and earlier contracts). All data from March 13 forward comes from ESM26.
Because this is unadjusted data, there will typically be a small discontinuity at the rollover point. The new contract may trade at a slight premium or discount to the expiring one, reflecting carry costs, interest rates, and expected dividends. For ES, this gap is usually a few points. For other instruments, it can be larger or smaller depending on the term structure.
Building Your Own Continuous Contracts
Kibot provides all individual contract files, so customers can construct their own continuous series with whichever adjustment method suits the strategy. Three approaches are widely used.
Panama Canal (Constant) Adjustment
At each rollover, calculate the absolute price difference between the expiring and incoming contracts, then add or subtract that constant from all prior data points. For example, if the expiring contract closes at $4,520 and the new contract closes at $4,525 on rollover day, a gap of +$5, subtract $5 from every historical price in the series to align old data with the new contract level. Repeat at each rollover; the adjustments accumulate over time.
The strengths are simplicity of implementation, elimination of price jumps, and preservation of absolute dollar-value spreads between bars, which is useful for strategies that measure moves in points or dollars. The weaknesses are that the same dollar shift applied to all price levels distorts percentage returns, that cumulative adjustments can push early prices to unrealistically low or even negative values over many rollovers, and that the entire historical series must be recalculated after each new rollover.
Ratio (Proportional) Adjustment
At each rollover, calculate the ratio of the new contract price to the old contract price and multiply all prior data by that ratio, conceptually similar to how stock prices are adjusted for splits. Using the same example: expiring contract closes at $4,520, new contract closes at $4,525, ratio is 4525 / 4520 = 1.001106. Multiply every prior price by 1.001106. At the next rollover, compute a new ratio and apply it cumulatively to all prior data.
The strengths are that percentage returns and volatility characteristics are preserved, prices cannot go negative, and this method is better suited to strategies that rely on percentage-based calculations (RSI, rate of change, Sharpe ratio). The weakness is that absolute price levels are altered, early prices in a long series will drift significantly from their original traded values, which matters if the strategy depends on exact dollar prices or historical support/resistance levels from the original contract data.
Calendar-Weighted Blending
Instead of switching contracts on a single day, blend prices from the old and new contracts over a transition window (typically 3 to 10 trading days). Define a transition window, say, 5 trading days before the rollover date. On the first day of the window, the price is 100% from the expiring contract and 0% from the new contract. Each day, shift the weighting linearly: 80/20, 60/40, 40/60, 20/80, and finally 0/100. The blended price on any given day = (weight_old x price_old) + (weight_new x price_new).
The strengths are the smoothest possible transition, no recalculation of historical data (each price is fixed once computed), and good behavior for strategies sensitive to sudden price dislocations. The weaknesses are implementation complexity, synthetic prices that never actually traded on any exchange, the need for simultaneous access to both contracts during the transition window, and a slight bias during the blend period compared to pure contract data.
Which Method Should You Use?
| Method | Best For | Avoid When |
|---|---|---|
| Panama canal | Point-based strategies, channel breakouts | Long history (cumulative drift) |
| Ratio | Percentage-return strategies, volatility analysis | Dollar-precise levels matter |
| Calendar blend | Smooth indicator signals, mean reversion | You need real traded prices |
| Unadjusted (Kibot default) | Support/resistance, spread analysis | Long-term trend following across many rollovers |
Kibot notes an open-source Python tool in development to automate these conversions. See Data format converter.
Key Takeaways
- Kibot's continuous series is unadjusted: prices are the actual traded prices from each contract, with no back-adjustment.
- Rollover dates are calendar-based, determined by a published per-contract offset (typically 1–10 trading days before expiration), not by volume crossover.
- Every rollover is a published, verifiable event. Customers can reconstruct or override any roll using Kibot's individual contract files.
- Unadjusted data will show small discontinuities at each roll, expected, not a data error.
- Customers who need smooth series can layer Panama (constant), Ratio (proportional), or Calendar-Weighted blending on top; each has distinct tradeoffs.
- For ES, the rollover offset is 5 trading days before the third-Friday expiration.
Related
- Futures expirations, When each contract expires; determines rollover timing.
- Futures specifications, Per-contract rollover offsets and trading-month cycles.
- Futures symbols, Month codes and how ESH26, ESM26, etc. are constructed.
- Identifying the front month, How to compute the active contract on any date and join the continuous file to the underlying individual contracts.
- Adjusted vs unadjusted data, Broader discussion of why Kibot leaves raw prices untouched.
- Data format converter, Planned tool to automate the three adjustment methods.
- Data sources, Where Kibot's contract data originates.