Markets: A Rigorous Course

7.6 Hedging with futures

Core about 25 min

Motivation

A hedge does not make money. It exchanges price risk for basis risk, funding risk and, if sized badly, a new directional position. The questions are how many contracts, against what, and how the answer can go wrong.

7.6.1Setup#

A hedger is exposed to QAQ_A units of an asset with price SS over a horizon [t1,t2][t_1, t_2]. She sells NN futures contracts, each on QFQ_F units, with price FF. The hedge ratio is h=NQF/QAh = NQ_F/Q_A: futures units per unit of exposure. Write ΔS=St2−St1\Delta S = S_{t_2} - S_{t_1} and ΔF=Ft2−Ft1\Delta F = F_{t_2} - F_{t_1}. Per unit of exposure, the change in value of the hedged position is

ΔV=ΔS−h ΔF.\Delta V = \Delta S - h\,\Delta F.

If SS is exactly the futures' underlying and t2=Tt_2 = T, then ΔS=ΔF+bt1\Delta S = \Delta F + b_{t_1}, a constant, and h=1h = 1 removes all risk. Otherwise ΔS\Delta S and ΔF\Delta F are imperfectly correlated and the best hh is a statistical question.

7.6.2The minimum-variance hedge ratio#

Let σS2=Var⁡(ΔS)\sigma_S^2 = \operatorname{Var}(\Delta S), σF2=Var⁡(ΔF)\sigma_F^2 = \operatorname{Var}(\Delta F) and ρ=Corr⁡(ΔS,ΔF)\rho = \operatorname{Corr}(\Delta S, \Delta F). Then

Var⁡(ΔV)=σS2−2hρσSσF+h2σF2.(7.14)\operatorname{Var}(\Delta V) = \sigma_S^2 - 2h\rho\sigma_S\sigma_F + h^2\sigma_F^2. \tag{7.14}

Proposition 7.8minimum-variance hedge

The variance (7.14) is minimised at

h∗=Cov⁡(ΔS,ΔF)Var⁡(ΔF)=ρ σSσF,(7.15)h^* = \frac{\operatorname{Cov}(\Delta S, \Delta F)}{\operatorname{Var}(\Delta F)} = \rho\,\frac{\sigma_S}{\sigma_F}, \tag{7.15}

the minimum hedged variance is σS2(1−ρ2)\sigma_S^2(1-\rho^2), and the hedge effectiveness, the fraction of variance removed, is

σS2−Var⁡(ΔV)∣h∗σS2=ρ2.(7.16)\frac{\sigma_S^2 - \operatorname{Var}(\Delta V)\big|_{h^*}}{\sigma_S^2} = \rho^2. \tag{7.16}

Moreover, for any hh, Var⁡(ΔV)(h)−Var⁡(ΔV)(h∗)=σF2(h−h∗)2\operatorname{Var}(\Delta V)(h) - \operatorname{Var}(\Delta V)(h^*) = \sigma_F^2(h - h^*)^2.

Proof

(7.14) is a convex quadratic in hh with second derivative 2σF2>02\sigma_F^2 > 0. Setting dVar⁡/dh=−2ρσSσF+2hσF2=0d\operatorname{Var}/dh = -2\rho\sigma_S\sigma_F + 2h\sigma_F^2 = 0 gives h∗=ρσS/σFh^* = \rho\sigma_S/\sigma_F. Substituting, Var⁡(h∗)=σS2−2ρ2σS2+ρ2σS2=σS2(1−ρ2)\operatorname{Var}(h^*) = \sigma_S^2 - 2\rho^2\sigma_S^2 + \rho^2\sigma_S^2 = \sigma_S^2(1 - \rho^2), which gives (7.16). Completing the square, Var⁡(h)=σF2(h−h∗)2+σS2(1−ρ2)\operatorname{Var}(h) = \sigma_F^2(h - h^*)^2 + \sigma_S^2(1-\rho^2).∎

Three remarks.

  1. h∗h^* is the population slope of a regression of ΔS\Delta S on ΔF\Delta F, and ρ2\rho^2 is that regression's R2R^2. Estimating the hedge ratio is ordinary least squares (Johnson 1960; Ederington 1979).
  2. The penalty for a wrong ratio is quadratic and scaled by σF2\sigma_F^2. Errors of 5% in hh cost little; using h=1h = 1 when h∗=0.6h^* = 0.6 can leave more variance than not hedging at all, since Var⁡(1)>σS2\operatorname{Var}(1) > \sigma_S^2 whenever h∗<1/2h^* < 1/2.
  3. The optimal number of contracts is
