Skip to content

B. Curve & Carry Strategies (B.6--B.9)

Extract carry and basis signals from the gold and silver futures term structure. The futures curve embeds cost-of-carry and convenience yield. Deviations from fair value signal physical tightness or excess supply; roll yield is a persistent premium.


Term Structure Anatomy

graph LR
    subgraph "Contango (Normal)"
        F1C[Front Month<br/>$2,050] --> F2C[Second Month<br/>$2,060] --> F3C[Third Month<br/>$2,072]
    end
    subgraph "Backwardation (Physical Tightness)"
        F1B[Front Month<br/>$2,080] --> F2B[Second Month<br/>$2,070] --> F3B[Third Month<br/>$2,058]
    end

Fair carry model:

\[ F_T = S_0 \cdot e^{(r + s - y) \cdot T} \]

where \(r\) = risk-free rate (SOFR), \(s\) = storage cost (~25 bps for gold), \(y\) = convenience yield. When \(F_T < S_0 \cdot e^{(r+s)T}\), convenience yield is positive (backwardation).


B.6 GC Term Structure

Module: qgtm_strategies/gc_term_structure.py Class: GCTermStructureStrategy ID: gc_term_structure

Economic Rationale

Gold futures normally trade in contango due to cost-of-carry (storage + financing). When the curve flips to backwardation (front > back), it signals physical tightness -- strong demand for immediate delivery. Backwardation is a long signal; steep contango implies excess supply.

Signal Formula

Step 1 -- Basis computation:

\[ \text{basis}_t = \frac{P_{\text{front}} - P_{\text{back}}}{P_{\text{back}}} \]

Positive basis = backwardation. Negative basis = contango.

Step 2 -- Annualized roll yield:

\[ \text{roll\_yield}_t = \text{basis}_t \times \frac{365}{\Delta \text{DTE}} \]

Step 3 -- Z-score filter:

\[ z_{\text{basis}} = \frac{\text{basis}_t - \bar{\text{basis}}_{252}}{\sigma_{\text{basis}, 252}} \]

Step 4 -- Calendar spread deviation from fair carry:

\[ \text{fair\_basis} = e^{(r_{\text{SOFR}} + 0.0025) \cdot \Delta T / 365} - 1 \]
\[ \text{dislocation} = \text{basis}_t - \text{fair\_basis} \]

Entry rules:

Condition Signal Sizing
\(z_{\text{basis}} > 1.5\) (backwardation) LONG \(\min(0.5, z/4)\)
\(z_{\text{basis}} < -1.5\) (steep contango) SHORT/FLAT \(-\min(0.3, \|z\|/4)\)
Otherwise FLAT 0

Parameters

Parameter Default Range
zscore_window 252 126--504
entry_z 1.5 1.0--2.5
storage_cost_annual 0.0025 0.001--0.005
max_weight 0.5 0.2--0.8

Factor Exposures

Factor Loading
Metals +0.6
Carry +0.7
Momentum +0.2

Capacity & Decay

  • Max capacity: $35M
  • Alpha half-life: 30 days
  • Kill condition: Basis z-score model produces negative PnL in 4 of last 6 months
  • Expected Sharpe: 0.5--0.9

References

  • Gorton & Rouwenhorst (2006) "Facts and Fantasies about Commodity Futures"
  • Erb & Harvey (2006) "The Strategic and Tactical Value of Commodity Futures"
  • Szymanowska et al. (2014) "An Anatomy of Commodity Futures Risk Premia"

B.7 SI Term Structure

Module: qgtm_strategies/si_term_structure.py Class: SilverTermStructureStrategy ID: si_term_structure

Economic Rationale

Same framework as GC but silver-specific dynamics. Silver's higher industrial demand component (solar, electronics) creates larger basis swings and more frequent/dramatic backwardation episodes. The roll yield is more volatile but offers higher expected return per unit of risk.

Signal Formula

