Basis risk is the uncertainty that remains even after lining up a futures contract to protect a cash-market exposure. A hedge locks in a price on the futures contract, but it does not freeze the spread between the cash market and the futures market. That spread - the basis\(b_t = S_t - F_t\) - is the moving piece that determines how far reality drifts from the hedge you envisioned.
Basis shapes the effective price
When you short a futures contract today, you “lock” the futures price \(F_0\). On the day you offset the hedge, you close your position by buying the futures contract at \(F_T\) and selling your asset on the spot market at \(S_T\).
The total value you receive is the spot price plus the gain or loss from your futures position:
Since the basis on the final day is \(b_T = S_T - F_T\), this simplifies to:
\[
\text{Effective price} = F_0 + b_T.
\]
If the basis strengthens (becomes more positive or less negative), the hedge delivers a higher effective price for a short hedger. If it weakens (becomes more negative or less positive), the effective price falls. Managing basis risk is therefore about understanding how that final spread might evolve.
Sources of Basis Risk
Basis risk isn’t just about the unpredictable movement of the spread over time. It arises from any mismatch between the exposure being hedged and the futures contract used. The main sources are:
Asset Mismatch (Cross-Hedging): This is one of the largest sources of basis risk. It occurs when the asset underlying the futures contract is different from the asset being hedged. For example, using crude oil futures to hedge a position in jet fuel. While the prices are correlated, they don’t move in perfect lockstep.
Maturity Mismatch: This occurs if the hedge’s horizon does not match the expiry date of the futures contract. For instance, if you need to hedge an exposure for three months but use a one-month futures contract, you must roll the hedge forward. The basis is unknown for the next contracts, creating risk.
Location Mismatch: The futures contract specifies a particular delivery location (e.g., West Texas Intermediate crude oil delivered in Cushing, Oklahoma). If you are hedging an asset in a different location (e.g., oil in Rotterdam), the local spot price may differ from the price at the delivery hub, creating locational basis risk.
Interactive basis risk lab
The simulation below follows a spot price generated by geometric Brownian motion and derives the associated futures curve under a two-month maturity and a 4% risk-free rate (no dividends). Because the futures contract is written on the same asset as the spot exposure, the basis converges to zero at expiration, so basis risk matters when the hedge is closed out before the delivery date. Choose a preset basis scenario, lock the hedge at any day, then drag the day slider to see how the basis evolves and how the basis on the close-out day determines the effective price.
Tip
How to experiment
Pick a hedge position (Short or Long) and a basis scenario.
Click Resimulate spot path to explore a new trajectory.
Use the slider to choose a day, then press Initiate hedge to lock in the futures price.
If a hedge is active, press Remove hedge to reset it.
Drag the day slider to a close-out day and watch the basis on that day drive the effective price. Notice that the basis shrinks to zero by expiration.
mulberry32 = seed => {returnfunction () {let t = seed +=0x6D2B79F5 t =Math.imul(t ^ t >>>15, t |1) t ^= t +Math.imul(t ^ t >>>7, t |61)return ((t ^ t >>>14) >>>0) /4294967296 }}// Standard normal draw (Box-Muller) from a uniform RNGrandomNormal = rng => {let u =0, v =0while (u ===0) u =rng()while (v ===0) v =rng()returnMath.sqrt(-2.0*Math.log(u)) *Math.cos(2.0*Math.PI* v)}
basisLegend =html`<div class="plot-legend"> <span><span class="swatch" style="background: #2196F3;"></span>Spot price</span> <span><span class="swatch" style="background: #ff7f0e;"></span>Futures price</span></div>`
html`${basisLegend}`
basisPanel = {const data = [ {Metric:"Day",Value: selectedSnapshot.day }, {Metric:"Hedge Position",Value: hedgeSide }, {Metric:"Spot price",Value:formatCurrency(selectedSnapshot.spot) }, {Metric:"Futures price",Value:formatCurrency(selectedSnapshot.futures) }, {Metric: hedgeLocked ?`Locked futures price F_${hedgeDay}`:"Locked futures price",Value: hedgeLocked && lockedF !==null?formatCurrency(lockedF) :"No hedge active" }, {Metric:"Basis",Value:`${formatSigned(selectedSnapshot.basis)} (${basisMood(selectedSnapshot.basis)})` }, hedgeActiveOnDay && lockedF !==null? {Metric: hedgeSide ==="Short"?"Effective Sale Price":"Effective Purchase Price",Value:`${formatCurrency(effectivePrice)} = ${formatCurrency(lockedF)} + ${formatSigned(selectedSnapshot.basis)}` }: {Metric:"Effective Price",Value: hedgeLocked?`Hedge starts on day ${hedgeDay}; move the slider to day ${hedgeDay} or later`:"Lock a hedge to compute" }, {Metric:`Basis at expiration (day ${finalSnapshot.day})`,Value:`${formatSigned(finalSnapshot.basis)} (${basisMood(finalSnapshot.basis)})` } ];return htl.html`<table class="table" style="width: 100%;"><tbody>${data.map(row => htl.html`<tr><td style="width: 45%; font-weight: 500;">${row.Metric}</td><td>${row.Value}</td></tr>`)}</tbody></table>`;}
Note
A Note on Terminology
In this simulation’s summary table, for simplicity, we label a positive basis as “strengthening” and a negative basis as “weakening.” In practice, strengthening or weakening refers to the change in the basis over time. A basis strengthens if it becomes more positive or less negative.
md`The outcome of the hedge depends on your position. A **strengthening basis** (more positive) helps a **short hedger** by increasing their effective selling price, but hurts a **long hedger** by increasing their effective purchase cost. Conversely, a **weakening basis** (more negative) hurts a short hedger but helps a long hedger.Because the simulated futures contract is written on the same asset as the spot exposure, the basis converges to zero at expiration: a hedge held all the way to the delivery date locks in the futures price exactly. Basis risk arises when the hedge is closed out before that date, or when the futures contract is written on a different asset.`