Jess Tran

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.

−$1.50/lb−$1.00/lb−$0.50/lb$0.00/lb$0.50/lbAverage −$0.06/lbMay 2024 squeeze2025 tariff premium2020202120222023202420252026
Show the numbers
LME minus COMEX basis in dollars per pound, first trading day of each month
MonthBasis, $/lb
Jan 20190.0235
Feb 2019−0.0092
Mar 20190.0475
Apr 20190.0269
May 20190.0991
Jun 2019−0.0265
Jul 20190.0416
Aug 20190.0053
Sep 2019−0.0010
Oct 2019−0.0073
Nov 2019−0.0215
Dec 20190.0235
Jan 2020−0.0364
Feb 20200.0249
Mar 2020−0.0427
Apr 2020−0.0275
May 2020−0.0229
Jun 2020−0.0358
Jul 20200.0120
Aug 20200.0136
Sep 20200.0697
Oct 20200.1366
Nov 2020−0.0288
Dec 2020−0.0007
Jan 20210.0388
Feb 2021−0.0117
Mar 20210.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 20210.0772
Dec 20210.0938
Jan 2022−0.0843
Feb 2022−0.0287
Mar 2022−0.0615
Apr 2022−0.0345
May 20220.0431
Jun 2022−0.0413
Jul 2022−0.0014
Aug 20220.0452
Sep 20220.0791
Oct 2022−0.0452
Nov 20220.0036
Dec 2022−0.0871
Jan 20230.0396
Feb 20230.0507
Mar 2023−0.0555
Apr 20230.0074
May 20230.0407
Jun 20230.0177
Jul 20230.0108
Aug 20230.0621
Sep 20230.0498
Oct 20230.0423
Nov 20230.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 20240.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 20260.0621
Feb 20260.0893
Mar 20260.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
  1. Daily, in sample1,845 observations

    Minimum-variance hedge
    34.1%
    Naive 1:1 hedge
    0.7%
  2. Daily, out of sample, 60-day window1,785 days

    Minimum-variance hedge
    33.5%
    Naive 1:1 hedge
    0.6%
  3. Daily, out of sample, 120-day window1,725 days

    Minimum-variance hedge
    33.1%
    Naive 1:1 hedge
    0.6%
  4. Daily, out of sample, expanding window1,785 days

    Minimum-variance hedge
    33.8%
    Naive 1:1 hedge
    0.6%
  5. 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.

