Home/ Work/ MarketSignal

Geopolitical signals move before markets do.

A multi-layer intelligence system that detects escalation and ceasefire signals in the Middle East by monitoring aviation, airspace restrictions, route suspensions, and diplomatic movement — before prediction markets price them in.

Category Signal Intelligence
Status Live — collecting data
Timeline 1 week (ongoing)
Stack Python · SQLite · Streamlit
The problem

Prediction markets lag physical reality

Platforms like Polymarket price geopolitical outcomes based on the news cycle — analyst commentary, breaking alerts, official statements. But physical signals precede the narrative by hours to weeks. Airlines quietly suspend routes before governments announce airspace closures. Military cargo aircraft surge into a region before operations begin. Diplomatic bizjets cluster at the same airport before talks nobody's reported yet.

The information is public. ADS-B transponder data, NOTAMs, vessel tracking — it's all sitting there. Nobody's converging these independent layers into a single escalation score and comparing it to where prediction markets are pricing the same outcome.

Core thesis: convergence of independent signal layers — aviation, maritime, diplomatic — precedes the news cycle by hours to weeks. The gap between physical reality and market pricing is the edge.

The architecture

Five signal layers, one convergence score

Independent collectors feed into a convergence engine that produces a normalized escalation probability. Each layer watches for different indicators on its own polling interval. The thesis doesn't depend on any single layer being right — it depends on independent signals agreeing.

System Architecture
Data Sources
OpenSky Network
GDELT / BigQuery
Cirium Sky API
Cirium Flex API
MarineTraffic
Collectors
ADS-B Monitor
Strategic Tracker
NOTAM Monitor
Route Suspension
GDELT Collector
AIS Maritime
Storage
adsb_events.db
notam_events.db
route_events.db
gdelt_events.db
convergence.db
Engine
Convergence Engine
Output
Streamlit Dashboard
Polymarket Comparison
MarketSignal ADS-B Airspace Monitor showing live aircraft counts across Middle East regions
ADS-B Airspace Monitor — live aircraft counts by region with trend filtering. Lebanon/Syria and Yemen show 0: transponders off in active conflict zones.
Signal layers

What the system watches

Each layer monitors a different class of physical indicator. The power isn't in any single layer — it's in what happens when they converge.

Layer 1

Live

Commercial Airspace

Tracks 13 airlines across 9 Middle East bounding boxes every 10 minutes. Flags anomalies when aircraft counts drop 40%+ against a 7-day same-hour, same-day-of-week baseline. Airlines know before governments announce.

Source: OpenSky Network · Polling: 10 min · Anomaly: >40% drop

Layer 2

Live

Strategic Aircraft

49 government and military aircraft on a VIP watchlist — E-4B Doomsday planes to Gulf royal flights. Tracks sightings, going-dark events, and strategic type surges across four watch regions.

28 trackable by ICAO24 · 4 watch regions · Surge: >2σ above baseline

Layer 3

Live

Airspace Restrictions

NOTAMs are filed hours before kinetic events. The system polls for Middle East restriction filings every 30 minutes, auto-flags restriction Q-codes, and preserves first-detection timestamps for back-testing lead times.

Source: Cirium Sky API · Polling: 30 min · Auto-flags restrictions

Layer 4

Ready

Route Suspensions

Compares scheduled vs. actually operated flights across all monitored airport pairs. When airlines quietly drop service — operated flights falling 60%+ below schedule for 3 consecutive days — that's a leading indicator.

Source: Cirium Flex API · 13 airlines · 14 airport pairs

Layer 5

Live

GDELT Ground Truth

2.5 million geopolitical events since January 2023. The Goldstein scale separates escalation from ceasefire, giving the convergence engine a historical baseline — and a divergence detector when physical signals contradict the diplomatic narrative.

2.5M events · Goldstein scoring · Verified against 5 known events

Layer 6

Planned

Maritime / AIS

Carrier strike group positioning, tanker rerouting away from Hormuz, and supply ship tracking. Includes velocity anomaly detection to filter the 600+ daily GPS spoofing events in the Hormuz corridor.

Planned · Same collector architecture as ADS-B layer
MarketSignal ADS-B traffic trend showing 24-hour aircraft counts across Middle East regions
24-hour traffic trend — aircraft counts by region updated every 10 minutes. Note Lebanon/Syria flat at zero (transponders off in active conflict zone).
MarketSignal GDELT Explorer showing event volume, Goldstein trend, and event type breakdown
GDELT Explorer — 532K events over 75 days. Goldstein scale trend (white line) shows escalation/cooperation shifts. Event type breakdown surfaces the mix of diplomatic, military, and conflict actions.
The engine

Where signals become probability

Every 10 minutes the engine reads all signal tables, applies decay and growth functions, weights each active signal, checks for cross-layer coherence, and outputs a normalized 0–1 escalation probability.

The critical design decision: distinguishing events from states. A VIP sighting is an event — it happened, significance decays. An ISR aircraft continuously orbiting a region is a state — significance grows the longer it persists, because sustained presence is infrastructure, not a one-off. Getting this wrong means treating a 12-hour E-11A BACN relay the same as a brief diplomatic overflight.

Scoring logic

Two decay models, one coherence check, one normalization step.

Event Signals

VIP sightings, type surges, route suspensions. Exponential decay from last_confirmed_at. A diplomatic bizjet sighting matters most in the first hours and fades over days.

State Signals

ISR on station, active NOTAMs, ADS-B blackouts. Sigmoid growth while active — significance increases the longer the state persists. Exponential decay once resolved.

Coherence Multiplier

Fires 1.5× only when 2+ signals in the same region both exceed 2.0. Independent agreement is the thesis — one signal is noise, two is a pattern.

Divergence Detection

Flags when GDELT diplomatic signals and physical aviation signals point in opposite directions. Disagreement between layers is itself a signal worth surfacing.

Domain expertise

Why the signal design works

Built with 20 years of aviation industry knowledge

The aircraft watchlist, type classifications, and anomaly thresholds weren't pulled from a Wikipedia article. They were developed in collaboration with a veteran aircraft broker with over two decades of industry experience — someone who understands which airframes move for which reasons, what "normal" looks like for military logistics versus diplomatic shuttles, and which patterns actually precede geopolitical events versus routine exercises.

This is the difference between building a tool that tracks planes and building a tool that understands what the planes mean.

Stack

Deliberately simple infrastructure

A single $6/month VPS running systemd services. The complexity is in the signal logic, not the architecture. Every collector writes to local SQLite, the convergence engine reads from all of them, and Streamlit surfaces the results. No Kubernetes. No microservices. Just Python, SQL, and a thesis.

Python SQLite Streamlit DigitalOcean systemd BigQuery OpenSky Network Cirium APIs GDELT Project

Got a problem that needs this kind of thinking?

I find the signals hiding in your workflow and build the system that surfaces them. Let's talk about what's slowing you down.

Book a discovery call