LNG SPA Real-Option Valuation
Independent energy-derivatives research · Python Monte Carlo + MIP · August 2026
A long-term LNG contract is a strip of real options, not an annuity. Valuing a 20-year US Gulf Coast FOB LNG SPA — terms taken from a publicly filed SEC exhibit (contract sales price = 1.15 × Henry Hub + fixed liquefaction fee; ~91.25M MMBtu per contract year; an economic right not to lift) — a static NPV misses $597m of extrinsic value, 43% of the contract's full mark. That value only appears when the model prices the right to choose destination and the right to cancel a cargo.
All figures come from my own runnable models. Contract terms are from the public filing; forward curves are illustrative, market-shaped levels — the engine is config-driven, so re-running on a live tape is the intended workflow. That split (public terms, illustrative curves) is standard practice for valuing a publicly filed contract.
Snapshot
What the option is worth
Path NPV distribution
Correlated GBM shocks to HH / TTF / JKM / freight with pathwise optimal lift/cancel. The whole P5–P95 band ($1,051m–$1,789m) sits above the intrinsic mark — optionality is not a tail story.
Same engine, destination flex toggled off
Destination choice adds $731m of full value ($236m intrinsic + $495m extrinsic); the average lift rate rises from 83.4% to 91.1%.
Where the extrinsic comes from
Extrinsic value by flex layer
On today's deep in-the-money curves the cancellation right alone is worth $102m; adding destination flex contributes another $495m.
Extrinsic vs volatility, stylised contract
Stylised at-the-money 11-cargo FOB contract, 40,000 paths, fixed seed. Extrinsic is nearly linear in vol — the flex valuation is a framework, not a single number.
The ordering of the flex layers is moneyness-dependent, not universal. This contract is deep in-the-money on today's shaped curves, so the cancellation right is nearly worthless and destination flex dominates. In the stylised at-the-money case the ranking flips — cancellation becomes the biggest layer. Quoting either number without its cost level attached is how flex value gets mis-sold.
From valuation to scheduling
Greedy beats the optimum — until constraints bind
Per-cargo greedy netback maximisation looks $0.70/MMBtu better but breaches the EU regas-slot limits; the gap is the priced cost of the constraint set (≈$2.5m/yr on this stylised book).
What one more unit of each constraint is worth
The cancellation quota is the binding constraint that matters — $1.46/MMBtu per extra right. Ship-days sat slack at 375 of 700, shadow price zero.
The optimiser's schedule is not the greedy schedule with the worst months lopped off: it flips two summer cargoes from Europe to North-East Asia and spends the three cancellation rights on the worst winter months — the quota goes to the worst months, not the first negative one. Duals give direction; integer-feasible finite differences give the attainable increments — the difference between the two is itself worth understanding before quoting either.
The freight leg — built, then backtested
US Gulf → NE Asia voyage cost, $/MMBtu
Bottom-up from open-source route distances and a published academic cost stack at an $80k/day charter rate; the daily charter rate is the only live input.
Out-of-sample error by calibration method
Vs 383 days of published freight route assessments (Dec 2024 – Jul 2026), trained on the first 191 days. Pooled regression doubles the error out of sample; a quarterly median cuts it by 56–65%.
The negative result is the finding: pooled regression worsens the uncalibrated model by 108–203% out of sample, because freight carries level drift that has nothing to do with charter rates — emissions allowances, canal fees, vessel-benchmark changes — and a pooled slope absorbs it. The published Pacific assessment also implies ~86 round-trip days against the model's theoretical 48.6 — near double the vessel occupation. Calibrating voyage days by quarterly median fixes both, and the calibration flips a live diversion signal from +$0.53 "go" to −$0.28 "no-go". Model error here is sign-level, not decimal-level.
Process
Honest boundaries
- Contract terms are from the publicly filed SEC exhibit; forward curves are illustrative, market-shaped levels, not a live tape. The engine is YAML-config-driven — swapping in live curves and re-running is the intended use.
- The headline run values a 5-year window of the 20-year term (26 cargoes/yr); the engine extends to the full term.
- Cancellation is modelled economically: the legal form is shortfall or suspension; the economic mark is a strip of options on (netback − 1.15 × HH) with the fixed fee as the sunk leg.
- The vol-sensitivity grid and the MIP schedule use a stylised contract and stylised constraint parameters; their numbers are never mixed with the SPA-run numbers above.
- The freight model needs quarterly-median calibration to be decision-grade; long-haul waiting and repositioning days are not modelled.
Stack
Python · NumPy / pandas Monte Carlo engine (correlated GBM, fixed seeds) · PuLP + CBC mixed-integer optimisation · searoute open-source route distances · YAML-configured, fully reproducible runs
Competencies
Real-option valuation (intrinsic / extrinsic) · correlated Monte Carlo & optimal exercise · LP/MIP optimisation and duality · LNG SPA contract mechanics · freight & netback economics · out-of-sample model validation