N∗=h∗QAQF.(7.17)N^* = \frac{h^*Q_A}{Q_F}. \tag{7.17}

Worked example 7.9Hull's airline cross hedge

An airline will buy 2 million gallons of jet fuel in one month and hedges with heating oil futures (42,000 gallons per contract). Over one-month horizons, σS=0.0263\sigma_S = 0.0263, σF=0.0313\sigma_F = 0.0313, ρ=0.928\rho = 0.928. Then h∗=0.928×0.0263/0.0313=0.7798h^* = 0.928 \times 0.0263/0.0313 = 0.7798, N∗=0.7798×2,000,000/42,000=37.13N^* = 0.7798 \times 2{,}000{,}000/42{,}000 = 37.13, so 37 contracts. Effectiveness ρ2=0.861\rho^2 = 0.861: the hedge removes 86% of the variance; 14% is basis risk that no number of heating oil contracts can remove. An Indian refiner or airline hedging aviation turbine fuel with MCX crude faces the same structure with a lower ρ\rho, since ATF prices also embed refining margins and taxes.

7.6.3Hedging an equity portfolio with index futures#

For an equity portfolio it is more natural to work in returns. Let RPR_P be the portfolio return and RFR_F the futures return over the horizon, VPV_P the portfolio value and VF=F×lotV_F = F \times \text{lot} the value of one contract. Selling NN contracts changes the hedged value by VPRP−NVFRFV_PR_P - NV_FR_F. Applying Prop. 7.8 to ΔS=VPRP\Delta S = V_PR_P and ΔF=VFRF\Delta F = V_FR_F (per contract),

N∗=Cov⁡(VPRP,VFRF)Var⁡(VFRF)=Cov⁡(RP,RF)Var⁡(RF)⋅VPVF=β VPVF,N^* = \frac{\operatorname{Cov}(V_PR_P, V_FR_F)}{\operatorname{Var}(V_FR_F)} = \frac{\operatorname{Cov}(R_P,R_F)}{\operatorname{Var}(R_F)}\cdot\frac{V_P}{V_F} = \beta\,\frac{V_P}{V_F},

where β\beta is the regression slope of portfolio returns on futures returns. This is the CAPM beta (M06) if the futures return tracks the market index return closely, which it does for Nifty futures because the basis is small relative to index moves.

Proposition 7.9beta hedge

To move a portfolio's beta from β\beta to a target β⋆\beta^\star, trade

N=(β⋆−β) VPVF(7.18)N = (\beta^\star - \beta)\,\frac{V_P}{V_F} \tag{7.18}

contracts (negative means sell). Full hedging, β⋆=0\beta^\star = 0, gives N∗=βVP/VFN^* = \beta V_P/V_F contracts short.

Proof

After trading NN contracts, the position's return sensitivity to RFR_F is (βVP+NVF)/VP(\beta V_P + NV_F)/V_P. Setting it equal to β⋆\beta^\star and solving gives (7.18).∎

Worked example 7.10hedging ₹5 crore with Nifty futures

A ₹5 crore portfolio has β=1.2\beta = 1.2 against Nifty futures. On 5 Nov 2026 the Dec future settles at 24,719.10, so VF=65×24,719.10=₹16,06,741.50V_F = 65 \times 24{,}719.10 = \text{₹}16{,}06{,}741.50.

  • Full hedge: N∗=1.2×5,00,00,000/16,06,741.50=37.34N^* = 1.2 \times 5{,}00{,}00{,}000/16{,}06{,}741.50 = 37.34, so sell 37 lots.
  • Reduce beta to 0.5: N=(0.5−1.2)×31.119=−21.78N = (0.5 - 1.2) \times 31.119 = -21.78, so sell 22 lots.
  • Scenario: the Nifty and its future both fall 5%, and the portfolio falls exactly β×5%=6%\beta \times 5\% = 6\%. The portfolio loses ₹30,00,000. The 37 short lots gain 37×65×0.05×24,719.10=₹29,72,47237 \times 65 \times 0.05 \times 24{,}719.10 = \text{₹}29{,}72{,}472. Net −₹27,528, the rounding residual from selling 37 rather than 37.34 lots. In reality the portfolio's return will also contain an idiosyncratic part, ε\varepsilon in RP=α+βRF+εR_P = \alpha + \beta R_F + \varepsilon, which the hedge does not touch: a beta-hedged portfolio is a bet on α+ε\alpha + \varepsilon, the stock picker's actual skill.

