power-market-trading-docs/china/product_design_en.md

336 lines
20 KiB
Markdown
Raw Normal View History

# 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 AC) and
`market_vendor_dd_en.md` (market & vendor context, esp. §1.41.6).
Scope: the China product line. Models AC 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: DART 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 AC: 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 — DART 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 meanvariance 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
D1D3'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 202426 buyer's-market data will misprice the
next tight cycle (encode the 202123 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).
### 2.7 Separability of contract P&L and spread P&L: what transfers from PJM, and four deltas
The PJM design doc's §4.2 establishes the three-layer statement — hedge and
spread books are **separable in accounting and first-order decisions,
correlated in risk, coupled in risk-adjusted decisions**. It transfers to
China intact, because the MLT layer is likewise a CfD settling against a
reference price the plant's bid doesn't move — the very structure that lets
Model D wrap the unchanged inner newsvendor (§2.2's separability note).
Four features of the Chinese market sharpen its limits:
1. **Tighter correlation — same settlement price.** A PJM hub hedge and a
nodal spread book are linked through related-but-distinct prices with a
basis buffer between them. A Chinese MLT CfD typically settles against
the *same provincial DA price* the declaration clears against: hedge-leg
and spread-leg P&L are driven by literally the same random variable.
2. **Bidirectional decision coupling — both books are alive.** In PJM the
hedge predates operations and is revisited ~never, so Layer-3 coupling is
a static parameter of the bid optimizer. In China the same team adjusts
the contract book monthly/intra-month while declaring daily: the current
book conditions the optimal lean, *and* demonstrated spread-model
performance (¥/MWh earned on open exposure) rationally feeds back into
how much open exposure Model D should leave.
3. **Mandates truncate the co-optimization.** The coverage band [L_p, U_p]
frequently makes the joint optimum a corner solution: hold the mandated
minimum, and let the interesting optimization live in curve *shape* and
window *timing* rather than total hedge quantity. Separability survives;
the interior second-order optimum often doesn't.
4. **The "you don't move the index" assumption degrades at portfolio
scale.** In PJM it is airtight (one plant vs. Western Hub). In a
provincial market, a large renewable book optimized in a correlated way
can move the provincial clearing price its own CfDs settle against —
especially in midday hours where renewables are marginal. For a service
provider this is simultaneously a modeling correction (price-impact term
at portfolio scale) and a **compliance red line**: bidding patterns that
systematically depress the index the fleet's CfDs benefit from are the
market-manipulation scenario regulators are actively watching (the
Jiangsu AI episode, mirrored). Cross-reference the §2.6 compliance
bullet; this deserves standing review, not a one-time check.
One caveat transfers with a twist: PJM's "contract form matters" warning
(unit-contingent PPAs) maps in China to the **两个细则 assessment layer**
a third P&L stream outside the price identity that couples to the
*declaration* (penalizing forecast error against declared schedule), pulling
Q_da toward the best forecast even when the spread view says lean. PJM's
BORD plays the same role but is priced and modest; provincial assessment
formulas are rule-based and, for smaller plants, occasionally sharp enough
to dominate the spread signal.
---
## 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 23 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 202123 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.