---
title: "Calendar Spreads and Curve Trades"
book: "Strategies I: Equities and Futures"
subject: quant
language: en
chapter: 21
exercises: 8
source: https://one-course.com/books/quant/8/en/chapter/21-calendar-spreads-and-curve-trades
---

# Chapter 21 — Calendar Spreads and Curve Trades

On 20 April 2020 the May WTI crude oil contract opened at $17.73 a barrel and settled at minus $37.63, the first negative price in its 37 years; the CFTC’s staff found an oversupplied market, a collapse in demand and a delivery point, Cushing in Oklahoma, whose working storage had been near capacity since March. A calendar spread, long one delivery and short the next, looks like the safest trade in futures: the two legs share almost all their risk and the spread moves slowly. On the EIA’s thirty-nine years of WTI settlements a rule that bets on the spread’s mean reversion earned a Sharpe ratio of 0.30 before costs and 0.05 after, from 1986 to 2019; in 2020 it lost 43% of its capital at a 10% volatility target, most of it in March, as storage filled. The build is `firm.curvestrat`.

## 21.1 Trading the shape of a curve

A futures curve has a level, a slope and, further out, a curvature. An outright position trades the level; a calendar spread (Book 1, chapter 19) trades the slope between two deliveries and is almost immune to the level.

**Definition 21.1 (Curve trade).**

A *curve trade* is a position in two or more deliveries of the same futures contract (or points of a yield or volatility curve) whose weights cancel exposure to the curve’s level, so that its P&L comes from changes in the curve’s shape: a calendar spread for the slope between two deliveries, a butterfly for the curvature among three.

**Proposition 21.2 (A calendar spread trades the change in carry).**

If the log futures price for delivery $T$ is $\ln F_t(T) = x_t - c_t (T - t) + g(T)$, with $x_t$ a common level, $c_t$ the carry and $g$ a seasonal component fixed by the delivery date, then a position long delivery $T_a$ and short delivery $T_b > T_a$ has a log P&L of

$$
d\big(\ln F_t(T_a) - \ln F_t(T_b)\big) = (T_b - T_a)\, dc_t .
$$

**Proof.** The level $x_t$ and the seasonal terms cancel or are constant; $d[-c_t(T_a - t) + c_t(T_b - t)] = (T_b - T_a)\,dc_t$ since the terms in $c_t\,dt$ cancel. ∎

A long spread (near minus far) profits when the curve moves toward backwardation and loses when contango deepens; its size scales with the distance between deliveries. What moves the slope in commodities is inventory: Gorton, Hayashi and Rouwenhorst found that the convenience yield falls, nonlinearly, as inventories rise, and that the basis and past returns reflect the state of inventories and forecast risk premiums. Low inventories make the curve backwardated and steep; high inventories push it into contango up to the cost of storage, the full carry of Book 3, chapter 10.

## 21.2 Mean reversion of spreads

**Definition 21.3 (Spread mean reversion).**

*Spread mean reversion* is the tendency of a spread between related prices to return toward a normal level after a deviation; a spread mean-reversion strategy sells the spread when it is high relative to its recent mean and buys it when it is low.