7.6.4Tailing the hedge#

"Tailing" is used for two related adjustments.

  1. Value-based ratio. If ρ\rho, σS\sigma_S, σF\sigma_F are estimated from daily returns (the usual case), the contract count is N∗=h^ VA/VFN^* = \hat h\,V_A/V_F with current values, and it drifts as prices move. Hull calls this the tailing adjustment and recommends recomputing it as values change.
  2. Interest tail. A futures hedge is paid daily while the hedged exposure settles at TT. From the proof of Prop. 7.5, a hedge that replicates a forward holds e−r(T−t)e^{-r(T - t)} futures per unit of forward exposure. The tailed count is
Ntail=N∗ e−rτ.(7.19)N_{\text{tail}} = N^*\,e^{-r\tau}. \tag{7.19}

For worked example 7.10 with r=5.5%r = 5.5\% and 54 days, e−0.055×54/365=0.99190e^{-0.055 \times 54/365} = 0.99190, so 37.34→37.0437.34 \to 37.04. The interest tail changes the hedge by less than one lot on an index hedge of a month or two. It matters for large, long-dated hedges, such as a refiner hedging a year of production, and it is the mechanism behind the futures–forward gap of 7.2.4.

7.6.5Practitioner notes on estimation#

  • Use futures returns, not index returns, on the right-hand side. That is the instrument you trade, and its return includes basis changes.
  • Match the horizon. A hedge held for a month should ideally use the correlation of monthly changes. Daily estimates are more precise but assume the correlation structure scales with horizon, which fails when there is lagged price adjustment (thinly traded small caps react to the index with a delay, so daily betas understate monthly betas).
  • Sampling error. With nn observations, the standard error of h^\hat h is approximately (σS/σF)(1−ρ2)/n(\sigma_S/\sigma_F)\sqrt{(1-\rho^2)/n}. With σS/σF=1\sigma_S/\sigma_F = 1, for ρ=0.95\rho = 0.95 and n=20,000n = 20{,}000 this is 0.002; for 250 daily observations and ρ=0.7\rho = 0.7, it is about 0.045. The lab m07_hedge.py checks this on simulated data.
  • Betas move. Estimates drift with regime; fat tails (M02) make OLS sensitive to a few days. Re-estimate on rolling windows and compare with a robust estimator.
  • The stack-and-roll problem. A long-dated exposure hedged with short-dated futures has two extra risks: the roll cost (7.13) on every roll, and the mismatch between the sensitivity of a long-dated price and the front-month price. 7.8.1 shows both.

Data lab

Minimum-variance hedge of Bank Nifty with the Nifty

Daily log returns of the Nifty Bank index regressed on Nifty 50 returns over a rolling window. The slope is the minimum-variance hedge ratio h∗=ρσS/σFh^* = \rho\sigma_S/\sigma_F of Proposition 7.8 and the R2R^2 is the hedge effectiveness ρ2\rho^2 of (7.16). The lower chart hedges each day with the ratio estimated up to the day before, so its variance reduction is out of sample. Index returns stand in for futures returns here; 7.6.5 explains why a real hedge should use futures returns.

What to look at How far the rolling h∗h^* moves over the years, how stable the effectiveness is, and how the out-of-sample variance reduction compares with the full-sample ρ2\rho^2.

Questions

  1. Is the full-sample h∗h^* consistent with every rolling estimate given its standard error (σS/σF)(1−ρ2)/n(\sigma_S/\sigma_F)\sqrt{(1-\rho^2)/n}? What does that say about the constant-beta assumption?
  2. Shorten the window to 60 days and lengthen it to 750. Which gives the better out-of-sample variance reduction, and why?
  3. Using Proposition 7.9, how many Nifty lots would hedge a ₹1 crore Bank Nifty exposure at today's estimate (Nifty lot 65; use the latest index level)?
  4. The hedged curve still drifts. What is it a bet on?

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.