\[ \text{basis}_t = \frac{P_{\text{front}} - P_{\text{back}}}{P_{\text{front}}} \]
\[ z_{\text{basis}} = \text{zscore}\!\bigl(\text{basis}_t,\; \text{lookback}\bigr) \]
\[ \text{roll\_yield}_t = -\text{basis}_t \times \frac{252}{\Delta\text{DTE}} \]
\[ \text{signal} = 0.6 \cdot z_{\text{basis}} + 0.4 \cdot z_{\text{roll\_yield}} \]

Positive basis (backwardation) + positive roll yield = long SLV.

Factor Exposures

Factor Loading
Metals +0.5
Carry +0.8

Capacity & Decay

  • Max capacity: $20M (silver market is smaller)
  • Alpha half-life: 21 days (faster-moving industrial dynamics)
  • Expected Sharpe: 0.4--0.8

References

  • Gorton & Rouwenhorst (2006)
  • Szymanowska et al. (2014)
  • Koijen et al. (2018) "Carry"

B.8 Cross Carry

Module: qgtm_strategies/cross_carry.py Class: CrossCarryStrategy ID: cross_carry

Economic Rationale

Gold and silver have different convenience yields driven by distinct demand structures (monetary vs. industrial). When their carry diverges significantly, the spread tends to mean-revert as arbitrageurs exploit the differential. The carry itself is a risk premium.

Signal Formula

Step 1 -- Compute per-metal carry:

\[ C_{\text{GC}} = -\frac{P_{\text{front}}^{\text{GC}} - P_{\text{back}}^{\text{GC}}}{P_{\text{front}}^{\text{GC}}} \times \frac{252}{\Delta\text{DTE}_{\text{GC}}} \]
\[ C_{\text{SI}} = -\frac{P_{\text{front}}^{\text{SI}} - P_{\text{back}}^{\text{SI}}}{P_{\text{front}}^{\text{SI}}} \times \frac{252}{\Delta\text{DTE}_{\text{SI}}} \]

Step 2 -- Carry differential z-score:

\[ \Delta C_t = C_{\text{GC}} - C_{\text{SI}} \]
\[ z_{\Delta C} = \text{zscore}\!\bigl(\Delta C_t,\; \text{lookback}\bigr) \]

Step 3 -- Spread trade:

Condition Long Leg Short Leg
\(z_{\Delta C} > 1.5\) GLD SLV
\(z_{\Delta C} < -1.5\) SLV GLD
Otherwise FLAT FLAT

Factor Exposures

Factor Loading
Carry +0.9
Metals +0.1
Momentum +0.1

Capacity & Decay

  • Max capacity: $25M
  • Alpha half-life: 42 days
  • Expected Sharpe: 0.5--0.8

Market-neutral

This is a relative value strategy with near-zero net metals exposure. Dollar risk is hedged by construction.

References

  • Koijen et al. (2018) "Carry" -- Journal of Financial Economics
  • Szymanowska et al. (2014)
  • Bakshi & Panayotov (2013) "Predictability of Currency Carry Trades"

B.9 Backwardation Stress

Status: Planned

Economic Rationale

A multi-signal stress detector that combines term-structure inversion with physical market indicators (COMEX stocks, LBMA vault data, EFP spread) to detect delivery squeeze risk. Unlike B.6/B.7 which trade the basis directly, this strategy triggers only during extreme physical market stress and takes aggressive directional positions.

Signal Formula (Proposed)

\[ \text{stress\_score} = \sum_{i} w_i \cdot \mathbb{1}\!\bigl[x_i > \tau_i\bigr] \]
Component \(x_i\) Weight \(w_i\) Threshold \(\tau_i\)
GC backwardation z 0.3 > 2.0
SI backwardation z 0.2 > 2.0
COMEX registered drawdown z 0.2 < -2.0
LBMA vault decline z 0.15 < -1.5
EFP spread z 0.15 > 2.0

Entry when \(\text{stress\_score} \geq 0.7\). Exit when score falls below 0.4.

Expected Properties

  • Max capacity: $15M
  • Alpha half-life: 14 days (fast crisis alpha)
  • Expected Sharpe: 0.6--1.0

References

  • Pirrong (2012) "Commodity Price Dynamics: A Structural Approach"
  • Working (1949) "The Theory of Price of Storage"