Individual project, summer 2026
Copper Physical-Futures Hedge Optimization & Basis Risk Model
How well does shorting COMEX copper futures hedge a physical copper position, and why is the hedge never perfect?
This study computes the minimum-variance hedge ratio of LME cash copper against COMEX HG futures, measures how much risk the hedge actually removes both in-sample and strictly out-of-sample, and quantifies the residual basis risk a hedger cannot escape, including what the May 2024 COMEX–LME squeeze did to a short-futures hedger. All the math lives in tested Python modules, and every number on this page is reproducible from the committed data.
The LME–COMEX basis, day by day
LME cash minus the COMEX front month, in dollars per pound. The gap averages −$0.06/lb and stays near zero for five years, then the May 2024 squeeze and the far larger 2025 tariff dislocation pull the two prices apart. Its low of −$1.32/lb on 25 July 2025, and the one-day collapse that followed, is how violently two prices for “copper” can part company. That gap is the risk no hedge ratio can remove.
Show the numbersHide the numbers
| Month | Basis, $/lb |
|---|---|
| Jan 2019 | 0.0235 |
| Feb 2019 | −0.0092 |
| Mar 2019 | 0.0475 |
| Apr 2019 | 0.0269 |
| May 2019 | 0.0991 |
| Jun 2019 | −0.0265 |
| Jul 2019 | 0.0416 |
| Aug 2019 | 0.0053 |
| Sep 2019 | −0.0010 |
| Oct 2019 | −0.0073 |
| Nov 2019 | −0.0215 |
| Dec 2019 | 0.0235 |
| Jan 2020 | −0.0364 |
| Feb 2020 | 0.0249 |
| Mar 2020 | −0.0427 |
| Apr 2020 | −0.0275 |
| May 2020 | −0.0229 |
| Jun 2020 | −0.0358 |
| Jul 2020 | 0.0120 |
| Aug 2020 | 0.0136 |
| Sep 2020 | 0.0697 |
| Oct 2020 | 0.1366 |
| Nov 2020 | −0.0288 |
| Dec 2020 | −0.0007 |
| Jan 2021 | 0.0388 |
| Feb 2021 | −0.0117 |
| Mar 2021 | 0.0526 |
| Apr 2021 | −0.0264 |
| May 2021 | −0.0178 |
| Jun 2021 | −0.0297 |
| Jul 2021 | −0.0045 |
| Aug 2021 | −0.0154 |
| Sep 2021 | −0.0391 |
| Oct 2021 | −0.0599 |
| Nov 2021 | 0.0772 |
| Dec 2021 | 0.0938 |
| Jan 2022 | −0.0843 |
| Feb 2022 | −0.0287 |
| Mar 2022 | −0.0615 |
| Apr 2022 | −0.0345 |
| May 2022 | 0.0431 |
| Jun 2022 | −0.0413 |
| Jul 2022 | −0.0014 |
| Aug 2022 | 0.0452 |
| Sep 2022 | 0.0791 |
| Oct 2022 | −0.0452 |
| Nov 2022 | 0.0036 |
| Dec 2022 | −0.0871 |
| Jan 2023 | 0.0396 |
| Feb 2023 | 0.0507 |
| Mar 2023 | −0.0555 |
| Apr 2023 | 0.0074 |
| May 2023 | 0.0407 |
| Jun 2023 | 0.0177 |
| Jul 2023 | 0.0108 |
| Aug 2023 | 0.0621 |
| Sep 2023 | 0.0498 |
| Oct 2023 | 0.0423 |
| Nov 2023 | 0.0023 |
| Dec 2023 | −0.0734 |
| Jan 2024 | −0.0452 |
| Feb 2024 | −0.0255 |
| Mar 2024 | −0.0475 |
| Apr 2024 | −0.0240 |
| May 2024 | −0.1114 |
| Jun 2024 | −0.1476 |
| Jul 2024 | −0.1097 |
| Aug 2024 | 0.0149 |
| Sep 2024 | −0.0150 |
| Oct 2024 | −0.1171 |
| Nov 2024 | −0.0724 |
| Dec 2024 | −0.0517 |
| Jan 2025 | −0.0488 |
| Feb 2025 | −0.2722 |
| Mar 2025 | −0.3306 |
| Apr 2025 | −0.6409 |
| May 2025 | −0.4102 |
| Jun 2025 | −0.4551 |
| Jul 2025 | −0.4844 |
| Aug 2025 | −0.0873 |
| Sep 2025 | −0.1363 |
| Oct 2025 | −0.1753 |
| Nov 2025 | −0.1153 |
| Dec 2025 | −0.0939 |
| Jan 2026 | 0.0621 |
| Feb 2026 | 0.0893 |
| Mar 2026 | 0.1065 |
| Apr 2026 | −0.0584 |
| May 2026 | −0.0829 |
| Jun 2026 | −0.2558 |
| Jul 2026 | −0.1497 |
| Aug 2026 | −0.1886 |
What the hedge removes
The minimum-variance LME–COMEX hedge removes 33.1% to 33.8% of daily variance out of sample, while a naive one-for-one hedge removes only 0.6% on the same days. The paired in-sample result is 34.1%, so the performance survives an honest forward test. Measured Friday to Friday, effectiveness rises to 70.0% as the London–New York closing-time mismatch washes out.
The remaining risk is economically meaningful: optimal daily hedging still leaves residual volatility of $0.0433/lb, while the daily change in the unhedged LME–COMEX basis has a standard deviation of $0.0531/lb.
Share of daily variance removed
The fitted hedge against a dollar-for-dollar hedge, on the same days. Daily, the naive hedge does almost nothing; weekly, both improve as timing noise averages out.
- Minimum-variance hedge
- Naive 1:1 hedge, same days
Daily, in sample1,845 observations
- Minimum-variance hedge
- 34.1%
- Naive 1:1 hedge
- 0.7%
Daily, out of sample, 60-day window1,785 days
- Minimum-variance hedge
- 33.5%
- Naive 1:1 hedge
- 0.6%
Daily, out of sample, 120-day window1,725 days
- Minimum-variance hedge
- 33.1%
- Naive 1:1 hedge
- 0.6%
Daily, out of sample, expanding window1,785 days
- Minimum-variance hedge
- 33.8%
- Naive 1:1 hedge
- 0.6%
Weekly, Friday to Friday375 weeks
- Minimum-variance hedge
- 70.0%
- Naive 1:1 hedge
- 60.2%
The finance, in one page
A company that owns physical copper loses money when the copper price falls. To protect itself it can sell copper futures: if the price drops, the loss on the metal it holds is offset by a gain on the futures it sold short. The catch is that the metal it holds (LME cash copper in London) and the contract it sells (COMEX futures in New York) are not the same thing, and their prices do not move in perfect lockstep. The hedge cancels most of the price risk but never all of it, and that leftover is what this project measures.
Three quantities do the work.
h* = Cov(ΔS, ΔF) / Var(ΔF)
Hedge ratio
How many pounds of futures to short per pound of physical held.S is the LME price, F the COMEX price, and ΔS, ΔF their daily changes. h* minimizes the variance of the combined position, and it is exactly the slope of a regression of ΔS on ΔF. Here it is 0.5025: close to one half, not one, which is itself a result worth explaining.
e = 1 − Var(hedged) / Var(unhedged)
Hedge effectiveness
The fraction of price risk the hedge removes, where the hedged P&L is ΔS − h*ΔFand the unhedged P&L is ΔS alone. In-sample, e equals the R² of that same regression (34.1%, R² = 0.3405), because the regression picks h* precisely to explain as much of the variance as it can. Out of sample they can diverge, which is why the forward test matters.
b = S − F
Basis
The gap between the two prices on a given day. If the basis never moved, the hedge would be perfect. For the dollar-for-dollar hedger the link is exact: with h = 1, daily P&L is ΔS − ΔF = Δb, the day’s basis change, identically. Basis risk is the variability of that gap, the risk no hedge ratio can remove, because it lives in the difference between the two legs rather than in either leg alone.
A note on units. Everything is computed on price changes in dollars per pound, not percentage returns. A hedger cares about dollars of P&L per physical pound held, and futures trade in a fixed size per contract, so a hedge ratio in $/lb maps directly onto a number of contracts. Putting both legs in the same units also makes h*dimensionless, so a value near one would signal two prices for the same metal. Returns would rescale each day’s move by that day’s price level, distorting the minimum-variance ratio and breaking the clean link to contracts, so returns are deliberately avoided.
Three copper prices, one unit
Three daily series, all reduced to dollars per pound and aligned on shared trading days: 1,875 days from 2 January 2019 to 12 August 2026. LME is quoted in dollars per tonne and is divided by 2,204.62. The calendar mismatch drops 49 LME rows, 42 COMEX rows and 36 CPER rows, and no gaps are forward-filled. Outliers are kept: the 2024 squeeze and the 2025 tariff dislocation are signal, not noise to be cleaned away.
| Series | Source | Role in the hedge |
|---|---|---|
| LME cash copper | Westmetall | Physical proxy, the exposure being hedged (S) |
| COMEX HG front-month futures | yfinance | Hedging instrument, what gets shorted (F) |
| CPER ETF | yfinance | Secondary check only; it holds copper futures itself |
Three prices for copper, indexed
All three exposures broadly travel together, which is why a COMEX hedge can work at all: a lull in 2019, the COVID drop and recovery in 2020, a slide in mid-2022 and a sharp spike in mid-2024. The visible separations, especially from 2024 onward, are the basis risk hidden by their similar long-run direction.
- LME cash
- COMEX HG front month
- CPER ETF
Show the numbersHide the numbers
| Week | LME cash | COMEX HG | CPER |
|---|---|---|---|
| Jan 2019 | 1.00× | 1.01× | 1.01× |
| Feb 2019 | 1.04× | 1.06× | 1.06× |
| Mar 2019 | 1.13× | 1.12× | 1.12× |
| Apr 2019 | 1.10× | 1.10× | 1.11× |
| May 2019 | 1.06× | 1.08× | 1.08× |
| Jun 2019 | 0.99× | 1.00× | 1.01× |
| Jul 2019 | 1.00× | 1.01× | 1.02× |
| Aug 2019 | 0.99× | 0.98× | 0.99× |
| Sep 2019 | 0.99× | 1.00× | 1.01× |
| Oct 2019 | 0.96× | 0.97× | 0.99× |
| Nov 2019 | 0.99× | 1.01× | 1.02× |
| Dec 2019 | 1.00× | 1.03× | 1.06× |
| Jan 2020 | 1.04× | 1.07× | 1.07× |
| Feb 2020 | 0.97× | 0.97× | 0.98× |
| Mar 2020 | 0.96× | 0.98× | 0.98× |
| Apr 2020 | 0.83× | 0.84× | 0.84× |
| May 2020 | 0.87× | 0.88× | 0.89× |
| Jun 2020 | 0.96× | 0.97× | 0.98× |
| Jul 2020 | 1.04× | 1.04× | 1.05× |
| Aug 2020 | 1.10× | 1.06× | 1.07× |
| Sep 2020 | 1.14× | 1.16× | 1.17× |
| Oct 2020 | 1.10× | 1.14× | 1.12× |
| Nov 2020 | 1.19× | 1.20× | 1.20× |
| Dec 2020 | 1.33× | 1.34× | 1.34× |
| Jan 2021 | 1.33× | 1.34× | 1.33× |
| Feb 2021 | 1.36× | 1.39× | 1.38× |
| Mar 2021 | 1.54× | 1.56× | 1.55× |
| Apr 2021 | 1.50× | 1.52× | 1.52× |
| May 2021 | 1.77× | 1.82× | 1.79× |
| Jun 2021 | 1.69× | 1.73× | 1.71× |
| Jul 2021 | 1.59× | 1.63× | 1.61× |
| Aug 2021 | 1.63× | 1.66× | 1.63× |
| Sep 2021 | 1.60× | 1.65× | 1.63× |
| Oct 2021 | 1.56× | 1.60× | 1.58× |
| Nov 2021 | 1.67× | 1.66× | 1.63× |
| Dec 2021 | 1.63× | 1.63× | 1.60× |
| Jan 2022 | 1.65× | 1.68× | 1.65× |
| Feb 2022 | 1.69× | 1.71× | 1.69× |
| Mar 2022 | 1.79× | 1.88× | 1.84× |
| Apr 2022 | 1.75× | 1.78× | 1.76× |
| May 2022 | 1.61× | 1.62× | 1.58× |
| Jun 2022 | 1.62× | 1.65× | 1.61× |
| Jul 2022 | 1.37× | 1.38× | 1.34× |
| Aug 2022 | 1.34× | 1.35× | 1.32× |
| Sep 2022 | 1.30× | 1.30× | 1.26× |
| Oct 2022 | 1.30× | 1.30× | 1.25× |
| Nov 2022 | 1.35× | 1.42× | 1.38× |
| Dec 2022 | 1.43× | 1.47× | 1.43× |
| Jan 2023 | 1.43× | 1.49× | 1.46× |
| Feb 2023 | 1.55× | 1.55× | 1.51× |
| Mar 2023 | 1.53× | 1.55× | 1.53× |
| Apr 2023 | 1.51× | 1.53× | 1.51× |
| May 2023 | 1.45× | 1.48× | 1.47× |
| Jun 2023 | 1.43× | 1.42× | 1.41× |
| Jul 2023 | 1.42× | 1.44× | 1.43× |
| Aug 2023 | 1.45× | 1.47× | 1.47× |
| Sep 2023 | 1.46× | 1.45× | 1.46× |
| Oct 2023 | 1.35× | 1.38× | 1.38× |
| Nov 2023 | 1.38× | 1.40× | 1.40× |
| Dec 2023 | 1.45× | 1.49× | 1.49× |
| Jan 2024 | 1.43× | 1.45× | 1.45× |
| Feb 2024 | 1.44× | 1.46× | 1.46× |
| Mar 2024 | 1.44× | 1.47× | 1.48× |
| Apr 2024 | 1.57× | 1.61× | 1.63× |
| May 2024 | 1.67× | 1.74× | 1.74× |
| Jun 2024 | 1.69× | 1.71× | 1.69× |
| Jul 2024 | 1.68× | 1.77× | 1.77× |
| Aug 2024 | 1.54× | 1.56× | 1.59× |
| Sep 2024 | 1.54× | 1.53× | 1.56× |
| Oct 2024 | 1.68× | 1.72× | 1.76× |
| Nov 2024 | 1.61× | 1.66× | 1.68× |
| Dec 2024 | 1.55× | 1.58× | 1.61× |
| Jan 2025 | 1.49× | 1.54× | 1.57× |
| Feb 2025 | 1.59× | 1.75× | 1.77× |
| Mar 2025 | 1.66× | 1.78× | 1.81× |
| Apr 2025 | 1.51× | 1.67× | 1.69× |
| May 2025 | 1.61× | 1.76× | 1.79× |
| Jun 2025 | 1.68× | 1.84× | 1.86× |
| Jul 2025 | 1.73× | 1.94× | 1.96× |
| Aug 2025 | 1.63× | 1.68× | 1.69× |
| Sep 2025 | 1.69× | 1.71× | 1.72× |
| Oct 2025 | 1.80× | 1.93× | 1.92× |
| Nov 2025 | 1.84× | 1.88× | 1.88× |
| Dec 2025 | 1.99× | 2.05× | 2.05× |
| Jan 2026 | 2.15× | 2.15× | 2.15× |
| Feb 2026 | 2.20× | 2.23× | 2.23× |
| Mar 2026 | 2.19× | 2.19× | 2.19× |
| Apr 2026 | 2.08× | 2.12× | 2.11× |
| May 2026 | 2.21× | 2.26× | 2.23× |
| Jun 2026 | 2.35× | 2.39× | 2.34× |
| Jul 2026 | 2.26× | 2.33× | 2.29× |
| Aug 2026 | 2.44× | 2.50× | 2.45× |
Futures roll days are excluded from the regressions. When the HG front month rolls to the next contract, Fjumps for a reason unrelated to copper’s price, which would contaminate Cov(ΔS, ΔF). Those days are detected with a price-gap heuristic checked against the COMEX active-month calendar, which flags 29 roll days across the sample; they are removed before estimation, leaving 1,845 in-sample daily observations. They stay in the price and basis charts, where they do no harm.
Results in detail
The primary LME–COMEX hedge removed 34.1% of daily variance in-sample, and the honest one-step-ahead results stayed close at 33.1% to 33.8% out of sample. Shorting one pound of COMEX copper for each pound of LME exposure removed only 0.6% on the same days. The small deterioration is consistent with a relationship that is stable rather than overfit: the independently estimated hedge ratio stays between 0.45 and 0.56 in all five market regimes below.
| Daily estimate | Observations | h* | R² | Effectiveness | Naive 1:1, same days |
|---|---|---|---|---|---|
| In-sample, full history | 1,845 | 0.5025 | 0.3405 | +34.1% | +0.7% |
| Out of sample, 60-day rolling | 1,785 | n/a | n/a | +33.5% | +0.6% |
| Out of sample, 120-day rolling | 1,725 | n/a | n/a | +33.1% | +0.6% |
| Out of sample, expanding | 1,785 | n/a | n/a | +33.8% | +0.6% |
Each out-of-sample row uses only information available before the day being hedged, so no single h* or R² describes it. The 60-day estimate adapts fastest, the 120-day estimate trades some responsiveness for a larger sample, and the expanding estimate uses all prior observations; their near-identical results show that the headline does not depend on one window choice.
The hedge ratio, re-estimated every day
The 60-day estimate reacts most and is the most volatile, the 120-day path is smoother, and the expanding estimate is the most stable around the full-sample h* of 0.5025. Despite those different paths, the three deliver tightly grouped out-of-sample effectiveness of +33.5%, +33.1% and +33.8%.
- 60-day window
- 120-day window
- Expanding window
Show the numbersHide the numbers
| Month | 60-day | 120-day | Expanding |
|---|---|---|---|
| Jan 2019 | — | — | — |
| Feb 2019 | — | — | — |
| Mar 2019 | — | — | — |
| Apr 2019 | 0.521 | — | 0.521 |
| May 2019 | — | — | — |
| Jun 2019 | 0.711 | — | 0.553 |
| Jul 2019 | 0.526 | — | 0.523 |
| Aug 2019 | 0.523 | 0.601 | 0.523 |
| Sep 2019 | 0.451 | 0.551 | 0.505 |
| Oct 2019 | 0.462 | 0.475 | 0.499 |
| Nov 2019 | 0.362 | 0.466 | 0.494 |
| Dec 2019 | 0.201 | 0.409 | 0.468 |
| Jan 2020 | 0.271 | 0.383 | 0.462 |
| Feb 2020 | 0.514 | 0.447 | 0.497 |
| Mar 2020 | 0.634 | 0.440 | 0.501 |
| Apr 2020 | 0.657 | 0.529 | 0.514 |
| May 2020 | 0.685 | 0.604 | 0.540 |
| Jun 2020 | 0.706 | 0.684 | 0.552 |
| Jul 2020 | 0.709 | 0.696 | 0.555 |
| Aug 2020 | 0.544 | 0.646 | 0.554 |
| Sep 2020 | 0.343 | 0.520 | 0.512 |
| Oct 2020 | 0.316 | 0.469 | 0.498 |
| Nov 2020 | 0.157 | 0.264 | 0.434 |
| Dec 2020 | 0.265 | 0.301 | 0.460 |
| Jan 2021 | 0.659 | 0.305 | 0.460 |
| Feb 2021 | 0.568 | 0.312 | 0.456 |
| Mar 2021 | 0.539 | 0.403 | 0.476 |
| Apr 2021 | 0.560 | 0.580 | 0.491 |
| May 2021 | 0.515 | 0.542 | 0.487 |
| Jun 2021 | 0.507 | 0.540 | 0.494 |
| Jul 2021 | 0.501 | 0.528 | 0.494 |
| Aug 2021 | 0.472 | 0.506 | 0.483 |
| Sep 2021 | 0.532 | 0.554 | 0.506 |
| Oct 2021 | 0.570 | 0.530 | 0.509 |
| Nov 2021 | 0.586 | 0.525 | 0.510 |
| Dec 2021 | 0.551 | 0.556 | 0.517 |
| Jan 2022 | 0.539 | 0.569 | 0.514 |
| Feb 2022 | 0.537 | 0.566 | 0.515 |
| Mar 2022 | 0.538 | 0.539 | 0.518 |
| Apr 2022 | 0.529 | 0.533 | 0.516 |
| May 2022 | — | — | — |
| Jun 2022 | 0.546 | 0.542 | 0.522 |
| Jul 2022 | 0.595 | 0.553 | 0.527 |
| Aug 2022 | 0.636 | 0.600 | 0.538 |
| Sep 2022 | 0.708 | 0.652 | 0.548 |
| Oct 2022 | 0.764 | 0.672 | 0.552 |
| Nov 2022 | 0.676 | 0.659 | 0.549 |
| Dec 2022 | 0.658 | 0.669 | 0.559 |
| Jan 2023 | 0.572 | 0.645 | 0.554 |
| Feb 2023 | 0.639 | 0.661 | 0.559 |
| Mar 2023 | 0.438 | 0.573 | 0.551 |
| Apr 2023 | 0.411 | 0.510 | 0.545 |
| May 2023 | 0.326 | 0.525 | 0.545 |
| Jun 2023 | 0.490 | 0.466 | 0.548 |
| Jul 2023 | 0.594 | 0.499 | 0.548 |
| Aug 2023 | 0.634 | 0.462 | 0.549 |
| Sep 2023 | 0.531 | 0.490 | 0.548 |
| Oct 2023 | 0.596 | 0.618 | 0.551 |
| Nov 2023 | 0.724 | 0.615 | 0.551 |
| Dec 2023 | 0.527 | 0.549 | 0.548 |
| Jan 2024 | 0.415 | 0.532 | 0.547 |
| Feb 2024 | 0.421 | 0.569 | 0.547 |
| Mar 2024 | 0.529 | 0.528 | 0.547 |
| Apr 2024 | 0.586 | 0.487 | 0.548 |
| May 2024 | 0.469 | 0.450 | 0.545 |
| Jun 2024 | 0.546 | 0.527 | 0.547 |
| Jul 2024 | 0.398 | 0.431 | 0.536 |
| Aug 2024 | 0.396 | 0.438 | 0.534 |
| Sep 2024 | 0.399 | 0.458 | 0.536 |
| Oct 2024 | 0.616 | 0.491 | 0.540 |
| Nov 2024 | 0.632 | 0.510 | 0.541 |
| Dec 2024 | 0.523 | 0.510 | 0.538 |
| Jan 2025 | 0.489 | 0.555 | 0.538 |
| Feb 2025 | 0.460 | 0.543 | 0.537 |
| Mar 2025 | 0.259 | 0.420 | 0.526 |
| Apr 2025 | 0.214 | 0.348 | 0.520 |
| May 2025 | 0.388 | 0.406 | 0.518 |
| Jun 2025 | 0.378 | 0.349 | 0.509 |
| Jul 2025 | 0.407 | 0.347 | 0.506 |
| Aug 2025 | 0.220 | 0.332 | 0.501 |
| Sep 2025 | 0.269 | 0.345 | 0.498 |
| Oct 2025 | 0.140 | 0.344 | 0.493 |
| Nov 2025 | 0.135 | 0.171 | 0.480 |
| Dec 2025 | 0.207 | 0.236 | 0.479 |
| Jan 2026 | 0.256 | 0.228 | 0.476 |
| Feb 2026 | 0.660 | 0.488 | 0.499 |
| Mar 2026 | 0.601 | 0.487 | 0.497 |
| Apr 2026 | 0.654 | 0.533 | 0.501 |
| May 2026 | 0.515 | 0.602 | 0.503 |
| Jun 2026 | 0.595 | 0.599 | 0.503 |
| Jul 2026 | 0.460 | 0.581 | 0.498 |
| Aug 2026 | 0.481 | 0.530 | 0.501 |
As a secondary check, the in-sample CPER–COMEX regression produces an R² of 0.7215 and effectiveness of +72.2%. This is intentionally not the headline: CPER itself holds copper futures, so part of that result is the hedge instrument hedging itself.
Why the daily numbers understate the hedge
On 375 Friday-to-Friday weeks, the in-sample hedge ratio rises to 0.7276 and effectiveness doubles to +70.0% (R² 0.6996); even the naive 1:1 hedge removes +60.2%. The reason is asynchronous closes. LME cash fixes around 1 p.m. London time, COMEX around 1 p.m. New York time, and CPER at 4 p.m. New York. News arriving between those closes can land in one leg’s “day” before the other’s, weakening same-day covariance. Across a week that timing mismatch mostly washes out, so the measured relationship strengthens and h* moves closer to the one-for-one exposure of two copper prices.
Counterintuitively, the violent regimes hedge better at the daily frequency. The closing-time mismatch is roughly constant in size, so it can dominate small moves in calm markets but is swamped when both copper markets make large common moves. COVID 2020 is the clearest warning against reading its +23.1% daily result as a broken hedge: its weekly correlation is approximately 0.92, the highest of the five regimes.
| Regime | Observations | h* | Daily effectiveness |
|---|---|---|---|
| 2019 calm | 244 | 0.4618 | +26.6% |
| 2020 COVID | 246 | 0.4562 | +23.1% |
| 2021–23 tightness | 727 | 0.5639 | +35.4% |
| 2024 squeeze era | 242 | 0.5026 | +36.2% |
| 2025+ tariff era | 386 | 0.4524 | +34.6% |
What a day looks like, hedged and not
The optimally hedged distribution is visibly narrower, with residual daily volatility of $0.0433/lb, but the two overlap heavily and the hedged series keeps most of its tails: the hedge shrinks everyday risk by about a third, it does not flatten the extremes. That modest narrowing is the same +34.1% in-sample variance reduction that remains +33.1% to +33.8% out of sample, not a claim of a near-perfect daily hedge.
- Unhedged: ΔS
- Optimally hedged: ΔS − h*ΔF
Show the numbersHide the numbers
| Daily P&L, $/lb | Unhedged days | Hedged days |
|---|---|---|
| −$0.25 to −$0.20 | 7 | 4 |
| −$0.20 to −$0.15 | 14 | 4 |
| −$0.15 to −$0.10 | 28 | 19 |
| −$0.10 to −$0.05 | 180 | 138 |
| −$0.05 to $0.00 | 631 | 736 |
| $0.00 to $0.05 | 729 | 763 |
| $0.05 to $0.10 | 193 | 155 |
| $0.10 to $0.15 | 49 | 19 |
| $0.15 to $0.20 | 9 | 3 |
| $0.20 to $0.25 | 5 | 4 |
May 2024, when the hedge was the problem
In mid-May 2024 a short squeeze hit COMEX copper. The setup was a delivery trap. High financing costs had drained US exchange inventories, leaving the market with little physical cushion, while investment funds bought copper futures aggressively on expected demand from AI data centers, power grids and electric vehicles. Physical desks stood on the other side of that flow: short COMEX futures against cheaper overseas metal, planning to ship it to the US and deliver it against their shorts.
When the market moved, the escape routes closed. Much of the world’s spare metal was of brands not registered for COMEX delivery, fresh sanctions on Russian metal had narrowed what the LME system could supply, and ships from South America take weeks while margin calls arrive daily. Unable to deliver, shorts had to buy their positions back, and the US futures price tore away from the rest of the world’s copper. In the ten trading days from 30 April to 14 May, the COMEX front month rose $0.3890/lb while LME cash rose only $0.0469/lb. For a desk long 1,000 tonnes of physical copper and short COMEX futures dollar for dollar, the position built to be safe became the problem: a mark-to-market loss of −$0.3421/lb, about −$754,097 in two weeks.
The basis through the squeeze
April to June 2024. The shaded ten days are the squeeze: COMEX runs away from LME and the basis drops to nearly −$0.40/lb, then snaps back through the end of May.
Show the numbersHide the numbers
| Day | Basis, $/lb |
|---|---|
| 2024-04-02 | −0.0240 |
| 2024-04-03 | −0.1415 |
| 2024-04-04 | −0.0476 |
| 2024-04-05 | −0.0674 |
| 2024-04-08 | −0.0581 |
| 2024-04-09 | −0.0696 |
| 2024-04-10 | −0.0341 |
| 2024-04-11 | −0.0606 |
| 2024-04-12 | 0.0072 |
| 2024-04-15 | −0.1198 |
| 2024-04-16 | −0.0522 |
| 2024-04-17 | −0.0633 |
| 2024-04-18 | −0.0783 |
| 2024-04-19 | −0.0799 |
| 2024-04-22 | −0.0487 |
| 2024-04-23 | −0.1365 |
| 2024-04-24 | −0.0803 |
| 2024-04-25 | −0.1294 |
| 2024-04-26 | −0.0925 |
| 2024-04-29 | −0.1526 |
| 2024-04-30 | −0.0406 |
| 2024-05-01 | −0.1114 |
| 2024-05-02 | −0.1123 |
| 2024-05-03 | −0.1569 |
| 2024-05-07 | −0.1590 |
| 2024-05-08 | −0.1440 |
| 2024-05-09 | −0.1949 |
| 2024-05-10 | −0.1839 |
| 2024-05-13 | −0.2645 |
| 2024-05-14 | −0.3826 |
| 2024-05-15 | −0.3333 |
| 2024-05-16 | −0.2164 |
| 2024-05-17 | −0.3405 |
| 2024-05-20 | −0.1628 |
| 2024-05-21 | −0.2315 |
| 2024-05-22 | −0.1288 |
| 2024-05-23 | −0.1488 |
| 2024-05-24 | −0.1262 |
| 2024-05-28 | −0.1894 |
| 2024-05-29 | −0.1362 |
| 2024-05-30 | −0.1286 |
| 2024-05-31 | −0.0809 |
| 2024-06-03 | −0.1476 |
| 2024-06-04 | −0.0763 |
| 2024-06-05 | −0.1884 |
| 2024-06-06 | −0.1868 |
| 2024-06-07 | −0.0311 |
| 2024-06-10 | −0.1591 |
| 2024-06-11 | −0.1835 |
| 2024-06-12 | −0.1828 |
| 2024-06-13 | −0.0927 |
| 2024-06-14 | −0.1738 |
| 2024-06-17 | −0.2228 |
| 2024-06-18 | −0.2864 |
| 2024-06-20 | −0.2417 |
| 2024-06-21 | −0.1563 |
| 2024-06-24 | −0.2043 |
| 2024-06-25 | −0.0755 |
| 2024-06-26 | −0.0947 |
| 2024-06-27 | −0.0545 |
| 2024-06-28 | −0.0920 |
Then it unwound. From 14 May to 31 May the squeeze snapped back and the same hedged position made +$0.3018/lb, or +$665,286. Measured over the whole calendar month, May netted just +$67,234, a statement that reads as if nothing happened. That wash-out is the trap, not the reassurance: the month-end number hides a two-week drawdown of three quarters of a million dollars that the desk had to survive in real time, funding margin calls at the bottom. Basis risk is not the risk of losing by month end; it is the risk of having to live through the ride in between. And the market was about to run the same experiment again, slower and much bigger.
The 2025 tariff premium and its one-day collapse
Where May 2024 was a ten-day accident, 2025 was a seven-month policy trade. Early in the year, traders came to expect that a US Section 232 investigation would end in a 50% tariff on imported refined copper. Anyone who could land cathode in a US warehouse before the tariff hit would own tariff-free metal in a tariffed market, so desks raced to ship copper in, and that buying pushed COMEX to a premium over LME with no precedent in the sample. The basis ground steadily lower until it reached −$1.3237/lb on 25 July 2025, the widest gap in seven and a half years of data. A desk hedged dollar for dollar was dragged along the whole way: from 2 January to 25 July the position bled −$1.2749/lb, or −$2,810,701 on 1,000 tonnes, at the worst mark. Nothing about its copper had changed; it was simply short the expensive leg of a spread that policy expectations kept stretching, posting margin against a loss that grew for seven months.
The basis through the tariff trade
January to September 2025. Seven months of a widening premium (shaded), then the policy landed sideways and the gap closed in days.
Show the numbersHide the numbers
| Day | Basis, $/lb |
|---|---|
| 2025-01-02 | −0.0488 |
| 2025-01-03 | −0.0928 |
| 2025-01-06 | −0.0930 |
| 2025-01-07 | −0.1299 |
| 2025-01-08 | −0.2146 |
| 2025-01-10 | −0.1942 |
| 2025-01-13 | −0.2222 |
| 2025-01-14 | −0.2209 |
| 2025-01-15 | −0.2681 |
| 2025-01-16 | −0.2669 |
| 2025-01-17 | −0.1953 |
| 2025-01-21 | −0.1983 |
| 2025-01-22 | −0.1334 |
| 2025-01-23 | −0.1918 |
| 2025-01-24 | −0.1088 |
| 2025-01-27 | −0.0980 |
| 2025-01-28 | −0.1878 |
| 2025-01-29 | −0.2291 |
| 2025-01-30 | −0.2170 |
| 2025-01-31 | −0.2026 |
| 2025-02-03 | −0.2722 |
| 2025-02-04 | −0.2633 |
| 2025-02-05 | −0.3408 |
| 2025-02-06 | −0.2963 |
| 2025-02-07 | −0.3685 |
| 2025-02-10 | −0.4878 |
| 2025-02-11 | −0.4010 |
| 2025-02-12 | −0.4898 |
| 2025-02-13 | −0.5225 |
| 2025-02-14 | −0.2058 |
| 2025-02-18 | −0.3689 |
| 2025-02-19 | −0.2783 |
| 2025-02-20 | −0.2923 |
| 2025-02-21 | −0.2536 |
| 2025-02-24 | −0.2124 |
| 2025-02-25 | −0.1937 |
| 2025-02-26 | −0.2311 |
| 2025-02-27 | −0.3092 |
| 2025-02-28 | −0.2673 |
| 2025-03-03 | −0.3306 |
| 2025-03-04 | −0.2660 |
| 2025-03-05 | −0.4388 |
| 2025-03-06 | −0.4000 |
| 2025-03-07 | −0.2995 |
| 2025-03-10 | −0.3090 |
| 2025-03-11 | −0.3728 |
| 2025-03-12 | −0.3912 |
| 2025-03-13 | −0.4975 |
| 2025-03-14 | −0.4429 |
| 2025-03-17 | −0.5119 |
| 2025-03-18 | −0.5324 |
| 2025-03-19 | −0.5791 |
| 2025-03-20 | −0.5892 |
| 2025-03-21 | −0.6291 |
| 2025-03-24 | −0.5381 |
| 2025-03-25 | −0.6552 |
| 2025-03-26 | −0.7327 |
| 2025-03-27 | −0.6582 |
| 2025-03-28 | −0.6696 |
| 2025-03-31 | −0.6324 |
| 2025-04-01 | −0.6409 |
| 2025-04-02 | −0.6481 |
| 2025-04-03 | −0.5486 |
| 2025-04-04 | −0.3790 |
| 2025-04-07 | −0.1660 |
| 2025-04-08 | −0.1540 |
| 2025-04-09 | −0.3023 |
| 2025-04-10 | −0.2486 |
| 2025-04-11 | −0.3435 |
| 2025-04-14 | −0.4318 |
| 2025-04-15 | −0.4860 |
| 2025-04-16 | −0.5540 |
| 2025-04-17 | −0.6020 |
| 2025-04-22 | −0.6550 |
| 2025-04-23 | −0.5642 |
| 2025-04-24 | −0.5815 |
| 2025-04-25 | −0.5881 |
| 2025-04-28 | −0.5899 |
| 2025-04-29 | −0.5195 |
| 2025-04-30 | −0.3851 |
| 2025-05-01 | −0.4102 |
| 2025-05-02 | −0.3746 |
| 2025-05-06 | −0.4259 |
| 2025-05-07 | −0.3137 |
| 2025-05-08 | −0.2913 |
| 2025-05-09 | −0.3084 |
| 2025-05-12 | −0.2285 |
| 2025-05-13 | −0.3569 |
| 2025-05-14 | −0.2341 |
| 2025-05-15 | −0.3184 |
| 2025-05-16 | −0.2309 |
| 2025-05-19 | −0.3040 |
| 2025-05-20 | −0.2968 |
| 2025-05-21 | −0.3141 |
| 2025-05-22 | −0.3425 |
| 2025-05-23 | −0.4543 |
| 2025-05-27 | −0.3315 |
| 2025-05-28 | −0.2523 |
| 2025-05-29 | −0.2802 |
| 2025-05-30 | −0.2876 |
| 2025-06-02 | −0.4551 |
| 2025-06-03 | −0.4355 |
| 2025-06-04 | −0.4767 |
| 2025-06-05 | −0.4529 |
| 2025-06-06 | −0.3871 |
| 2025-06-09 | −0.4421 |
| 2025-06-10 | −0.4143 |
| 2025-06-11 | −0.3875 |
| 2025-06-12 | −0.3858 |
| 2025-06-13 | −0.4222 |
| 2025-06-16 | −0.4094 |
| 2025-06-17 | −0.3460 |
| 2025-06-18 | −0.3812 |
| 2025-06-20 | −0.3150 |
| 2025-06-23 | −0.2912 |
| 2025-06-24 | −0.3626 |
| 2025-06-25 | −0.4633 |
| 2025-06-26 | −0.4774 |
| 2025-06-27 | −0.5094 |
| 2025-06-30 | −0.4759 |
| 2025-07-01 | −0.4844 |
| 2025-07-02 | −0.5927 |
| 2025-07-03 | −0.5066 |
| 2025-07-07 | −0.4971 |
| 2025-07-08 | −1.1431 |
| 2025-07-09 | −1.0731 |
| 2025-07-10 | −1.1246 |
| 2025-07-11 | −1.1905 |
| 2025-07-14 | −1.1809 |
| 2025-07-15 | −1.2078 |
| 2025-07-16 | −1.1588 |
| 2025-07-17 | −1.1379 |
| 2025-07-18 | −1.1931 |
| 2025-07-21 | −1.1773 |
| 2025-07-22 | −1.2434 |
| 2025-07-23 | −1.3217 |
| 2025-07-24 | −1.3041 |
| 2025-07-25 | −1.3237 |
| 2025-07-28 | −1.1575 |
| 2025-07-29 | −1.1885 |
| 2025-07-30 | −1.1704 |
| 2025-07-31 | 0.0267 |
| 2025-08-01 | −0.0873 |
| 2025-08-04 | −0.0503 |
| 2025-08-05 | −0.0202 |
| 2025-08-06 | −0.0345 |
| 2025-08-07 | −0.0075 |
| 2025-08-08 | −0.0888 |
| 2025-08-11 | −0.0493 |
| 2025-08-12 | −0.1261 |
| 2025-08-13 | −0.0611 |
| 2025-08-14 | −0.0803 |
| 2025-08-15 | −0.1140 |
| 2025-08-18 | −0.0905 |
| 2025-08-19 | −0.0448 |
| 2025-08-20 | −0.0822 |
| 2025-08-21 | −0.0720 |
| 2025-08-22 | −0.0735 |
| 2025-08-26 | −0.0472 |
| 2025-08-27 | −0.0228 |
| 2025-08-28 | −0.0621 |
| 2025-08-29 | −0.0710 |
| 2025-09-02 | −0.1363 |
| 2025-09-03 | −0.0802 |
| 2025-09-04 | −0.0369 |
| 2025-09-05 | −0.0005 |
| 2025-09-08 | −0.0405 |
| 2025-09-09 | −0.0456 |
| 2025-09-10 | −0.0835 |
| 2025-09-11 | −0.0881 |
| 2025-09-12 | −0.0505 |
| 2025-09-15 | −0.1259 |
| 2025-09-16 | −0.0646 |
| 2025-09-17 | −0.0832 |
| 2025-09-18 | −0.0527 |
| 2025-09-19 | −0.0766 |
| 2025-09-22 | −0.0727 |
| 2025-09-23 | −0.0939 |
| 2025-09-24 | −0.2792 |
| 2025-09-25 | −0.0225 |
| 2025-09-26 | −0.1226 |
| 2025-09-29 | −0.1994 |
| 2025-09-30 | −0.1330 |
On 30 July the administration finalized the 50% tariff but exempted refined cathodes, applying it to semi-finished goods like wire and pipe instead. The premise of the front-running trade disappeared in an afternoon, and the cathode stacked in US warehouses turned from a prize into an overhang of unneeded local supply. The premium collapsed, and between 25 July and 5 August the same hedged position earned back +$1.3036/lb, or +$2,873,867. The arc is May 2024 again, roughly four times larger with a one-day ending, and it carries the same lesson: on paper the round trip nets out, but only the desk that could fund seven months of growing margin calls was still there to collect it.
From ratio to contracts
Desk instruction, 1,000 tonnes long
Short 44
COMEX contracts, not 88
0.5025 × 2,204,620 lb ÷ 25,000 lb per contract = 44.31. The naive hedge would short twice the futures and post twice the margin for almost none of the daily risk reduction.
The hedge ratio is a desk instruction: short 0.5025 lb of COMEX futures for every pound of physical cathode held long. For a 1,000-tonne cathode position (2,204,620 lb) that is about 1.1 million lb of futures to short, and at 25,000 lb per contract that rounds to 44 contracts.
Rounding to a whole number of contracts under-hedges by 7,796 lb and costs 0.0017 percentage points of effectiveness: at this position size, integer contracts are a rounding error, not a constraint. Doing so removes 34.1% of the position’s daily price variance in-sample and 33.1% to 33.8% out of sample. The naive 1:1 hedge would short 88 contracts for +0.6% on the same days.
What this does not claim
CPER is a futures-tracking proxy, not physical copper. It holds COMEX futures itself, so its +72.2% effectiveness partly measures the hedge instrument hedging itself. That is why LME cash is the primary leg and CPER is only a robustness check.
HG=F is a spliced front-month series. Contract rolls inject artificial jumps into the futures changes; a gap heuristic flags and excludes 29 roll days. The heuristic can also catch genuinely violent days that fall near roll windows, so part of the clean-sample lift comes from excluding real days. Per-contract data would do better.
Closes are not simultaneous. COMEX settles around 1 p.m. New York, LME fixes around 1 p.m. London, and CPER closes at 4 p.m. New York. Daily correlations are mechanically attenuated by the timing mismatch, which is why the weekly numbers (+70.0% against +34.1% daily) are the fairer read of the hedge relationship.
LME and COMEX are different markets in grade and location. LME warehouses hold Grade A cathode around the world; COMEX requires US-deliverable brands. 2024 and 2025 proved the two can part company exactly when it matters most. That gap is the basis risk this project measures, but it also means the results do not transfer directly to a desk whose physical copper prices off a different benchmark.
Physical flows outside exchange reporting. Off-warrant and unregistered stockpiles, and policy-driven hoarding such as the 2025 tariff front-running, move the basis in ways visible exchange inventory cannot explain. Their contribution to unhedgeable basis risk is real but not separately measured here.
One instrument, front month only. No calendar spreads, no options, no FX leg; h* here is a single-instrument answer.
Reproduce it
Committed CSVs under data/ are the source of truth: LME cash was scraped once from Westmetall, HG=F and CPER were pulled once from yfinance, and nothing refetches on a normal run. The code splits by job: data.py loads, converts units and aligns the series; roll.py detects futures roll days; hedge.py holds the hedge ratios, effectiveness, the out-of-sample engine and the weekly and sub-period reports; basis.py holds the basis statistics and the case-study windows. All of the math is unit-tested: 115 tests.
git clone https://github.com/Jesstran12/copper-physical-futures-hedge-optimization-basis-risk-model.git
cd copper-physical-futures-hedge-optimization-basis-risk-model
uv sync # exact environment (Python >= 3.12)
uv run pytest # 115 passed