Energy trading

LNG trading — carrier fleet, JKM spread, and cargo rerouting

How LNG desks use NTHMAP to track the global carrier fleet, predict cargo rerouting, and arbitrage the JKM-Henry Hub spread.

LNG is the most optionable commodity in the world — a single cargo can be rerouted mid-voyage if the economics change. NTHMAP is purpose-built for watching that optionality play out in real time.

Why LNG is different

A crude cargo is nearly always pre-sold and headed to a fixed refinery. An LNG cargo from a merchant seller (Qatar, Trinidad, US Gulf Coast) is often flexible — the seller can divert based on which basin offers the better netback. When the JKM-Henry Hub spread widens by $2/MMBtu, you can see the fleet physically rotate toward Asia within 48 hours.

NTHMAP lets you watch this rotation live.

The core workflow

1. Monitor the carrier fleet globally

nthmap vessels list --types "LNG Carrier" --format json | \
  jq '[.[] | {name, lat, lng, destination, load_pct, speed_knots}]'

There are roughly 700 LNG carriers worldwide. NTHMAP tracks ~99% of them. A quick global count by region tells you where the fleet is concentrated:

  • Atlantic basin (US Gulf, Trinidad, West Africa) — Henry Hub sourcing
  • Middle East (Qatar, UAE) — RasGas / Adgas / Qatargas cargos
  • Pacific basin (Australia, Malaysia, Indonesia, PNG) — Asian supply

2. Track load percentage

LNG carriers loaded to 95-100% are en route to a buyer. Loaded to 30-50% are returning empty after discharge (they're never fully empty; boil-off gas keeps tanks chilled). This lets you cleanly separate outbound from return traffic.

# Loaded outbound (≥80%)
nthmap vessels list --types "LNG Carrier" --min-load 80 --format json | \
  jq length

# Empty return (≤50%)
nthmap vessels list --types "LNG Carrier" --max-load 50 --format json | \
  jq length

3. Flow analysis by destination

nthmap flows get --region Asia --commodity LNG
nthmap flows get --region Europe --commodity LNG

Asia vs Europe inbound LNG gives you a real-time read on the JKM-TTF spread's physical response.

Arbitrage: JKM vs Henry Hub

The classic LNG arb: buy US LNG at Henry Hub + 15%, ship to Asia, sell at JKM. Economics work when the JKM-HH spread exceeds the liquefaction + shipping cost (roughly $5-6/MMBtu).

# Current prices
nthmap prices list --format json | jq '[.[] | {commodity, price, unit}]'

From the NTHMAP ticker:

  • Henry Hub: $2.87/MMBtu
  • JKM Asia: $9.40/MMBtu
  • Spread: $6.53/MMBtu — well into arb territory

Now check the physical response — how many US Gulf Coast LNG carriers are heading east?

nthmap vessels list \
  --bbox -100,25,-80,32 \
  --types "LNG Carrier" \
  --min-load 85

Any Sabine Pass or Corpus Christi outbound vessel with a high load percentage and a heading between 90 and 180 degrees is physically confirming the arb.

Mid-voyage diversion signals

This is where NTHMAP earns its keep. A mid-voyage diversion is when an LNG carrier changes destination after leaving port because the spread has moved. You can often spot this before the market does:

# US Gulf LNG carriers, loaded, at sea, not heading straight to Europe
nthmap vessels list \
  --bbox -80,20,30,55 \
  --types "LNG Carrier" \
  --min-load 85 \
  --min-speed 8

Filter the result by destination and look for ships that had a European destination (NLRTM, GBPRT, BEZEE) but whose current heading implies south-then-east around the Cape. That's a mid-voyage Asian diversion in progress.

Sabine Pass terminal utilization

NTHMAP tracks all major LNG export terminals as infrastructure. Click Sabine Pass LNG on the map to see operator, capacity (30 MTPA), status, and the cluster of carriers waiting nearby.

nthmap infra get --name "Sabine Pass LNG"

Combined with nearby vessel count, you get a live utilization read:

  • Many carriers clustered near the terminal → loading in progress or queue
  • Sparse cluster → between-cargo idle time

Run this as a cron job and you'll notice utilization patterns before the monthly Kpler report comes out.

AI flow narrative

The AI flow analysis is particularly good at LNG because the routing logic is so clean:

nthmap ai flow --bbox -100,-60,180,60 --commodity LNG

You get a paragraph like:

The global LNG carrier fleet currently has 287 vessels underway with meaningful loads, 62% of which are heading toward Asian destinations (Japan, South Korea, Taiwan, China). This is a 8% week-over-week increase in Asia-bound share, consistent with the current $6.50/MMBtu JKM-HH spread. Notable: 9 US Gulf Coast cargoes have filed European destinations but are currently sailing south toward the Cape, suggesting mid-voyage diversion to Asia in progress. Watch for Rotterdam LNG inventory draw to accelerate if this pattern continues into next week.

Integration example: daily LNG dashboard

import nthmap
import slack_sdk

client = nthmap.Client(api_key="ntm_live_...")

# Get prices
prices = {p["symbol"]: p for p in client.prices()}
jkm = prices["NGUSD_JKM"]["price"]
hh = prices["NGUSD"]["price"]
spread = jkm - hh

# Count loaded carriers by destination region
asia_loaded = len(client.vessels(
    bbox=[60, -10, 150, 45],
    types=["LNG Carrier"],
    min_load=80
))
europe_loaded = len(client.vessels(
    bbox=[-15, 35, 35, 65],
    types=["LNG Carrier"],
    min_load=80
))

msg = f"""LNG daily — {datetime.now():%Y-%m-%d}
JKM ${jkm:.2f}  HH ${hh:.2f}  spread ${spread:.2f}
Asia loaded: {asia_loaded} vessels
Europe loaded: {europe_loaded} vessels
Ratio A/E: {asia_loaded/europe_loaded:.2f}"""

slack.chat_postMessage(channel="#lng-desk", text=msg)

Gotchas

  • Tri-fuel vs diesel carriers aren't distinguished in the NTHMAP type taxonomy. Use imo to look up registry data separately if you care.
  • Reload/ship-to-ship transfers in the middle of ocean (mostly Russian origin) create anomalous load changes. We flag these heuristically but not perfectly.
  • Spot vs term cargoes — NTHMAP only shows the physical movement, not the commercial terms. Cross-reference with your broker feed for who's lifted from whom.

Get started

Launch the app, turn on Pro, filter vessels to LNG Carrier, and watch the ticker's JKM vs NG prices move in real time. The CLI docs have more automation recipes.