The three price series and their roles
SeriesSourceRole in the hedge
LME cash copperWestmetallPhysical proxy, the exposure being hedged (S)
COMEX HG front-month futuresyfinanceHedging instrument, what gets shorted (F)
CPER ETFyfinanceSecondary 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
0.5×1.0×1.5×2.0×2.5×3.0×2020202120222023202420252026
Show the numbers
Weekly closing levels indexed to 2 January 2019, first week of each month
WeekLME cashCOMEX HGCPER
Jan 20191.00×1.01×1.01×
Feb 20191.04×1.06×1.06×
Mar 20191.13×1.12×1.12×
Apr 20191.10×1.10×1.11×
May 20191.06×1.08×1.08×
Jun 20190.99×1.00×1.01×
Jul 20191.00×1.01×1.02×
Aug 20190.99×0.98×0.99×
Sep 20190.99×1.00×1.01×
Oct 20190.96×0.97×0.99×
Nov 20190.99×1.01×1.02×
Dec 20191.00×1.03×1.06×
Jan 20201.04×1.07×1.07×
Feb 20200.97×0.97×0.98×
Mar 20200.96×0.98×0.98×
Apr 20200.83×0.84×0.84×
May 20200.87×0.88×0.89×
Jun 20200.96×0.97×0.98×
Jul 20201.04×1.04×1.05×
Aug 20201.10×1.06×1.07×
Sep 20201.14×1.16×1.17×
Oct 20201.10×1.14×1.12×
Nov 20201.19×1.20×1.20×
Dec 20201.33×1.34×1.34×
Jan 20211.33×1.34×1.33×
Feb 20211.36×1.39×1.38×
Mar 20211.54×1.56×1.55×
Apr 20211.50×1.52×1.52×
May 20211.77×1.82×1.79×
Jun 20211.69×1.73×1.71×
Jul 20211.59×1.63×1.61×
Aug 20211.63×1.66×1.63×
Sep 20211.60×1.65×1.63×
Oct 20211.56×1.60×1.58×
Nov 20211.67×1.66×1.63×
Dec 20211.63×1.63×1.60×
Jan 20221.65×1.68×1.65×
Feb 20221.69×1.71×1.69×
Mar 20221.79×1.88×1.84×
Apr 20221.75×1.78×1.76×
May 20221.61×1.62×1.58×
Jun 20221.62×1.65×1.61×
Jul 20221.37×1.38×1.34×
Aug 20221.34×1.35×1.32×
Sep 20221.30×1.30×1.26×
Oct 20221.30×1.30×1.25×
Nov 20221.35×1.42×1.38×
Dec 20221.43×1.47×1.43×
Jan 20231.43×1.49×1.46×
Feb 20231.55×1.55×1.51×
Mar 20231.53×1.55×1.53×
Apr 20231.51×1.53×1.51×
May 20231.45×1.48×1.47×
Jun 20231.43×1.42×1.41×
Jul 20231.42×1.44×1.43×
Aug 20231.45×1.47×1.47×
Sep 20231.46×1.45×1.46×
Oct 20231.35×1.38×1.38×
Nov 20231.38×1.40×1.40×
Dec 20231.45×1.49×1.49×
Jan 20241.43×1.45×1.45×
Feb 20241.44×1.46×1.46×
Mar 20241.44×1.47×1.48×
Apr 20241.57×1.61×1.63×
May 20241.67×1.74×1.74×
Jun 20241.69×1.71×1.69×
Jul 20241.68×1.77×1.77×
Aug 20241.54×1.56×1.59×
Sep 20241.54×1.53×1.56×
Oct 20241.68×1.72×1.76×
Nov 20241.61×1.66×1.68×
Dec 20241.55×1.58×1.61×
Jan 20251.49×1.54×1.57×
Feb 20251.59×1.75×1.77×
Mar 20251.66×1.78×1.81×
Apr 20251.51×1.67×1.69×
May 20251.61×1.76×1.79×
Jun 20251.68×1.84×1.86×
Jul 20251.73×1.94×1.96×
Aug 20251.63×1.68×1.69×
Sep 20251.69×1.71×1.72×
Oct 20251.80×1.93×1.92×
Nov 20251.84×1.88×1.88×
Dec 20251.99×2.05×2.05×
Jan 20262.15×2.15×2.15×
Feb 20262.20×2.23×2.23×
Mar 20262.19×2.19×2.19×
Apr 20262.08×2.12×2.11×
May 20262.21×2.26×2.23×
Jun 20262.35×2.39×2.34×
Jul 20262.26×2.33×2.29×
Aug 20262.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 hedge estimates, in sample and out of sample
Daily estimateObservationsh*EffectivenessNaive 1:1, same days
In-sample, full history1,8450.50250.3405+34.1%+0.7%
Out of sample, 60-day rolling1,785n/an/a+33.5%+0.6%
Out of sample, 120-day rolling1,725n/an/a+33.1%+0.6%
Out of sample, expanding1,785n/an/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
0.000.200.400.600.80Full-sample h* = 0.502020202120222023202420252026
Show the numbers
One-step-ahead hedge ratios, first trading day of each month; blank during the warm-up
Month60-day120-dayExpanding
Jan 2019
Feb 2019
Mar 2019
Apr 20190.5210.521
May 2019
Jun 20190.7110.553
Jul 20190.5260.523
Aug 20190.5230.6010.523
Sep 20190.4510.5510.505
Oct 20190.4620.4750.499
Nov 20190.3620.4660.494
Dec 20190.2010.4090.468
Jan 20200.2710.3830.462
Feb 20200.5140.4470.497
Mar 20200.6340.4400.501
Apr 20200.6570.5290.514
May 20200.6850.6040.540
Jun 20200.7060.6840.552
Jul 20200.7090.6960.555
Aug 20200.5440.6460.554
Sep 20200.3430.5200.512
Oct 20200.3160.4690.498
Nov 20200.1570.2640.434
Dec 20200.2650.3010.460
Jan 20210.6590.3050.460
Feb 20210.5680.3120.456
Mar 20210.5390.4030.476
Apr 20210.5600.5800.491
May 20210.5150.5420.487
Jun 20210.5070.5400.494
Jul 20210.5010.5280.494
Aug 20210.4720.5060.483
Sep 20210.5320.5540.506
Oct 20210.5700.5300.509
Nov 20210.5860.5250.510
Dec 20210.5510.5560.517
Jan 20220.5390.5690.514
Feb 20220.5370.5660.515
Mar 20220.5380.5390.518
Apr 20220.5290.5330.516
May 2022
Jun 20220.5460.5420.522
Jul 20220.5950.5530.527
Aug 20220.6360.6000.538
Sep 20220.7080.6520.548
Oct 20220.7640.6720.552
Nov 20220.6760.6590.549
Dec 20220.6580.6690.559
Jan 20230.5720.6450.554
Feb 20230.6390.6610.559
Mar 20230.4380.5730.551
Apr 20230.4110.5100.545
May 20230.3260.5250.545
Jun 20230.4900.4660.548
Jul 20230.5940.4990.548
Aug 20230.6340.4620.549
Sep 20230.5310.4900.548
Oct 20230.5960.6180.551
Nov 20230.7240.6150.551
Dec 20230.5270.5490.548
Jan 20240.4150.5320.547
Feb 20240.4210.5690.547
Mar 20240.5290.5280.547
Apr 20240.5860.4870.548
May 20240.4690.4500.545
Jun 20240.5460.5270.547
Jul 20240.3980.4310.536
Aug 20240.3960.4380.534
Sep 20240.3990.4580.536
Oct 20240.6160.4910.540
Nov 20240.6320.5100.541
Dec 20240.5230.5100.538
Jan 20250.4890.5550.538
Feb 20250.4600.5430.537
Mar 20250.2590.4200.526
Apr 20250.2140.3480.520
May 20250.3880.4060.518
Jun 20250.3780.3490.509
Jul 20250.4070.3470.506
Aug 20250.2200.3320.501
Sep 20250.2690.3450.498
Oct 20250.1400.3440.493
Nov 20250.1350.1710.480
Dec 20250.2070.2360.479
Jan 20260.2560.2280.476
Feb 20260.6600.4880.499
Mar 20260.6010.4870.497
Apr 20260.6540.5330.501
May 20260.5150.6020.503
Jun 20260.5950.5990.503
Jul 20260.4600.5810.498
Aug 20260.4810.5300.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.

