288 lines
17 KiB
Markdown
288 lines
17 KiB
Markdown
|
|
# China Product Design: Forecasting & Optimization Models for Renewable Power Trading
|
|||
|
|
|
|||
|
|
**Working design document — v0.1 (July 2026)**
|
|||
|
|
**Companion to:** `../pjm/design_models_en.md` (PJM design, Models A–C) and
|
|||
|
|
`market_vendor_dd_en.md` (market & vendor context, esp. §1.4–1.6).
|
|||
|
|
|
|||
|
|
Scope: the China product line. Models A–C are imported by reference with their
|
|||
|
|
Chinese adaptations summarized in §1; Model D — the MLT position optimizer,
|
|||
|
|
which has no PJM equivalent — receives its full first-class specification here,
|
|||
|
|
including the mathematical formulation of the contract-position problem.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 0. Architecture: four models, six decision timescales
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────┐
|
|||
|
|
│ Model B: Production │── daily quantiles ──────────┐
|
|||
|
|
│ (adds MONTHLY-horizon │── monthly distributions ─┐ │
|
|||
|
|
│ distributions for D) │ │ │
|
|||
|
|
└──────────────────────────┘ ▼ ▼
|
|||
|
|
┌──────────────────────┐ regimes ┌──────────────┐ ┌──────────────┐
|
|||
|
|
│ Model A: Spot price │───────────────────────────▶│ Model D: │ │ DA Declaration│
|
|||
|
|
│ level/regime (per │── monthly seg. forecasts ─▶│ MLT Position│ │ Optimizer │
|
|||
|
|
│ province, DA & RT) │ │ Optimizer │ │ (newsvendor + │
|
|||
|
|
└──────────────────────┘ │ (annual/ │ │ covariance + │
|
|||
|
|
┌──────────────────────────┐ │ monthly/ │ │ 两个细则 terms)│
|
|||
|
|
│ Model C: DA–RT deviation │ │ rolling) │ └──────────────┘
|
|||
|
|
│ spread (per province) │─▶└──────────────┘ ▲
|
|||
|
|
└──────────────────────────┘ │ residual spot │
|
|||
|
|
│ exposure Q_open │
|
|||
|
|
└────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Decision timescales: (1) mechanism-price annual auction → (2) annual MLT
|
|||
|
|
window → (3) monthly adjustments → (4) intra-month/multi-day rolling → (5) DA
|
|||
|
|
declaration (报量报价) → (6) RT. Model D owns (1)–(4); the DA optimizer owns
|
|||
|
|
(5)–(6) with Models B/C exactly as in the PJM design.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Models A–C: Chinese adaptations (imported by reference)
|
|||
|
|
|
|||
|
|
| Model | PJM spec | Chinese delta |
|
|||
|
|
|---|---|---|
|
|||
|
|
| A — price level/regime | `../pjm/design_models_en.md` §1 | Per-province spot forecasting (DA & RT); negative-price/floor-hit and cap-hit classifiers; supply-demand regime. **New job: monthly-horizon time-weighted spot forecasts per contract segment (D's key input).** Structural-lite features adapt: provincial supply stack, coal price, inter-provincial flows, mechanism/MLT disclosure data |
|
|||
|
|
| B — production quantiles | §2 | Same two-stage pipeline and calibration discipline. **New requirement: monthly production distributions** (sum of hourly, with intra-month correlation preserved — ensemble/scenario route preferred over pure quantile regression). Dual monetization: 两个细则 assessment avoidance + bidding |
|
|||
|
|
| C — DA–RT spread | §3 | Same regime × conditional-distribution × covariance architecture on the DA-vs-RT deviation settlement. Congestion layer largely replaced by provincial supply-demand and renewable-surplus regimes (zonal pricing); 两个细则 assessment terms enter the optimizer alongside the spread (the "BORD-style" analog — see design doc §4.1 contrast) |
|
|||
|
|
|
|||
|
|
Point-in-time discipline (§5.1 of the PJM doc) applies unchanged, with the
|
|||
|
|
declaration deadline per province replacing the 10:30 AM ET close, and — harder
|
|||
|
|
than PJM — the as-of archive must include **MLT window disclosures** (listed
|
|||
|
|
prices, cleared volumes) which provincial exchanges publish irregularly and
|
|||
|
|
revise.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Model D — MLT Position Optimizer (full specification)
|
|||
|
|
|
|||
|
|
### 2.1 Decision problem
|
|||
|
|
|
|||
|
|
For a plant (or portfolio) in province p, at each contracting window w
|
|||
|
|
(annual, monthly, rolling), choose:
|
|||
|
|
|
|||
|
|
- **x_s** — contract volume to hold in each time segment s (peak/flat/valley
|
|||
|
|
or finer, as the province defines), across each delivery month m;
|
|||
|
|
- **limit prices** for each window's bilateral/listing/auction participation;
|
|||
|
|
- **timing** — which windows to transact in, within mandate constraints;
|
|||
|
|
|
|||
|
|
given: Model B's monthly production distributions, Model A's segment-level
|
|||
|
|
spot forecasts, the current contract book, mechanism-price volume, and the
|
|||
|
|
province's rulebook (coverage mandates, curve granularity, adjustment rights,
|
|||
|
|
position limits).
|
|||
|
|
|
|||
|
|
### 2.2 Objective function: the settlement identity
|
|||
|
|
|
|||
|
|
Per delivery hour t (suppressing the plant index), with contract book giving
|
|||
|
|
hourly contracted volume Q_c(t) = Σ_s x_s·1[t ∈ s] at volume-weighted price
|
|||
|
|
P_c(t), mechanism volume Q_m(t) at mechanism price P_m:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
R(t) = Q_da(t)·P_da(t) + [Q_rt(t) − Q_da(t)]·P_rt(t) (spot layers)
|
|||
|
|
+ [P_c(t) − P_ref(t)]·Q_c(t) (MLT CfD; P_ref usually = P_da)
|
|||
|
|
+ [P_m − P_ref_m(t)]·Q_m(t) (mechanism CfD)
|
|||
|
|
− A(t) (两个细则 assessments)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Model D optimizes the **contract terms** {x_s, P_c} against the distribution
|
|||
|
|
of the spot-dependent quantities; the DA optimizer later optimizes Q_da given
|
|||
|
|
the book. Note the separability: for fixed Q_c, the DA/RT problem is exactly
|
|||
|
|
the PJM newsvendor (plus assessment terms). Model D's problem is the outer
|
|||
|
|
portfolio problem.
|
|||
|
|
|
|||
|
|
Monthly aggregation: let month m have segment hours H_s(m). Define per
|
|||
|
|
segment:
|
|||
|
|
|
|||
|
|
- **W_s** = Σ_{t∈H_s} P_ref(t) / |H_s| — realized time-weighted spot for the
|
|||
|
|
segment ("segment index"), a random variable at contracting time;
|
|||
|
|
- **G_s** = Σ_{t∈H_s} Q_rt(t) — plant production in the segment, random,
|
|||
|
|
correlated with W_s (negatively for solar in midday segments: high fleet
|
|||
|
|
output depresses the index exactly when own output is high).
|
|||
|
|
|
|||
|
|
Then the MLT layer's monthly P&L is Σ_s x_s·(P_c,s − W_s)·|H_s| (per-MWh
|
|||
|
|
convention), and the plant's unhedged market revenue is Σ_s G_s·(segment
|
|||
|
|
average capture price). The contract position's economics reduce to a
|
|||
|
|
**portfolio of segment-level basis positions**: long basis (P_c,s − W_s) in
|
|||
|
|
size x_s.
|
|||
|
|
|
|||
|
|
### 2.3 The core optimization
|
|||
|
|
|
|||
|
|
Risk-adjusted formulation (per month, extendable across months):
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
max_{x} Σ_s x_s·( P_c,s − E[W_s] )·|H_s| (expected basis P&L)
|
|||
|
|
− λ · Risk( Σ_s [ G_s·Ŵ_s + x_s·(P_c,s − W_s)·|H_s| ] )
|
|||
|
|
s.t. L_p ≤ Σ_s x_s·|H_s| / E[Σ_s G_s] ≤ U_p (coverage mandate band)
|
|||
|
|
x_s ≥ 0 segment-wise or as province allows (position/short limits)
|
|||
|
|
x_s ≤ κ_s·(physical basis) (physical-scale rules)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
where Risk(·) is variance or CVaR of total revenue, λ the client's risk
|
|||
|
|
aversion, and Ŵ_s shorthand for the plant's capture price in segment s. Two
|
|||
|
|
classical results emerge in the mean–variance case with a single segment:
|
|||
|
|
|
|||
|
|
**Optimal hedge ratio.** With production G (mean μ_G), segment index W
|
|||
|
|
(variance σ_W²), production-index covariance σ_GW, and contract price P_c:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
x* = [ β·μ_G ] + [ (P_c − E[W]) / (2λ·σ_W²·|H|) ]
|
|||
|
|
minimum- speculative tilt
|
|||
|
|
variance (the basis view)
|
|||
|
|
hedge
|
|||
|
|
where β = −Cov(G·W-revenue, W)/Var(W)·(1/|H|) ≈ μ_G + Cov(G,W)/σ_W²
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Interpretation, and the three China-specific corrections that make this more
|
|||
|
|
than textbook hedging:
|
|||
|
|
|
|||
|
|
1. **The minimum-variance hedge is NOT 100% of expected production.** The
|
|||
|
|
correction term Cov(G,W)/σ_W² is *negative* for solar in midday segments
|
|||
|
|
(own output high ⇔ index low), pushing the pure-hedge position *below*
|
|||
|
|
expected production — the plant is already "short the index" through its
|
|||
|
|
revenue exposure less than naively assumed, because its volumes concentrate
|
|||
|
|
in low-index realizations. This is the contract-market mirror of Model C's
|
|||
|
|
covariance correction, and skipping it systematically over-hedges solar.
|
|||
|
|
2. **The speculative tilt is where Model A's basis forecast enters.** In PJM
|
|||
|
|
we set this term to ~0 (forwards ≈ efficient). In China, per DD report
|
|||
|
|
§1.5, (P_c − E[W]) is persistently non-zero and forecastable — the tilt is
|
|||
|
|
a legitimate, bounded position, capped in practice by the mandate band
|
|||
|
|
[L_p, U_p] and position rules rather than by the optimizer.
|
|||
|
|
3. **Segments the plant cannot produce in are pure basis bets.** For s where
|
|||
|
|
G_s ≈ 0 (solar in evening peak), x_s has no hedging role at all — the
|
|||
|
|
minimum-variance term vanishes and x* is purely the tilt term. Default
|
|||
|
|
posture: x_s ≈ 0 unless the basis view is strong; accepting such segments
|
|||
|
|
to "complete the curve" in a negotiation should be priced explicitly as a
|
|||
|
|
short-index position with the full W_s tail risk (evening spike exposure).
|
|||
|
|
|
|||
|
|
**Multi-month, multi-window extension.** Stack months into a book; at each
|
|||
|
|
window w, re-solve with (a) updated E[W_s], distributions from Models A/B,
|
|||
|
|
(b) the existing book as the starting position, (c) transaction costs and
|
|||
|
|
liquidity limits per window. The rolling problem is then a standard
|
|||
|
|
stochastic-programming / model-predictive-control loop: solve, transact the
|
|||
|
|
first stage, roll forward. Window timing (which window to transact in) is
|
|||
|
|
handled by comparing the current window's achievable price against the
|
|||
|
|
model's forecast of later windows' prices minus a liquidity/execution
|
|||
|
|
discount — the calendar-flow patterns of DD report §1.5 (annual-window
|
|||
|
|
pressure, month-end effects) enter as features of that forecast.
|
|||
|
|
|
|||
|
|
### 2.4 Stage structure
|
|||
|
|
|
|||
|
|
- **D1 — Segment basis forecaster.** Target: E[W_s] and quantiles per
|
|||
|
|
province, delivery month, segment, at each window horizon (12m to D-2).
|
|||
|
|
Features: Model A regime forecasts; provincial supply stack evolution
|
|||
|
|
(capacity additions/retirements pipeline); coal price and band policy;
|
|||
|
|
fleet renewable growth vs. demand growth; disclosed MLT window prices and
|
|||
|
|
cleared volumes (the "forward curve" such as it is); calendar/window
|
|||
|
|
dummies; policy-event flags. Baseline to beat: "W_s = current MLT price
|
|||
|
|
level" (market-is-right) and "W_s = last year's realized" (naive).
|
|||
|
|
- **D2 — Shape-risk quantifier.** Joint distribution of (G_s, W_s) per
|
|||
|
|
segment: correlation estimation within regimes, scenario generation from
|
|||
|
|
Model B ensembles pushed through Model A price scenarios. Output: the
|
|||
|
|
covariance inputs and revenue distribution for any candidate book.
|
|||
|
|
- **D3 — Portfolio optimizer.** The §2.3 program, with province rulebook
|
|||
|
|
encoded (mandate bands, segment definitions, adjustment rights, position
|
|||
|
|
limits). Output: target book per month/segment, trade list per window,
|
|||
|
|
limit prices.
|
|||
|
|
- **D4 — Window timing & negotiation support.** Fair-value marks per segment
|
|||
|
|
(from D1), walk-away prices, counterparty-offer evaluation ("this curve at
|
|||
|
|
this price = implied basis of X vs. our forecast of Y"), and
|
|||
|
|
calendar-pressure timing signals.
|
|||
|
|
- **D5 — Mechanism auction bidder.** The annual 机制电价 auction: bid low
|
|||
|
|
enough to clear, high enough to beat the market alternative. Decision rule:
|
|||
|
|
bid ≈ certainty-equivalent of the market revenue distribution (from
|
|||
|
|
D1–D3's unhedged + optimally-hedged forecast) plus a margin for the
|
|||
|
|
option value of mechanism coverage; clearing-price forecasting from prior
|
|||
|
|
rounds, provincial caps, and competitor cost curves.
|
|||
|
|
|
|||
|
|
### 2.5 Evaluation protocol
|
|||
|
|
|
|||
|
|
- **D1:** pinball loss per segment/horizon vs. the two baselines above;
|
|||
|
|
calibration checks concentrated on the downside tail (the basis moves that
|
|||
|
|
hurt sellers).
|
|||
|
|
- **D2/D3 economic backtest:** simulate the full rolling loop against
|
|||
|
|
realized spot, comparing (i) mandate-minimum flat-curve naive strategy,
|
|||
|
|
(ii) 100%-of-expected-production proportional hedge, (iii) the optimizer.
|
|||
|
|
Metric: risk-adjusted ¥/MWh uplift and drawdown in the worst realized
|
|||
|
|
month — clients in this market are loss-averse; the sales metric is as much
|
|||
|
|
"avoided 2021-style blowups" as average uplift.
|
|||
|
|
- **Regime-sliced:** separately score buyer's-market vs. tight-market
|
|||
|
|
periods; a model tuned on 2024–26 buyer's-market data will misprice the
|
|||
|
|
next tight cycle (encode the 2021–23 episode explicitly, however painful
|
|||
|
|
the data work).
|
|||
|
|
- **Point-in-time:** window-by-window information sets; disclosed MLT data
|
|||
|
|
as-of each window, not as-revised.
|
|||
|
|
|
|||
|
|
### 2.6 Interactions and portfolio risk
|
|||
|
|
|
|||
|
|
- **B → D spec change:** Model B must ship monthly distributions with
|
|||
|
|
intra-month correlation (scenario/ensemble form), not just daily quantiles.
|
|||
|
|
- **D → DA optimizer:** the book {Q_c(t), P_c(t)} is an input to the daily
|
|||
|
|
declaration problem; conversely, realized DA/RT settlement feeds D's
|
|||
|
|
next-window re-solve.
|
|||
|
|
- **Cross-client correlation (existential, as in Model C):** clients'
|
|||
|
|
optimal tilts point the same direction (all renewable sellers, same
|
|||
|
|
provincial basis view). Aggregate tilt exposure per province — total MWh
|
|||
|
|
positioned away from minimum-variance across the client book — is a
|
|||
|
|
first-class risk metric with stress tests against a policy-reset scenario
|
|||
|
|
(band adjustment repricing the curve overnight).
|
|||
|
|
- **Compliance:** negotiation-support outputs (fair values, walk-away
|
|||
|
|
prices) are advisory and safe; anything resembling coordinated positioning
|
|||
|
|
across clients in one province needs counsel review (the algorithmic-
|
|||
|
|
collusion concern flagged in the DD report §4.5 applies to contract
|
|||
|
|
markets too).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Data requirements (Model D specific)
|
|||
|
|
|
|||
|
|
Per priority province: MLT window results (listed/cleared prices and volumes
|
|||
|
|
by segment — exchange disclosures, member portals), segment definitions and
|
|||
|
|
their revision history, coverage-mandate notices, coal benchmark and band
|
|||
|
|
notices, mechanism auction rules and past results, capacity/demand pipeline
|
|||
|
|
(provincial energy bureau plans, project commissioning data), and — hardest —
|
|||
|
|
a point-in-time archive of all of the above. The DD report's follow-up #4
|
|||
|
|
(data-supply mapping) is a prerequisite for D1.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Build order
|
|||
|
|
|
|||
|
|
| Phase | Deliverable | Depends on |
|
|||
|
|
|---|---|---|
|
|||
|
|
| D-1 | Province rulebook encoding (windows, segments, mandates, limits) for 2–3 priority provinces | DD follow-up #7 |
|
|||
|
|
| D-2 | Segment basis atlas: historical W_s vs. contemporaneous MLT price levels, by province/month/segment — the empirical proof that the basis is persistent and directional | Data mapping |
|
|||
|
|
| D-3 | D1 forecaster v1 (regression/GBM on the atlas features) + evaluation harness | D-2 |
|
|||
|
|
| D-4 | D2 shape-risk quantifier using Model B monthly scenarios | Model B upgrade |
|
|||
|
|
| D-5 | D3 optimizer + D4 negotiation-support pack (the sellable wedge: annual-window advisory) | D-3, D-4 |
|
|||
|
|
| D-6 | D5 mechanism auction bidder (seasonal product, aligned to provincial auction calendars) | D-3 |
|
|||
|
|
| D-7 | Rolling MPC loop + portfolio-tilt risk dashboard | D-5 |
|
|||
|
|
|
|||
|
|
Note the commercial sequencing: D-2 (the atlas) is sellable as analytics
|
|||
|
|
almost immediately — the same "empirical atlas first" pattern as the PJM
|
|||
|
|
spread atlas — and D-5's annual-window advisory addresses the board-level
|
|||
|
|
pain identified in the DD report before any real-time infrastructure exists.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Open questions
|
|||
|
|
|
|||
|
|
1. Segment granularity arbitrage: how finely do priority provinces define
|
|||
|
|
segments, and where does hourly spot shape systematically escape the
|
|||
|
|
segment definitions? (Determines D1's resolution.)
|
|||
|
|
2. Adjustment-right valuation: monthly/rolling windows give the book option
|
|||
|
|
value — should D3 price contracts with embedded flexibility as swaptions
|
|||
|
|
(option-adjusted basis) rather than forwards? Likely yes at maturity;
|
|||
|
|
defer to v2.
|
|||
|
|
3. Green-power channel: when does bundling GECs (绿电交易) dominate plain MLT
|
|||
|
|
for a given client, and does D3 need a green/plain allocation dimension?
|
|||
|
|
4. Retail-side mirror: the same machinery values contracts for 售电公司
|
|||
|
|
buyers — is the buy-side a second market for Model D (and a hedge against
|
|||
|
|
the seller-side cyclical position)?
|
|||
|
|
5. Inter-provincial layer: as province-to-province spot and MLT expand, does
|
|||
|
|
D need a cross-provincial arbitrage/allocation module for clients with
|
|||
|
|
multi-province portfolios?
|
|||
|
|
6. The 2021–23 dataset problem: how to encode the tight-cycle episode
|
|||
|
|
(different band, different rules, renegotiations) without contaminating
|
|||
|
|
the buyer's-market model — regime dummies vs. separate models.
|