commodity-analysis

$npx mdskill add HKUDS/Vibe-Trading/commodity-analysis

Analyzes commodities like oil, gold, and copper to generate directional signals for backtesting.

  • Helps with forecasting commodity prices and market trends for investment decisions.
  • Integrates with data from OPEC, EIA, Baker Hughes, IEA, and customs reports.
  • Decides based on supply-demand balance, pricing models, inventory cycles, and futures structures.
  • Presents results as directional signals suitable for backtesting and analysis.
SKILL.md
.github/skills/commodity-analysisView on GitHub ↗
---
name: commodity-analysis
description: Commodity analysis (oil supply-demand balance / gold pricing / copper as an economic predictor / inventory cycles / futures premium-discount structure / seasonality), generating directional commodity signals.
category: analysis
---
# Commodity Analysis

## Overview

Analyze commodities from four dimensions — supply-demand balance, pricing model, inventory cycle, and futures structure — and output directional signals suitable for backtesting. Focuses on crude oil (global pricing anchor), gold (safe haven + inflation hedge), and copper (economic barometer).

## Core Concepts

### 1. Crude Oil Supply-Demand Balance

**Key supply-side variables:**

| Variable | Data Source | Frequency | Direction of Impact |
|------|--------|------|---------|
| OPEC production | OPEC monthly report | Monthly | Production cuts → oil price ↑ |
| US shale output | EIA weekly report | Weekly | Higher output → oil price ↓ |
| Rig count (Baker Hughes) | Baker Hughes | Weekly | Leads production by 3-6 months |
| Strategic Petroleum Reserve (SPR) | EIA | Weekly | SPR release → short-term oil price ↓ |

**Key demand-side variables:**
- IEA global oil demand forecast (quarterly)
- China crude imports (customs monthly data)
- US gasoline demand (EIA weekly report, implied demand)
- Global PMI (leads demand by 1-2 months)

**Supply-demand balance signals:**

```python
# Simplified supply-demand judgment
if opec_compliance > 90% and us_rig_count_declining:
    supply_signal = "tight"  # bullish for oil
elif opec_compliance < 80% and us_production_rising:
    supply_signal = "loose"  # bearish for oil

if global_pmi > 50 and china_import_yoy > 5%:
    demand_signal = "strong"  # bullish for oil
elif global_pmi < 48 and china_import_yoy < 0:
    demand_signal = "weak"    # bearish for oil
```

### 2. Gold Pricing Framework

**Four-factor model:**

| Factor | Weight | Logic | Indicator |
|------|------|------|------|
| Real rates | 40% | Real rates ↓ → lower opportunity cost of holding gold → gold ↑ | 10Y TIPS yield |
| US dollar index | 25% | USD ↓ → gold becomes cheaper in pricing terms → gold ↑ | DXY |
| Safe-haven demand | 20% | Risk ↑ → safe-haven buying → gold ↑ | VIX + geopolitical risk index |
| Central-bank buying | 15% | Central-bank purchases → structural demand support | WGC quarterly report |

**Practical rules:**
- 10Y TIPS < 0%: strong support for gold (negative real rates mean negative holding cost)
- 10Y TIPS > 2%: pressure on gold (positive real rates reduce attractiveness)
- Correlation between DXY and gold is around -0.6, but not absolute (they both rose in 2022 due to safe-haven demand)
- Central-bank purchases >1000 tons / year (2022-2023 level): long-term structural bullish support

### 3. Dr. Copper as an Economic Predictor

**Copper as a leading indicator:**
- YoY copper-price change leads industrial production by about 2-3 months
- Copper / gold ratio is highly positively correlated with the US 10Y Treasury yield (`r > 0.7`)
- Copper breakout above the prior high confirms economic recovery

**Copper fundamental tracking:**

| Indicator | Data Source | Threshold |
|------|--------|------|
| LME copper inventory | LME daily report | <150k tons = tight |
| SHFE copper inventory | SHFE weekly report | WoW decline >10% = tight |
| Copper concentrate TC/RC | SMM | TC < $30/ton = tight mining supply |
| China copper imports | Customs monthly report | YoY growth >10% = strong demand |

### 4. Inventory Cycle Analysis

**Visible inventory vs hidden inventory:**
- Visible inventory: published by exchanges (LME / SHFE / COMEX), transparent and trackable
- Hidden inventory: bonded areas / trader warehouses, opaque but potentially larger
- The true turning point in prices is the turning point in total inventory

**Four inventory-cycle stages (using copper as example):**

```
Active restocking (price↑ volume↑) -> Passive restocking (price↓ volume↑) -> Active destocking (price↓ volume↓) -> Passive destocking (price↑ volume↓)
      mid bull market                 late bull market                 mid bear market                 late bear / early bull market
```

