Here is a cost that catches almost everyone who treats a future like a stock: you cannot just “buy and hold” it, because it expires. To keep a position you must roll it, and depending on the term structure, rolling quietly costs or pays you. This is the contango bleed, and it has destroyed many naive strategies.
Rolling, and the two regimes
To roll is to close your expiring contract and open the same position in the next month. What it costs depends on the term structure (Lesson 3):
- Contango (the normal state). The next month trades above the near month. Rolling a long means selling the cheaper near and buying the dearer next — so you pay the gap every roll. Example: near-month 24,138, next-month 24,290 — rolling a long costs 152 points. Annualised, that is roughly +0.6% per month ≈ 7.6% per year of drag on a long position. This is the famous “contango bleed”, and it is why “just hold the future” quietly loses money even when the spot price is flat — especially brutal in natural gas and crude, which are often in steep contango.
- Backwardation. The next month trades below the near month. Rolling a long means selling the dearer near and buying the cheaper next — so you gain the gap. Example: near 24,138, next 24,010 — rolling a long gains 128 points, a tailwind of ~6.4%/year. Backwardation signals tight current supply, and a long who rolls is effectively paid to hold.
Roll yield
This cost-or-gain from rolling is called roll yield, and it is a real, countable component of your return — separate from the price move itself:
def roll_yield(near, far, side="long"):
# cost (negative) or gain (positive) of rolling, per roll, in points
gap = far - near
return (-gap if side == "long" else gap)
roll_yield(24138, 24290, "long") # -152 (contango: a long PAYS to roll)
roll_yield(24138, 24010, "long") # +128 (backwardation: a long is PAID to roll)Your total return on a held-and-rolled future ≈ price change + roll yield. In persistent contango, the roll yield can quietly eat all of a modest price gain. Any strategy that holds futures across expiries must account for roll yield — ignoring it is how backtests lie and real accounts bleed.
How to roll properly
- Roll a few days before expiry, not on the day. Liquidity thins and volatility spikes at expiry, so rolling early gets you better fills and avoids expiry-day chaos.
- Watch the term structure to time it — if you are long and the market is in steep contango, be aware you are paying each roll and factor it into whether the trade is worth holding.
- For backtesting, use a continuous, back-adjusted series (Lesson 11). If you naively glue monthly contracts together, the price jumps at every roll and your backtest invents fake profits/losses. Back-adjustment shifts the old data by the roll gap so the series is continuous and your results are real.
Pitfalls
- “Buy and hold the future” in contango. The roll bleed erodes you steadily even if spot is flat. Futures are not stocks; holding has a carrying cost.
- Rolling on expiry day. Thin liquidity and wild volatility give bad fills. Roll a few days early.
- Backtesting on naively-stitched contracts. The roll gaps create fake P&L. Use a back-adjusted continuous series or your backtest is fiction.
Recap
Futures expire, so holding a view means rolling to the next contract, and the term structure decides the cost: in contango a rolling long pays the gap (the ~7.6%/yr contango bleed), in backwardation it gets paid. This roll yield is a real part of your return — total ≈ price change + roll yield. Roll a few days early, know your term structure, and backtest on a back-adjusted continuous series.
Next: Lesson 7 — Directional Strategies, putting it together with trend, breakout and mean-reversion systems.