High Grade Copper Futures (HG) Trading Strategy
Overview
Forecasting
Directional signal comes from a 3-factor regression using China Caixin PMI, USD index (DXY), and LME copper inventory levels for daily price movements in copper.
Roll-Yield Management
Manage the cost of carry (contango/backwardation). Profits from the above forecasting signal can be wiped out by roll costs. The model will damp the position size based on carry filters preventing headwinds.
Data Sourcing / Contract Specs
HG Copper Contract
· Contract Size – 25,000 lbs
· Quote – USD/Pound
· Minimum Tick - $0.0005/lb
· Tick Value - $12.5 per contract per tick
· Point Value - $250 per $0.01/lb move
Data Required
Dependent Variables
· HG1 – Log-difference of the COMEX HG front continuous price times 100 (forecasted value by the model)
Independent Variables
· DXY – Log-difference of the USD index times 100
· PMI – Level change in the Caixin manufacturing PMI (linearly interpolate the monthly values to find daily)
· STOCKS – Log-difference of LME inventories on-warrant copper stocks times 100
All of these are available on FactSet
Carry Filter Inputs
· Daily settlement prices for the front-month and second-deferred HG contracts (this will indicate contango/backwardation)
Risk and Roll Data
· Daily high, low, close data for the 14-day average true range (ATR)
· First day notice (FND) and Last Trade Day (LTD) for all historical HG contracts.
Trading Plan
Entry Criteria
Entry signals are checked once per day, only using available data before the market open to generate signal for the day
Signal
The model will be as follows
· Regression will be run over a historical window (2 years, or another) to find the betas
· Each morning, the script. will enter the new values of DXY, PMI, and STOCKS to generate a new HG1 return
· Singal is generated when it hits a threshold (for example +0.1%)
o Take long position if forecasted return (HG1) > 0.1%
o Take short position if forecasted return < 0.1%
o Hold / Do nothing if forecast is between -0.1% and 0.1%, i.e. do not have any position
Carry / Roll Yield Filter
If the decision is something other than neutral, the model will check the carry filter before sizing the trade. This avoids bad trades
Long Entry Filter
· If Spread (Contango) is > $0.01/lb but < $0.02/lb, position size is halved.
· If Spread (Contango) is > $0.02/lb, position size is quartered or stand aside (no trade).
· If Spread is <=$0.01/lb or in backwardation, we take the full position size.
Short Entry Filter
· If Spread (Backwardation) is < $0.01/lb but < $0.02/lb, position size is halved.
· If Spread (Backwardation) is < $0.02/lb, position size is quartered or stand aside (no trade).
· If Spread is >=$0.01/lb or in contango, we take the full position size.
Contract Selection & Roll Logic:
Active Contract
We will always hold the first-deferred month contract to reduce delivery risk.
Roll Execution
We must exit our current position and enter the new first-deferred month (which is the old second-deferred month) exactly five trading days before the front month's First Notice Day (FND)
Trade Exit Criteria
Stop-Loss (Risk Management)
· Our primary stop-loss will be a trailing stop based on the 14-day Average True Range (ATR).
· Stop Distance: The stop will be placed at 1.5 times the 14-day ATR from the current price.
Signal Reversal (Exit)
· A long position is closed if the Forecasted Return from the 3-factor model flips to Hold/Neutral or Short Entry.
· A short position is closed if the Forecasted Return flips to Hold/Neutral or Long Entry.
Rolls (Forced Exit)
· All positions are automatically exited 5 trading days before FND, as per the roll logic.
Position Size Determination
Sizing is rules-based and anchored to a fixed-dollar risk budget per trade.
Variables
Account_Equity: Total capital.
Risk_Percent: The percentage of equity to risk per trade (e.g., 1.0%).
Max_Risk_Dollars: Account_Equity * Risk_Percent.
Sizing Algorithm
1. Calculate ATR: Compute the current 14-day ATR of HG futures.
2. Define Stop Distance: Stop_Distance_per_lb = 1.5 * ATR.
3. Calculate Risk per Contract: Dollar_Risk_per_Contract = Stop_Distance_per_lb * 25,000.
a. Example: $0.0675/lb * 25,000 lbs = $1,687.50 risk per contract.
4. Calculate Base Position Size: Base_Contracts = floor( Max_Risk_Dollars / Dollar_Risk_per_Contract ) .
a. Example: floor($100,000 / $1,687.50) = 59 contracts.
5. Apply Carry Damping (Edge):
a. Final_Contracts = Base_Contracts * (Carry Filter Multiplier).
b. Example: If the Spread is > $0.02/lb (strong contango), the multiplier is 0.25. The script. would size down from 59 contracts to floor (59 * 0.25) = 14 contracts.
Trade Execution Rules
Order Types
· Stop-Limit orders for all stops, as Stop-Market orders risk slippage in thin markets.
· The limit offset will be rules-based: Limit Band = max(4 ticks, 1.5 * average overnight spread), as derived from the logic in the manual .
Execution Timing (Script. Rules):
· Blackout Periods: The script. will be prohibited from executing trades during two high-risk periods identified in the manual:
o The Settlement Window.
o The "exact minute" of major data releases, such as the PMI data our model uses or FOMC announcements.
· Liquidity: The script. will prioritise execution during the "thick" U.S. day session.
Extra Logic – For ease of understanding
Currently in a long Position:
· And the new signal is long: do nothing. continue to hold long position.
· And the new signal is neutral: exit long position ( flatten the book) and hold cash.
· And the new signal is short: exit long position and enter a new short position (subject to the carry filter).
Currently in a short Position:
· And the new signal is short: do nothing. continue to hold short position.
· And the new signal is neutral: exit short position (flatten book).
· And the new signal is long: exit short position and enter a new long position (subject to the carry filter).
Currently in NO Position (Neutral/Cash):
· And the new signal is neutral: do nothing.
· And the new signal is long: enter a new long position (sized by the carry filter).
· And the new signal is short: enter a new short position (sized by the carry filter).
Backtesting & Strategy Refinement (For Part B)
Backtesting (Part A):
We will backtest this strategy, making sure to log P&L from two separate sources
1. Directional P&L (from the price change)
2. Roll P&L (from the cost/gain of rolling the contract).
This will prove our dual edge by showing:
1. The predictive power of the 3-factor model.
2. The P&L saved (or earned) by the carry-filter and roll-management logic.
· Refinement (Part B):
Since our baseline model is already advanced, our refinements can be sophisticated:
· Optimize Thresholds: We can optimize the Forecasted Return threshold (e.g., is 0.10% the best?) and the Carry Filter thresholds (e.g., is $0.01/lb$ the best?).
Data Required:
1. Daily HLC for the First-Deferred (M2) HG Contract (for ATR).
2. Daily Settlement Price for the Second-Deferred (M3) HG Contract (for the carry spread).
3. Daily Settlement Price for the Front Continuous HG Contract (for the HG1 variable).
4. Daily Level for the DXY.
5. Daily Tonnage for LME On-Warrant Copper Stocks.
6. Monthly Level for China Caixin Manufacturing PMI.
7. Reference Calendar of First Notice Days (FNDs) for all historical HG contracts.
Assumed Transaction Costs (Direct Cost + Slippage [Spread Costs])
Total Transaction Cost (For Your Model)
Deduct the sum of these two costs from every round-turn trade (every time a position is opened and closed).
· Total Cost = (Direct Costs) + (Indirect Costs)
· Total Cost $7.50 (Commissions) + $25.00 (Slippage)
· $32.50 per contract, per round-turn trade.