NATGAS-PERP Listing

List the Henry Hub Natural Gas perpetual future — a near-clone of WTIOIL-PERP (same category, calendar, and roll shape), benchmarked to NYMEX NG daily settlement, funding daily ~2:30pm ET.

Spec: Ben Xie, #ax-devs-only thread 2026-06-08 Benchmark: NYMEX Henry Hub NG futures daily settlement Margin: 30% IM / 15% MM (same as UNG) Runbook: afintech.dev/runbooks/listing-a-new-product Status snapshot: 2026-06-10

§0Principles

WTIOIL-PERP is the template — every deviation is a risk to justify

Same energy category, same CME holiday calendar, same 2:30pm ET settlement window, same 5-day monthly roll shape (roll_start_bd and roll_weights match WTIOIL). The listing should be mostly configuration; anything that turns out to not be configuration is a finding worth surfacing early.

No trading before the initial settlement price is set

The initial mark falls back to the last settlement price. Opening the instrument before ep3 update-settlement-price has run means day-one margining and liquidation math is garbage. The runbook makes this a hard gate; this plan inherits it.

Routing key is chosen at listing — cheap now, a migration later

The migrator half of A-3454 (delist → re-create → position-transfer) doesn't exist yet, so a bad partition choice at creation can only be fixed with manual surgery. Don't default to the category-wide ENERGY routing key; place the instrument with the planner.

§1Progress / Tracker

Live snapshot — phase status and the bar below are computed from GitHub PR state at build time (2026-06-10). 0/8 phases done · 0%.

Done — 0 In progress — 2 Not started — 6
1Spec sign-offin progress

Ben's thread covers symbol, benchmark, mark price (avg on AX at 2:30pm ET), contract size, tick (0.001), funding frequency, margin, and roll schedule. Open gaps to close with Ben before code: funding rate caps, minimum trade quantity, and an explicit confirm that contract size is 1 MMBtu (CME NG is 10,000 MMBtu — 1 MMBtu matches our micro-style convention à la WTIOIL's 1 bbl, but it should be said out loud).

2Code — instrument ID + spec YAMLnot started

Reserve the (id, symbol) pair in ax_sdk_internal::constants::INSTRUMENT_IDS and write the instruments.yml entry (ax + ep3 sections) with cme_future_config (root: NG, WTIOIL's roll_start_bd/roll_weights) and pyth_config if an NG estimated-price feed exists. Ship in a deployable version.

3Routing key — revive the rebalance plannerin progress

Revive Michael Rees's routing-key planner so the new instrument lands on a low-load partition instead of the concentrated ENERGY key. The planner half is enough for a new listing (assignment at creation); the migrator follow-up is not on this plan's critical path.

  • #2085 admin-cli instruments plan-routing-keys — load-aware partition assignment (A-3454)
4Settlement source + roll schedulenot started

Confirm the Databento CME settlement downloader covers NG (same path as WTIOIL's CL), then generate and insert the cme_future_roll_schedule rows (settlement-engine cme-future generate-roll-schedule) well past the listing horizon. Verify ax.benchmark_prices rows flow for the blended NG benchmark before listing day.

5Estimated funding pricenot started

Confirm a live estimated/index price source for NG (Pyth feed in pyth_config, matching how WTIOIL does it) and verify the settlement engine publishes estimated-funding-rate:NATGAS-PERP to Redis once the instrument exists.

6Demo listing + initial settlement price + verificationnot started

Run the full listing runbook on demo: instruments sync (preview, then --actually), set the initial settlement price from ax.benchmark_prices, then verify mark sanity, a test order through margining, estimated funding publishing, and the first scheduled funding run end-to-end.

7Business readinessnot started

Runs in parallel with engineering, gates prod. Identify which MMs and customers will quote/trade NG at launch and confirm connectivity and risk limits; produce launch marketing (Hyperframes video per current practice); add the contract spec to public docs and the changelog.

awaiting sign-off ≥1 MM confirmed quoting NATGAS-PERP at launch
awaiting sign-off launch announcement + public contract specs ready
8Prod listing + first funding cyclenot started

Repeat the listing on prod at the announced time, open the instrument, and watch the first complete funding cycle. Sign-off requires the funding transactions to reconcile against the published rate.

awaiting sign-off NATGAS-PERP open on prod; first funding cycle verified sane

Notebook

Reference design — the detailed mechanics behind the tracker.

§3Design Questions

  1. Contract size — really 1 MMBtu (micro-style), not CME's 10,000 MMBtu?
    • Not yet answered Ben's spec says 1 MMBtu per contract, which matches the WTIOIL 1-bbl micro convention, but it's a 10,000x difference if misread. Needs an explicit confirm in the spec thread.
  2. Funding rate caps — what are the upper/lower pct?
    • Not yet answered Not in Ben's thread. WTIOIL's caps are the obvious default; confirm before the spec YAML is written.
  3. Which MMs are committed to quoting at launch?
    • Not yet answered No demand thread found yet. A product that lists with an empty book is worse than one that lists a week later — this gates the prod date.
  4. Listing date — when do we want NATGAS-PERP live?
    • Not yet answered Not yet set by the business. Engineering critical path is short (config-mostly); the date should be driven by MM readiness and marketing.