**Signal mapping:**

| Stage | Inventory Direction | Price Direction | Trading Signal |
|------|---------|---------|---------|
| Passive destocking | ↓ | ↑ | Long (best buying point) |
| Active restocking | ↑ | ↑ | Keep long positions |
| Passive restocking | ↑ | ↓ | Close longs (warning) |
| Active destocking | ↓ | ↓ | Short or stay neutral |

### 5. Futures Premium / Discount Structure

**Contango (futures > spot, normal market):**
- Supply is abundant, and the market prices in carrying costs (storage + funding)
- Roll yield is negative (`roll yield < 0`), unfavorable for long holders
- Deep contango (`far month - near month > 5%`) = severe oversupply

**Backwardation (futures < spot, inverted market):**
- Supply is tight, and spot premium reflects strong immediate demand
- Roll yield is positive (`roll yield > 0`), favorable for long holders
- Deep backwardation (`near month - far month > 3%`) = squeeze or extreme shortage

**Term-structure signal:**

```python
# Spread ratio = (front month - second month) / front month
spread_ratio = (front_month - second_month) / front_month

if spread_ratio > 0.02:    # backwardation > 2%
    signal = "strongly bullish"  # spot shortage
elif spread_ratio < -0.03: # contango > 3%
    signal = "bearish"           # oversupply
else:
    signal = "neutral"
```

### 6. Seasonality

**Oil seasonality:**
- March-May: refinery maintenance ends + summer inventory build → seasonal rise (ahead of the "driving season")
- September-October: hurricane season (Gulf of Mexico) → supply disruption → higher volatility
- November-December: heating-oil demand → stronger diesel crack spread

**Gold seasonality:**
- January-February: Lunar New Year + Indian wedding-season physical demand → relatively strong
- July-August: traditional soft season → relatively weak
- October-November: Diwali + Christmas restocking → relatively strong

**Copper seasonality:**
- March-April: China construction season starts → demand recovery
- June-July: off-season inventory buildup → pressure
- September-October: "Golden September, Silver October" → demand recovery

## Analysis Framework

### Five-Step Commodity Analysis

1. **Supply-demand sets direction**: is the balance in surplus or shortage? Which way are marginal variables moving?
2. **Inventory sets rhythm**: which inventory-cycle stage are we in? Is a turning point close?
3. **Term structure confirms**: contango or backwardation? Does it confirm the supply-demand judgment?
4. **Seasonality overlay**: is seasonality currently a tailwind or a headwind?
5. **Macro validation**: do the dollar / rates / risk appetite support the directional judgment?

### Composite Scoring Template

```python
commodity_score = {
    "supply_demand": +1,    # supply-demand is tight
    "inventory_cycle": +2,  # passive destocking (best stage)
    "term_structure": +1,   # mild backwardation
    "seasonality": 0,       # neutral seasonality
    "macro_env": -1,        # stronger dollar is a headwind
}
# Total score = +3/5 = +0.6 -> bullish bias, but not a strong signal
```

## Output Format

```
## Commodity Analysis Report — [Commodity Name]

### Supply-Demand Structure
- Supply side: [surplus / balanced / shortage] — [specific data]
- Demand side: [strong / stable / weak] — [specific data]
- Balance table: [inventory build X tons / drawdown X tons]

### Inventory Cycle
- Current stage: [active restocking / passive restocking / active destocking / passive destocking]
- Visible inventory: [LME X tons, SHFE X tons, WoW change]

### Term Structure
- Front-back spread: [contango X% / backwardation X%]
- Roll yield: [positive / negative]

### Composite Score
| Dimension | Score(-2~+2) | Basis |
|------|------------|------|
| Supply-demand | +1 | OPEC compliance rate 92% |
| Inventory | +2 | LME inventory hit 18-month low |

### Trading Direction
- Direction: [bullish / bearish / neutral]
- Confidence: [high / medium / low]
- Risk points: [specific risks]
```

## Notes

- Commodity data sources are fragmented (EIA / OPEC / LME / SHFE, etc.). This skill provides the analytical framework; data should be retrieved through `web-reader` or entered manually
- Futures prices include roll costs, so direct comparison across different contracts must account for expiry-roll effects
- Seasonal patterns are statistical averages and may be completely overwhelmed by fundamentals in a given year
- Gold has both commodity and financial attributes, and the financial side (rates / dollar) usually dominates short-term pricing
- Copper’s financial characteristics have strengthened since 2020 (copper futures are used as a macro hedge), so pure fundamental analysis may be insufficient
- Inventory data is lagged (hidden inventories cannot be tracked in real time), so cross-check with price and basis behavior
- This framework is for research backtesting only and does not constitute investment advice
More from HKUDS/Vibe-Trading