Trading a WTI spread over decades needs contract identity. The EIA publishes generic series: contract 1 is whichever expires next, and on the day after an expiry it becomes the old contract 2. [Listing 21.1](#lst-s1-calendar-spreads-and-curve-trades-pair) numbers the contracts by serial, holds the nearest pair clear of expiry (1–2, moving to 2–3 five trading days before the nearby expires), and follows the same two contracts from one day to the next, so that a roll of the generic series is not mistaken for a price move. The log spread $\ln(F_{\text{near}}/F_{\text{far}})$ of the held pair is persistent but mean-reverting: its daily autocorrelation is 0.949, a half-life of 13.3 trading days.

The rule ([Listing 21.2](#lst-s1-calendar-spreads-and-curve-trades-band)) computes the log spread’s z-score against its last 20 days, enters against it beyond 1.5 (long the spread when it is unusually low, short when high), and leaves when the z-score comes back inside 0.5 or changes sign. The position is sized at entry to 10% annual volatility from an EWMA forecast of the spread’s dollar P&L, and each unit traded costs one cent a barrel (assumed).

| storage filter: no long spread when carry is below | none | $-80\%$ | $-40\%$ | $-20\%$ |
| --- | --- | --- | --- | --- |
| Sharpe ratio before costs, 1986–2019 | 0.30 | 0.33 | 0.31 | 0.39 |
| Sharpe ratio after costs, 1986–2019 | 0.05 | 0.08 | 0.05 | 0.14 |
| share of days with a position | 47% | 47% | 45% | 41% |
| 2020: March | $-58.3\%$ | $-20.8\%$ | $-10.5\%$ | $-1.5\%$ |
| 2020: April | $+22.9\%$ | 0.0% | 0.0% | 0.0% |
| 2020: the year | $-42.7\%$ | $-28.1\%$ | $-17.8\%$ | $-8.8\%$ |

The mean reversion is real but small: a Sharpe ratio of 0.30 before costs over 34 years, and one cent a barrel per unit traded takes most of it ([Figure 21.1](#fig-s1-calendar-spreads-and-curve-trades-cumulative)). The record is also not stable: after costs the rule had a Sharpe ratio of 0.47 from 1986 to 2004 and $-0.32$ from 2005 to 2019, so it had been losing for fifteen years before storage ran out. The spread is a slow, cheap-looking trade whose edge is the size of its costs.

![The WTI calendar-spread mean-reversion rule after costs, 1986–2020, at a 10% volatility target: cumulative sum of daily returns, without a storage filter and with the filter that turns out best in hindsight. Data: s1_curve.book.](https://one-course.com/images/onecourse/chapters/quant-8/s1-calendar-spreads-and-curve-trades/fig-b1888327bf22.svg)

***Figure 21.1.** The WTI calendar-spread mean-reversion rule after costs, 1986–2020, at a 10% volatility target: cumulative sum of daily returns, without a storage filter and with the filter that turns out best in hindsight. Data: `s1_curve.book`.*

## 21.3 Storage limits and the 2020 negative price

**Definition 21.4 (Storage-limit risk).**

*Storage-limit risk* is the risk that a commodity’s contango widens beyond the cost of storage when storage runs out, so that a position betting on the spread narrowing (long the nearer delivery, short the farther) loses without the bound that full carry normally provides.

Contango is normally bounded: when the far contract is more expensive than the near one plus the cost of storing oil until then, a trader with storage buys the near, stores it and sells the far. When storage is full, nobody can do that trade, and nothing stops the spread. That is what the rule met. The pair’s carry was $+4.5\%$ a year in early January 2020; the rule went long the spread on 10 January as it fell below its recent mean, and stayed long, on and off, until 23 April ([Figure 21.2](#fig-s1-calendar-spreads-and-curve-trades-carry2020)). By 31 March the carry was $-216\%$ a year; on 20 April, $-302\%$; on 21 April, the day after the May contract settled at $-\$37.63$, the June–July pair’s carry was $-575\%$. The rule lost 58.3% of capital in March and made back 22.9% in April, as it re-entered at smaller sizes and the spread partly recovered.

![The annualised carry, 12 (F_ near/F_ far), of the WTI pair the rule held in the first half of 2020, from the EIA’s settlements, and the days on which the unfiltered rule was long the spread. Data: s1_curve.wti.](https://one-course.com/images/onecourse/chapters/quant-8/s1-calendar-spreads-and-curve-trades/fig-94095b1f250c.svg)

***Figure 21.2.** The annualised carry, $12\ln(F_{\text{near}}/F_{\text{far}})$, of the WTI pair the rule held in the first half of 2020, from the EIA’s settlements, and the days on which the unfiltered rule was long the spread. Data: `s1_curve.wti`.*

A filter that forbids and closes long spreads in very steep contango cuts the loss: to 28.1% with a threshold of $-80\%$ a year, 17.8% with $-40\%$, 8.8% with $-20\%$, which also has the best Sharpe ratio before 2020 (0.14 after costs). It would be easy to present the $-20\%$ filter as the strategy. It was chosen after seeing 2020, among four candidates, on a sample with one storage crisis. Before 2020 the carry was below $-20\%$ on 13.1% of days and below $-40\%$ on 3.5%. The defensible version of the filter comes from the mechanism and not from the backtest: measure how close storage is to full (inventories, the cost of storage) and stop betting against contango when it is.

## 21.4 Curve trades in the synthetic universe, rates and volatility

On `firm.synthfut`’s ten commodities the proposition holds exactly: the log spread between the nearby and the contract twelve months out moves one for one with the planted carry (a correlation of 1.00), because the model’s curves have no noise of their own. The carry reverts to each market’s mean with a half-life of a year, so a spread book against the spread’s 252-day z-score has a Sharpe ratio of 1.00 before costs traded daily; after 4 basis points per leg per unit traded it loses ($-0.29$). Rebalanced monthly, it keeps 0.76 of its 1.05 before costs. A slow signal traded daily pays for noise in its own position.

The same structure appears in other curves. In interest rates, [curve trades](#def-s1-calendar-spreads-and-curve-trades-curve) are steepeners and flatteners between two maturities, or butterflies, weighted to be neutral in duration (Book 2); their P&L is the change in the curve’s slope, as here. In volatility, VIX futures are usually in contango, because they carry a premium over the expected spot VIX. Simon and Campasano found that from 2006 to 2011 the VIX futures basis did not forecast changes in spot VIX but did forecast changes in VIX futures prices, and that shorting VIX futures in contango and buying them in backwardation, hedged with mini-S&P 500 futures, was highly profitable and robust to costs. The volatility curve’s storage limit is a crash: the contango that pays the short is exactly what reverses when volatility spikes.

## 21.5 Strategy files

**Strategy file 21.1 — Front–second spread mean reversion.**

**Who pays you, and why.** Hedgers and index rolls that push the near spread away from its normal level for a few weeks.

**Instruments and venues.** Calendar spreads in liquid commodity futures (WTI, Brent, products, grains), traded as listed spreads.

**Signal.** The log spread’s z-score against its recent mean (20 days).

**Sizing and execution.** Enter beyond 1.5, leave inside 0.5; sized at entry to a volatility target; the pair clear of expiry.

**Costs.** The listed spread’s bid–ask, a tick or more; they are the size of the edge.

**How it dies.** Storage limits, when contango widens without bound; costs.

**Horizon, capacity, infrastructure.** Weeks; capacity in the front spreads is large; contract-identity data.

**Backtest honestly.** Contract identity through expiries; spread quotes and costs; the storage crises in the sample.

**Sources.** CFTC interim staff report (2020); this chapter: 0.30 before costs and 0.05 after, 1986–2019; $-42.7\%$ in 2020.

**Strategy file 21.2 — Curve steepener in commodity futures.**

**Who pays you, and why.** The inventory cycle: the slope reverts as stocks are drawn or rebuilt.

**Instruments and venues.** Near and twelve-month commodity futures.

**Signal.** The slope against its one-year mean; inventory data.

**Sizing and execution.** Long the spread when contango is unusually deep and inventories are falling, short when backwardation is unusually steep; rebalanced monthly.

**Costs.** Two legs, two rolls.

**How it dies.** Inventories that keep building; storage limits.

**Horizon, capacity, infrastructure.** Months.

**Backtest honestly.** Inventory data as released, with revisions; the seasonal pattern of the curve separated from its slope.

**Sources.** Gorton, Hayashi and Rouwenhorst (2013); this chapter: 0.76 on the synthetic universe, monthly.

**Strategy file 21.3 — Roll-period calendar spread.**

**Who pays you, and why.** [Index funds](https://one-course.com/books/quant/8/en/chapter/10-index-rebalancing#def-s1-index-rebalancing-fund) and ETFs that roll large positions on published schedules, pressing the spread they roll.

**Instruments and venues.** The front spreads of index commodities during the roll windows.

**Signal.** The calendar of index rolls (chapter 9’s flows applied to futures).

**Sizing and execution.** Take the other side of the roll before it, unwind during it.

**Costs.** Low; competition from other front-runners.

**How it dies.** [Index funds](https://one-course.com/books/quant/8/en/chapter/10-index-rebalancing#def-s1-index-rebalancing-fund) spreading their rolls over more days or dates.

**Horizon, capacity, infrastructure.** Days.

**Backtest honestly.** The index rules and roll dates in force at each date.

**Sources.** No performance figure verified.

**Strategy file 21.4 — Volatility futures curve trade.**

**Who pays you, and why.** Buyers of volatility protection who pay a premium over the expected VIX.

**Instruments and venues.** VIX futures, hedged with equity index futures.

**Signal.** The basis: futures over spot VIX (contango) or under it (backwardation).

**Sizing and execution.** Short in contango, long in backwardation, equity exposure hedged; small against crash risk.

**Costs.** Moderate; rolls.

**How it dies.** Volatility spikes that reverse contango in a day.

**Horizon, capacity, infrastructure.** Weeks.

**Backtest honestly.** Futures settlements, not the spot index; hedge ratios estimated out of sample; spikes in the sample.

**Sources.** Simon and Campasano (2014).

## 21.6 Tutorial: minus thirty-seven

**Goal.** Build the WTI calendar spread by contract identity from the EIA’s generic series, trade its mean reversion with and without a storage filter, follow it through 2020, and repeat the trade on the synthetic curves. **End state:** the table and the two figures.

1. **Contract identity**: serial numbers, the held pair and its P&L through expiries. `def serials (expiry): e = np.asarray(expiry, bool ) m = np.zeros(len (e), int ) m[1 :] = np.cumsum(e[:-1 ]) return m def _price (C, t, serial, m): j = serial - m[t] return C[t, j] if 0 <= j < C.shape[1 ] else np.nan def pair_pnl (C, m, near: int = 0 , days_before: int = 5 , expiry=None ): """C (T, K) generic settlements. near = 0: contracts 1-2 (2-3 within `days_before` of the nearby's expiry).""" C = np.asarray(C, float ) T = len (C) exp_days = np.flatnonzero(np.asarray(expiry, bool )) if expiry is not None else np.array([], int ) held = np.zeros(T, int ) # serial number of the near leg chosen at the close of t for t in range (T): nxt = exp_days[exp_days >= t] roll = len (nxt) > 0 and nxt[0 ] - t < days_before held[t] = m[t] + near + (1 if roll else 0 ) pnl = np.zeros(T) spread = np.full(T, np.nan) for t in range (T): a = held[t] fn, ff = _price(C, t, a, m), _price(C, t, a + 1 , m) if fn > 0 and ff > 0 : spread[t] = np.log(fn / ff) if t > 0 : b = held[t - 1 ] leg = [_price(C, t, k, m) - _price(C, t - 1 , k, m) for k in (b, b + 1 )] pnl[t] = leg[0 ] - leg[1 ] return np.nan_to_num(pnl), spread` **Listing 21.1.** Calendar-spread P&L by contract identity. code/firm/curvestrat/firm_curvestrat.py
2. **The rule**: enter beyond a z-score, leave inside a smaller one, with a filter on long spreads. `def band (z, vol, enter: float = 1.5 , leave: float = 0.5 , target: float = 0.10 , block=None ): z, vol = np.asarray(z, float ), np.asarray(vol, float ) p = np.zeros(len (z)) cur = 0.0 for t in range (len (z)): if not np.isnan(z[t]): if cur == 0.0 and abs (z[t]) > enter: cur = -np.sign(z[t]) * target / max (vol[t], 1e-9 ) elif cur != 0.0 and (abs (z[t]) < leave or np.sign(z[t]) == np.sign(cur)): cur = 0.0 if block is not None and block[t] and cur > 0 : cur = 0.0 p[t] = cur return p` **Listing 21.2.** The band rule with a storage filter. code/firm/curvestrat/firm_curvestrat.py
3. **Run** `persistence()` , `book(threshold)` for the four filters, `synthetic(252, monthly)` both ways, and `fig_curve.py` .

**What to change next.** Replace the carry filter with EIA inventory data at Cushing; add a butterfly on contracts 1, 2 and 3; charge the listed spread’s quoted bid–ask instead of a fixed cent.

## 21.7 Build: calendar spreads

**Purpose.** Calendar spreads by contract identity, their P&L through expiries, mean-reversion signals and a regime filter.

**Interface.** `serials(expiry)`, `pair_pnl(C, m, near, days_before, expiry)`, `zscore(x, window)`, `positions(z, vol, target, cap, block)`, `band(z, vol, enter, leave, target, block)`, `spread_carry(log_spread, days)`.

**Rules.** A contract keeps its serial number through expiries; the pair moves out before the nearby’s last days; signals use data up to $t$.

**Acceptance tests.** `code/firm/curvestrat/tests/`: a hand-made curve through an expiry, with the pair’s P&L by hand; the z-score, the band’s entry and exit and the filter; carry from a log spread.

**Stretch.** Butterflies; inventory filters; listed-spread quotes.

Sources and further reading

- CFTC Division of Market Oversight and Office of the Chief Economist, *Interim Staff Report on Trading in NYMEX WTI Crude Oil Futures Contract Leading up to, on, and around April 20, 2020* , November 2020.
- G. B. Gorton, F. Hayashi and K. G. Rouwenhorst, “The fundamentals of commodity futures returns”, *Review of Finance* 17(1), 2013.
- D. P. Simon and J. Campasano, “The VIX futures basis: evidence and trading strategies”, *Journal of Derivatives* 21(3), 2014.
- US Energy Information Administration, NYMEX WTI crude oil futures daily settlements, contracts 1 to 4.

## 21.8 Exercises

**Exercise 21.1 ★.**

A log spread has a daily autocorrelation of 0.949. What is its half-life in trading days?

**Solution of Exercise 21.1.**

$\ln 0.5/\ln 0.949 = 13.2$ trading days (13.3 from the unrounded coefficient).

**Exercise 21.2 ★.**

Two contracts 21 trading days apart have a log spread of $-0.01$. What is the annualised carry? On 21 April 2020 the held pair’s carry was $-575.5\%$ a year: what was the ratio of the near price to the far one?

**Solution of Exercise 21.2.**

$-0.01 \times 252/21 = -0.12$, a contango of 12% a year. A carry of $-575.5\%$ is a log spread of $-5.755 \times 21/252 = -0.48$, so the near price was $e^{-0.48} = 0.62$ times the far one.

**Exercise 21.3 ★.**

Why does the generic series “contract 1 minus contract 2” mislead a spread backtest on the day after an expiry?

**Solution of Exercise 21.3.**

On that day contract 1 is a different contract (yesterday’s contract 2): the change in “contract 1 minus contract 2” mixes the old and new pairs, and the jump between them is not a P&L anyone earned. The spread must be followed by contract identity.

**Exercise 21.4 ★★.**

The unfiltered rule has Sharpe ratios of 0.30 before costs and 0.05 after, at about 10% volatility. Roughly how much do costs take each year?

**Solution of Exercise 21.4.**

About $0.30 \times 10\% - 0.05 \times 9.9\% = 2.5\%$ a year, most of the gross return.

**Exercise 21.5 ★★.**

Why did the rule lose in March 2020 and gain in April?

**Solution of Exercise 21.5.**

In March contango widened far beyond anything in the rule’s twenty-day window: the rule was long the spread (betting on narrowing) while it kept widening as storage filled. In April it re-entered with smaller positions, sized on the much higher volatility, and part of the spread’s move reversed.

**Exercise 21.6 ★★.**

Why is the $-20\%$ filter’s result not evidence that it works?

**Solution of Exercise 21.6.**

It was chosen among four thresholds after seeing the one storage crisis that decides the result; any threshold between normal contango and the 2020 levels would look good in hindsight. Evidence would need a threshold fixed in advance from the mechanism (storage costs, inventories) and tested on crises not used to choose it.

**Exercise 21.7 ★★★.**

*Coding.* Run `synthetic` daily and monthly. Why does the same signal lose after costs daily and earn 0.76 monthly?

**Solution of Exercise 21.7.**

Daily, the z-score’s small day-to-day changes move the position every day, and at 4 basis points per leg per unit traded the turnover costs more than the slow signal earns ($-0.29$ after costs against 1.00 before). Monthly, the position changes twelve times a year; the signal, whose information decays over a year, loses little by waiting, and 0.76 of 1.05 survives.

**Exercise 21.8 ★★★.**

*Find the flaw.* “The front spread has mean-reverted every month for twenty years; we can run it at ten times leverage because the legs hedge each other.”

**Solution of Exercise 21.8.**

The legs hedge the level, not the slope. When storage runs out the slope has no bound, and at ten times leverage a move like March 2020 (58% of capital at a 10% volatility target) would be a multiple of the capital. Twenty years without a storage crisis is not evidence of none.

## 21.9 Problem: Minus Thirty-Seven

**Problem 21.1.**

Weekend problem — a spread meets a storage limit

The EIA’s WTI settlements, the synthetic curves and the public record.

**Part I — Curves.**

1. Define a [curve trade](#def-s1-calendar-spreads-and-curve-trades-curve) and [spread mean reversion](#def-s1-calendar-spreads-and-curve-trades-mr) .
2. State and prove the proposition on calendar spreads and carry.
3. What did Gorton, Hayashi and Rouwenhorst find about inventories?
4. What bounds contango, and when does the bound fail?

**Part II — The WTI spread.**

5. How is the spread followed by contract identity?
6. How persistent is the log spread?
7. Describe the rule and its costs.
8. Give its Sharpe ratios before and after costs, 1986–2019.

**Part III — 2020.**

9. What did the CFTC’s staff report find about 20 April 2020?
10. Define [storage-limit risk](#def-s1-calendar-spreads-and-curve-trades-storage) .
11. Describe the rule’s path through March and April 2020.
12. What did each filter do, and why is the best one suspect?

**Part IV — The verdict.**

13. State the *named result* : the spread strategy’s Sharpe ratio before 2020 and its loss in April 2020.
14. What would a defensible filter use?
15. What do the synthetic curves show about trading speed?
16. What did Simon and Campasano find about the VIX futures basis?
17. What is the volatility curve’s equivalent of a storage limit?
18. Which strategy file depends on [index funds](https://one-course.com/books/quant/8/en/chapter/10-index-rebalancing#def-s1-index-rebalancing-fund) ’ rules?
19. How does this chapter’s carry relate to chapter 20’s?
20. In one sentence: what does a calendar spread hedge, and what does it not?

**Solution of Problem 21.1.**

1. Positions in several deliveries neutral to the level, trading the shape; the return of a spread toward its normal level.
2. $d(\ln F(T_a) - \ln F(T_b)) = (T_b - T_a)\,dc$ , since the level and seasonal terms cancel.
3. Convenience yields fall nonlinearly as inventories rise; the basis and past returns reflect inventories and forecast premiums.
4. The cost of storage (full carry); it fails when storage is full.
5. By serial number: the pair clear of expiry is held and followed from one day to the next.
6. A daily autocorrelation of 0.949, a half-life of 13.3 days.
7. A 20-day z-score, entry beyond 1.5, exit inside 0.5 or on a sign change, sized to 10% volatility, one cent a barrel per unit traded.
8. 0.30 and 0.05.
9. The May contract settled at $-\$37.63$ , the first negative price in 37 years, amid oversupply, a demand collapse and storage at Cushing near capacity.
10. The risk that contango widens without bound when storage runs out.
11. Long the spread from 10 January, carry falling to $-216\%$ by 31 March and $-575\%$ on 21 April; $-58.3\%$ in March, $+22.9\%$ in April.
12. Losses of 28.1%, 17.8% and 8.8% for thresholds of $-80\%$ , $-40\%$ and $-20\%$ ; the best was chosen after the fact.
13. **Named result.** From 1986 to 2019 the WTI spread mean-reversion rule had a Sharpe ratio of 0.30 before costs and 0.05 after; in 2020 it lost 58.3% of capital in March, made back 22.9% in April, and lost 42.7% over the year at a 10% volatility target.
14. Inventories and storage costs, fixed before the test.
15. A slow signal must be traded slowly: $-0.29$ daily, 0.76 monthly after costs.
16. The basis did not forecast spot VIX but did forecast VIX futures returns; the hedged contango trade was profitable.
17. A volatility spike that turns contango into backwardation.
18. The roll-period calendar spread.
19. Chapter 20 traded the level of carry across markets; a calendar spread trades its change within one market.
20. It hedges the curve’s level, not its slope, and the slope is unbounded when storage runs out.

## 21.10 Interview questions

**Interview question 21.1 ★ researcher.**

What determines the slope of a commodity futures curve?

**Solution of Interview question 21.1.**

Storage costs and interest (the upper bound on contango), the convenience yield of holding inventory (which rises as inventories fall, giving backwardation), seasonality of supply and demand, and risk premiums paid by hedgers.

**Interview question 21.2 ★★ developer.**

How would you store futures data so that spread backtests follow contracts correctly through expiries?

**Solution of Interview question 21.2.**

One series per contract (by delivery month), with its expiry and first notice dates, plus a roll calendar; generic series are derived views, never the stored truth, and every P&L is computed contract by contract.

**Interview question 21.3 ★★ trader.**

You are long the WTI front spread and contango widens by 50% a year in two days. What do you check, and what do you do?

**Solution of Interview question 21.3.**

Check inventories and the cost of storage at the delivery point, the positions of [index funds](https://one-course.com/books/quant/8/en/chapter/10-index-rebalancing#def-s1-index-rebalancing-fund) and ETFs near their roll, and the exchange’s notices; cut the position if the contango is approaching or exceeding full carry, rather than adding to it on a mean-reversion signal.

**Interview question 21.4 ★★ risk.**

How should a calendar spread book be margined and stress-tested?

**Solution of Interview question 21.4.**

Exchanges usually margin spreads less than outrights because the legs offset; the book should be stressed on the slope itself, with historical storage crises and hypothetical contango at and beyond full carry, and with the legs’ liquidity near expiry.

**Interview question 21.5 ★★ researcher.**

Why might short VIX futures in contango be profitable on average, and what is the risk?

**Solution of Interview question 21.5.**

Buyers of protection pay a premium, so futures sit above the expected VIX and roll down toward spot; the risk is a spike, when spot VIX jumps above the futures and the short loses many months of premium in days.

**Interview question 21.6 ★★★ researcher.**

A log spread follows an AR(1) with coefficient $\phi$ and innovation standard deviation $\sigma$. A trader holds $-\,s_t$ units at the close of $t$. Derive the expected daily P&L and its Sharpe ratio, and show how a cost $k$ per unit traded changes it.

**Solution of Interview question 21.6.**

With $s_{t+1} = \phi s_t + \varepsilon_{t+1}$, the P&L is $-s_t(s_{t+1} - s_t) = (1 - \phi)s_t^2 - s_t\varepsilon_{t+1}$, with mean $(1 - \phi)\sigma^2/(1 - \phi^2) = \sigma^2/(1 + \phi)$. Its variance is dominated by $E[s_t^2]\sigma^2 = \sigma^4/(1 - \phi^2)$ for $\phi$ near one, so the daily Sharpe ratio is about $\sqrt{(1 - \phi)/(1 + \phi)}$. The position changes by $s_{t+1} - s_t$, about $\varepsilon$, so costs take about $k\,
\sigma\sqrt{2/\pi}$ a day: the trade needs $\sigma/(1 + \phi) > k\sqrt{2/\pi}$, a spread noisy enough to pay for its own trading.
