Oil & gas trading — chokepoint monitoring and arbitrage signals
How crude and product desks use NTHMAP to track tanker flows, anticipate supply disruptions, and generate arbitrage signals.
Crude oil desks have always relied on satellite tankers and industry gossip to figure out where physical oil is actually moving. NTHMAP replaces both with a live map, a draw tool, and structured API access that plugs into your existing signal stack.
The workflow
A typical morning at a crude desk running on NTHMAP looks like this:
- Open the map, flip on the vessels + chokepoints + events layers.
- Zoom to Hormuz, Malacca, Suez, and the Cape. If any chokepoint is flagged
AlertorCongested, that's the first data point of the day. - Draw a polygon around the Persian Gulf. The draw panel shows the live vessel count, crude tanker count, LNG carrier count, and the total estimated cargo in metric tonnes.
- Run the AI flow analysis — a one-click narrative describing what's moving, where, and what's notable about it today.
- Compare to yesterday. Pro users get a 90-day rolling flow history; deltas in inbound cargo by destination region are the daily arbitrage signal.
What the data answers
"How much crude is headed to Europe right now?"
nthmap flows get --region Europe --commodity "Crude Oil"
{
"region": "Europe",
"commodity": "Crude Oil",
"vessels_inbound": 37,
"est_cargo_mt": 8712000,
"avg_eta_days": 9.2
}
At ~7 barrels per tonne, that's 61 million barrels. Compare to the rolling 14-day average and you have a structural imbalance signal: if inbound is below average and refinery runs are above average, crude stocks will draw and crack spreads should widen.
"Which VLCCs are loaded and still moving slowly near Hormuz?"
nthmap vessels list \
--bbox 54,25,58.5,27.5 \
--types "Crude Tanker" \
--min-load 85 \
--max-speed 8
Slow-moving loaded VLCCs are the most reliable indicator of physical congestion. Combine with the LNG carrier count for the full picture — Hormuz carries ~25% of global seaborne crude and ~30% of LNG.
"Any new conflict events in the Red Sea southern approach?"
nthmap events list --bbox 41,10,50,18 --types conflict
Houthi threat zone alerts propagate here within 15 minutes of GDELT ingestion. Cross-reference with the Gulf of Aden chokepoint status:
nthmap chokepoints list --fields name,status,vessels_count,avg_speed_kt
If average transit speed is 1.5+ knots above normal, vessels are running fast through the zone — a behavioral signal that the crew expects trouble.
Building an arbitrage signal
A simple two-factor signal that crude desks have built on NTHMAP:
- Factor 1 — Inbound imbalance.
(this_week_inbound_to_region / 14d_avg) - 1 - Factor 2 — Chokepoint stress.
1 if any chokepoint ≠ Normal else 0
When both factors are negative/positive simultaneously, that's the trade setup. Normalizing by the current Brent/WTI spread gives you a calibrated signal score.
import nthmap
client = nthmap.Client(api_key="ntm_live_...")
flows = client.flows(region="Europe", commodity="Crude Oil")
chokepoints = client.chokepoints()
inbound = flows["est_cargo_mt"]
baseline = 8_000_000 # rolling 14d avg — compute this yourself
imbalance = (inbound / baseline) - 1
stressed = any(c["status"] != "Normal" for c in chokepoints)
if imbalance < -0.15 and stressed:
print("TIGHTENING SIGNAL — long Brent vs WTI")
The AI flow analysis
The one-click AI summary works surprisingly well for daily briefings. Asked "analyze the Persian Gulf right now, Pro users get back four-sentence summaries like:
The Persian Gulf currently holds 47 vessels, dominated by 22 crude tankers carrying an estimated 6.4 million MT of crude oil (roughly 45 million barrels) — 85% of which is bound for Europe or Asia via Hormuz. LNG carrier traffic is unusually high at 8 vessels, all Qatari-flagged and headed toward Asian hubs, consistent with the recent JKM-Henry Hub widening. No active conflict events in the zone, though the Gulf of Aden remains flagged Alert with vessels transiting at 15.2 knots (vs 13 normal). Watch Brent-Dubai differential: with European inbound down ~12% week-over-week and no spare capacity reroute via the Cape yet, physical Brent should remain firm into month-end.
You can save this prompt and re-run it every morning.
Automation via CLI + cron
A common NTHMAP deployment at a small trading shop:
# crontab: every morning at 6am GMT
0 6 * * * /opt/bin/nthmap-morning-brief > /var/log/nthmap-brief.log
# /opt/bin/nthmap-morning-brief
#!/bin/bash
export NTHMAP_API_KEY=ntm_live_...
{
echo "=== Chokepoints ==="
nthmap chokepoints list --format table
echo -e "\n=== Flows ==="
for region in Europe Asia "North America"; do
nthmap flows get --region "$region" --commodity "Crude Oil" --format json | \
jq -r '"'"$region"': \(.vessels_inbound) vessels, \(.est_cargo_mt | round) MT"'
done
echo -e "\n=== AI analysis ==="
nthmap ai flow --bbox 47,24,57,28 --commodity "Crude Oil"
} | mail -s "NTHMAP morning brief — $(date +%F)" desk@firm.com
At 6:01am, every desk member has a fresh physical-flow briefing in their inbox.
What NTHMAP doesn't replace
Be clear about what this is and isn't:
- Not a terminal replacement. You still need Bloomberg, Reuters, or a dedicated platform for real-time price ticks, news, and execution.
- Not a weather forecast service. NTHMAP surfaces active events, not forecasts. Pair with a weather desk for tropical storm prediction.
- Not a dark fleet tracker. Vessels disabling AIS are invisible to NTHMAP. Enterprise tier adds SAR-based detection (Phase 3).
Getting started
Launch the map, turn on Pro, draw a polygon around your region of interest, and run the AI flow analysis. That's the 30-second version of this entire article.
For deeper integration, start with the API reference and the CLI docs.