PricingLab

Gas storage: facility value under an optimised operating policy

PricingLab by Raganel Consulting, powered by MatLogica AADC

What it values

A gas storage facility makes money by buying gas when it is cheap, usually in summer, injecting it underground, and withdrawing and selling it when it is dear, usually in winter. How much it earns depends on how well it is run: every day the operator decides whether to inject, withdraw or wait, within the facility’s limits on volume and daily flow. This model runs the facility for one year with an operating policy that has been optimised for it, over thousands of simulated price paths, and reports the average profit. It returns how that value moves with the forward price of gas for each of the twelve months and with the interest rate. Alongside, it reports the intrinsic value: what the best fixed injection and withdrawal schedule would earn against today’s forward curve, ignoring the fact that prices will move.

Who uses this kind of number

Storage owners and operators, utilities, gas trading houses and banks that hold or lease storage capacity. They use the value to price a storage lease or a capacity auction bid, and the monthly sensitivities to hedge: the sensitivity to the December forward says how much December gas to sell forward to lock in today’s value.

Inputs

NameUnitDefaultMeaning
max_capacityMMBtu1,000,000Working gas capacity
min_capacityMMBtu50,000Cushion gas (minimum inventory)
max_injection_rateMMBtu/day10,000Maximum injection per day
max_withdrawal_rateMMBtu/day15,000Maximum withdrawal per day
injection_costUSD/MMBtu0.10Variable injection cost
withdrawal_costUSD/MMBtu0.05Variable withdrawal cost
start_inventoryMMBtu500,000Inventory at contract start
base_priceUSD/MMBtu3.0Average forward price level
winter_premiumUSD/MMBtu0.6Winter-over-summer forward premium
shiftUSD/MMBtu0.0Parallel shift of the forward curve at valuation (policy kept fixed)
n_evalcount4,096Monte Carlo valuation paths (4,096 at most on the free hosted service)

MMBtu is a million British thermal units, the standard unit of US natural gas. Every input has a supported range; describe_model lists it. Any input you leave out takes its default.

On the free hosted service the facility and the shape of the forward curve are fixed at the defaults; you can change the parallel shift and the number of paths. A new facility or curve shape needs its own operating policy, which is trained on first use: about 75 seconds on two cores. The local install does this for any facility.

Outputs

How the sensitivities are computed

The model simulates 4,096 price paths for a year, day by day, and on each day the policy decides how much to inject or withdraw. All thirteen sensitivities, one for each monthly forward plus rho, come from that same run, in one forward pass and one backward pass over the calculation (adjoint algorithmic differentiation).

The operating policy is held fixed while the sensitivities are taken. Because the policy is already optimised, small changes in how it would trade have no first-order effect on the value, which is the standard result for optimised decisions (the envelope theorem). The sensitivities are therefore first-order and most accurate for price moves close to the curve the policy was trained on.

How they are checked

Every sensitivity can be recomputed by bump-and-revalue: move each monthly forward up and down by 0.05 USD/MMBtu (and the rate by 0.005), re-run on the same policy and the same 4,096 paths, and take the difference. The check_against_bumping tool does this on demand and reports each gap.

Measured on 5 November 2026 at the default inputs, on two cores of an Intel Xeon 8280L:

SensitivityOne passBump-and-revalueGap (relative to the largest sensitivity)
delta_jan239,930239,9300.0000006%
delta_feb211,163211,1630.0000009%
delta_mar2.42.40.000002%
delta_apr22.522.90.00008%
delta_may−17,296−17,3060.002%
delta_jun−213,739−212,3680.29%
delta_jul−298,112−297,8400.06%
delta_aug−295,594−295,6830.02%
delta_sep−107,440−107,8470.09%
delta_oct−2,961−2,8340.03%
delta_nov12,67512,6610.003%
delta_dec474,211473,9340.06%
rho−320,393−320,3970.0009%

All agree within the 2% tolerance the check applies. Gaps are measured against the largest sensitivity because several months sit near points where the policy switches between injecting, waiting and withdrawing; there the bump, not the one-pass result, carries the larger error. The one-pass value with all thirteen sensitivities took 783 ms; bump-and-revalue needs 26 valuations.

What the model includes

It is designed to value a storage contract under a realistic, optimised operating policy and to give the full monthly hedge in the same calculation.

Worked example (default inputs)

Run on 5 November 2026 with every input at its default and 4,096 paths:

OutputResult
Facility valueUSD 680,029 (standard error 4,612)
Intrinsic value on the forward curveUSD 656,421
delta_dec474,211 per USD 1/MMBtu
delta_jan239,930 per USD 1/MMBtu
delta_jul−298,112 per USD 1/MMBtu
delta_aug−295,594 per USD 1/MMBtu
rho−320,393 per 1.00 of rate (about −3,204 per percentage point)

Reading it: the optimised policy earns about USD 23,600 more than the best fixed schedule, because it can react as prices move. The value rises with winter forwards (December, January, February) and falls with summer forwards (June to September), the months in which the facility sells and buys. A 10-cent rise in the December forward adds about USD 47,400; a 10-cent rise in July takes away about USD 29,800. Setting up the calculation took 1,001 ms and the value with all thirteen sensitivities took 1,345 ms.

Three ways to use it

1. From an AI tool, through the hosted MCP endpoint. In any MCP client, add a remote server with this address and no authentication:

https://mypricinglab.com/lab/mcp

Then ask, for example: “Price the gas storage model, then with the forward curve shifted up by 0.25, and compare the December deltas.” The tools are list_models, describe_model, price_model, check_against_bumping and run_model_function. The hosted service is free, needs no login, and runs the default facility.

2. In Excel. Install the PricingLab add-in and open the workbook PricingLab_GasStorage.xlsx. Instructions and downloads: https://mypricinglab.com/excel

3. On your own machine. The local install runs the same tools for any facility and curve shape, with no size caps, and your inputs never leave your machine. It is sent on request (Linux x86-64 today; ask about Mac and Windows): write to info@mypricinglab.com. Once installed:

pricinglab mcp      # MCP server for a local MCP client
pricinglab serve    # local web server for the Excel workbook

Details: https://mypricinglab.com/install

With login

A private hosted service, with your own facilities, forward curves and larger runs, is available. Contact us.

Contact

PricingLab by Raganel Consulting, powered by MatLogica AADC. To run this on your own book, inside your own network, write to info@mypricinglab.com.

This page as Markdown · All models