Forward and Futures Pricing and Hedging › Commodity Hedging

Michael BrenndoerferNovember 14, 20256 min read
Quantitative FinanceAll chapters
Part 3 of 15Forwards, Futures, and Options
Chapter 15Forward and Futures Pricing and Hedging › Commodity Hedging
Reading section 8 of 11 · Commodity Hedging · 6 minSection 8 of 11 · 6 min

Book contents

Section 8 of 11 · 6 min read

Forward and Futures Pricing and Hedging › Commodity HedgingOne section · Sections in this chapter8 / 11 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Commodity futures serve producers and consumers who face price uncertainty in their core business operations. Unlike financial speculators, these commercial hedgers use futures not for profit but for risk management. Their goal is to reduce uncertainty and enable better business planning. As a farmer, you need to know what price to expect for next year's harvest to decide how much to plant. As an airline, you need fuel cost predictability to price tickets months in advance.

Producer Hedge: Locking in Sale Price

Suppose you expect to sell 100,000 barrels of crude oil in three months. Current spot price is $75/barrel, and the three-month futures trades at $76.50/barrel. You might worry that prices might fall before the sale, wiping out profit margins or even causing losses.

By shorting 100 crude oil futures contracts (each covering 1,000 barrels), you lock in approximately $76.50 per barrel. Whatever happens to spot prices over the next three months, your realized revenue per barrel will be close to the initial futures price. The code below demonstrates the revenue outcomes across various price scenarios:

In[29]:
Code
import numpy as np
import pandas as pd

# Producer hedge example
barrels = 100_000
contracts_size = 1_000  # barrels per contract
n_futures = barrels / contracts_size  # 100 contracts

current_spot = 75.00
futures_price_initial = 76.50

# Scenario analysis: price at delivery
delivery_prices = np.array([65, 70, 75, 80, 85, 90])

# Revenue without hedge
unhedged_revenue = delivery_prices * barrels

# Futures P&L (short position)
futures_pnl_commodity = (futures_price_initial - delivery_prices) * barrels

# Total revenue with hedge
hedged_revenue = delivery_prices * barrels + futures_pnl_commodity

hedge_df = pd.DataFrame(
    {
        "Spot at Delivery": delivery_prices,
        "Unhedged Revenue ($M)": unhedged_revenue / 1e6,
        "Futures P&L ($M)": futures_pnl_commodity / 1e6,
        "Hedged Revenue ($M)": hedged_revenue / 1e6,
    }
)
Out[30]:
Console
Oil Producer Hedge Analysis
============================================================
Production to sell: 100,000 barrels
Futures price locked: $76.50/barrel

 Spot at Delivery  Unhedged Revenue ($M)  Futures P&L ($M)  Hedged Revenue ($M)
               65                  6.500             1.150                7.650
               70                  7.000             0.650                7.650
               75                  7.500             0.150                7.650
               80                  8.000            -0.350                7.650
               85                  8.500            -0.850                7.650
               90                  9.000            -1.350                7.650

Regardless of where spot prices end up, you receive approximately $7.65 million. If prices crash to $65, the futures gain compensates for the lower spot sale. If prices surge to $90, the futures loss offsets the spot windfall. You trade price uncertainty for price certainty. The producer can plan investments and operations around this known revenue figure.

Consumer Hedge: Locking in Purchase Price

Suppose you need to purchase jet fuel in three months. Rather than face fuel price uncertainty, you can go long heating oil futures (a close substitute for jet fuel) to lock in an effective purchase price. Fuel is one of your largest operating costs, and price volatility creates significant earnings uncertainty.

The logic mirrors the producer hedge but with opposite positions. Going long futures profits when prices rise, offsetting higher spot purchase costs. If prices fall, the futures losses are offset by lower spot purchases. Either way, the effective cost is stabilized.

Cross-Hedging and Basis Risk in Commodities

The airline example highlights cross-hedging: using futures on a related but different commodity. Jet fuel futures exist but may have lower liquidity than heating oil or crude oil futures. The tradeoff is between basis risk (jet fuel vs. heating oil price divergence) and liquidity risk (wider bid-ask spreads, harder to enter and exit positions).

Cross-hedging requires careful analysis of the relationship between the hedged asset and the futures contract. The correlation determines how much protection the hedge provides. If jet fuel and heating oil prices move in lockstep, the cross-hedge works well. If they sometimes diverge due to refinery issues, seasonal demand differences, or specification changes, residual risk remains. This simulation shows how imperfect correlation affects the effectiveness of the hedge:

In[31]:
Code
import numpy as np

# Cross-hedge effectiveness simulation
np.random.seed(456)
n_simulations = 1000

# Heating oil and jet fuel are correlated but not perfectly
heating_oil_vol = 0.25  # annualized
jet_fuel_vol = 0.28
cross_correlation = 0.85

# Simulate 3-month price changes
time_horizon = 0.25  # 3 months
heating_oil_changes = np.random.normal(
    0, heating_oil_vol * np.sqrt(time_horizon), n_simulations
)

# Jet fuel changes: correlated with heating oil plus idiosyncratic component
systematic_component = (
    heating_oil_changes * cross_correlation * (jet_fuel_vol / heating_oil_vol)
)
idiosyncratic = np.random.normal(
    0,
    jet_fuel_vol * np.sqrt(time_horizon) * np.sqrt(1 - cross_correlation**2),
    n_simulations,
)
jet_fuel_changes = systematic_component + idiosyncratic

# Calculate unhedged and hedged exposure
initial_jet_price = 100  # index
fuel_needed = 1_000_000  # gallons
optimal_cross_hedge = cross_correlation * jet_fuel_vol / heating_oil_vol

# Unhedged cost variance
unhedged_costs = fuel_needed * initial_jet_price * (1 + jet_fuel_changes)

# Hedged with optimal cross-hedge ratio
hedge_pnl = (
    -fuel_needed * initial_jet_price * optimal_cross_hedge * heating_oil_changes
)
hedged_costs = unhedged_costs + hedge_pnl
Out[32]:
Console
Cross-Hedge Analysis: Jet Fuel with Heating Oil Futures
=======================================================
Cross-correlation:          0.85
Optimal hedge ratio:        0.952

Metric                          Unhedged         Hedged
-------------------------------------------------------
Mean cost ($M)                   100.212        100.208
Std dev ($M)                      13.882          7.207
Variance reduction                                73.0%
Out[33]:
Visualization
Overlapping histograms comparing the distribution of unhedged and cross-hedged fuel costs.
Distribution of fuel costs for unhedged versus cross-hedged strategies. The cross-hedged distribution (green) is materially narrower than the unhedged distribution (blue), showing how the hedge reduces cost uncertainty despite the presence of basis risk.

The cross-hedge reduces cost variance substantially but doesn't eliminate it. The 85% correlation leaves residual basis risk from jet fuel-specific factors that heating oil doesn't capture. This residual risk is the price paid for using a more liquid hedging instrument. You must weigh the benefits of easier trading against the costs of imperfect protection.