Hedge ratio and daily effectiveness by market regime
RegimeObservationsh*Daily effectiveness
2019 calm2440.4618+26.6%
2020 COVID2460.4562+23.1%
2021–23 tightness7270.5639+35.4%
2024 squeeze era2420.5026+36.2%
2025+ tariff era3860.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
100 days200 days300 days−$0.25−$0.20−$0.15−$0.10−$0.05$0.00$0.05$0.10$0.15$0.20$0.25
Show the numbers
Trading days by size of daily P&L per pound, in $0.05 bands
Daily P&L, $/lbUnhedged daysHedged days
−$0.25 to −$0.2074
−$0.20 to −$0.15144
−$0.15 to −$0.102819
−$0.10 to −$0.05180138
−$0.05 to $0.00631736
$0.00 to $0.05729763
$0.05 to $0.10193155
$0.10 to $0.154919
$0.15 to $0.2093
$0.20 to $0.2554

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.

−$0.40/lb−$0.30/lb−$0.20/lb−$0.10/lb$0.00/lb$0.10/lbSqueeze peaks, 14 MayApr 2024MayJun
Show the numbers
Daily LME minus COMEX basis in dollars per pound
DayBasis, $/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-120.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.

−$1.50/lb−$1.00/lb−$0.50/lb$0.00/lb$0.50/lbWidest gap, −$1.32/lbTariff lands, cathode exemptFeb 2025MarAprMayJunJulAugSep
Show the numbers
Daily LME minus COMEX basis in dollars per pound
DayBasis, $/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-310.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.

Open the repository (opens in a new tab)

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