DEV Community

moneyfeel
moneyfeel

Posted on

Reading market crises before they happen: the Macro & Geopolitical Risk Index

Reading Market Crises Before They Happen: The Macro & Geopolitical Risk Index

How a quantitative macro regime classifier flagged the Hormuz escalation six weeks before it became front-page news.


The Setup

On April 18, 2026, leaders from France, the UK, Italy, and Germany gathered in Paris to formalize a joint naval mission in the Strait of Hormuz. Oil had crossed $100/barrel. European inflation was accelerating. Equity markets were down ~7% from the onset of the conflict.

For most investors, this felt like a sudden shock.

For the moneyfeel Macro Risk Index (MRI), the deterioration had been visible in the data since early March.


What Is the MRI?

The MRI is an institutional-grade macro regime classifier covering 5 regions — GLOBAL, US, EU, ASIA, EM — across 3 timeframes (Daily, Weekly, Monthly), updated daily at market close.

It classifies market conditions into 5 discrete regimes:

Regime Equity Exposure Signal
STRONG_BULL 100% Strong momentum, compressed volatility
BULL 100% Positive macro, manageable conditions
NEUTRAL 100% Mixed signals, no confirmed stress
BEAR 20% Elevated credit stress, rising volatility
STRONG_BEAR 0% Crisis conditions, extreme systemic stress

The model ingests 11 macro variables across 5 risk dimensions:

  1. Credit markets — IG/HY spreads, credit stress indicators
  2. Volatility — implied vol surface, VIX regime
  3. Rate dynamics — curve shape, rate of change
  4. Sovereign spreads — cross-country stress differentials
  5. Geopolitical risk — GPR Index (Iacoviello, 2022), smoothed to isolate medium-term trends

The Methodology: What Makes It Different

Most regime models rely on price data — momentum signals, moving averages, or drawdown thresholds. The MRI is different: it reads what the market is already pricing in, before it shows up in equity drawdowns.

Rolling Percentiles, Not Absolute Levels

Each variable is normalized through 3-year rolling percentiles. This ensures cross-regional comparability and removes structural drift — a credit spread level that was "elevated" in 2010 carries different information in 2026.

Geopolitical Risk Integration

The GPR component uses Iacoviello's newspaper-based index, but applies a smoothing filter to separate medium-term regime shifts from short-term noise (e.g., a single day's headlines vs. a sustained escalation trajectory).

Composite Score

The 11 inputs are aggregated into a single MRI score ranging from +1 (maximum bull) to -1 (maximum bear). The regime threshold matrix is:

score > 0.3   → STRONG_BULL
0.0 to 0.3    → BULL
-0.2 to 0.0   → NEUTRAL
-0.6 to -0.2  → BEAR
score < -0.6  → STRONG_BEAR
Enter fullscreen mode Exit fullscreen mode

Confidence is reported alongside each regime classification.


Case Study: The Hormuz Crisis (2026)

On March 2, 2026 — two days after the conflict onset in Iran — the MRI flagged a regime shift to BEAR with a score of -0.637.

By late March, the score had deteriorated to -0.966, with STRONG_BEAR conditions and ~60% confidence. Six consecutive weeks in bear territory, with the signal preceding the mainstream narrative by weeks.

Notably, the EU regime returned to NEUTRAL on April 10 — 8 days before the Paris summit — already capturing the diplomatic de-escalation before it became public.


Historical Track Record

The MRI covers 2007 to present (daily granularity). A few reference points:

Crisis MRI Behavior
2008 GFC Strong Bear regime, score → -1.0
COVID-19 (2020) Rapid Bear transition across all regions simultaneously
2022 Fed tightening cycle Score hit 100th percentile stress; Bear active throughout
2025 Tariff shock 75% stress level; Bear on US + EM
2026 Hormuz Bear from March 2, score -0.966 at peak

The pattern is consistent: deterioration in the underlying macro data precedes the full equity repricing.


API Access — Free for Researchers

The MRI is accessible via a REST API. A free API key gives you:

  • Full historical dataset (2007–present)
  • All 5 regions × 3 timeframes
  • Performance metrics, drawdown series, year-by-year returns
  • CSV export for backtesting
# No auth required — current regime for all regions
curl https://api.moneyfeel.ai/v1/current
Enter fullscreen mode Exit fullscreen mode

As of today (April 22, 2026), the GLOBAL Weekly regime is BEAR at -0.553 — compression from the March lows, but still in stress territory.


Python Quickstart

pip install moneyfeel-mri
Enter fullscreen mode Exit fullscreen mode
from moneyfeel import MRI

client = MRI("mf_live_YOUR_KEY")

# Current regime snapshot
current = client.current()
for r in current:
    print(r["region"], r["regime_weekly"], r["score_weekly"])

# Full US Weekly history as DataFrame
df = client.history_df("US", "WEEKLY", from_date="2020-01-01")
print(df.tail())

# Performance metrics
m = client.metrics("US", "WEEKLY")[0]
print(f"Sharpe: {m['sharpe']} | CAGR: {m['cagr_strategy']}% | MaxDD: {m['max_dd']}%")
Enter fullscreen mode Exit fullscreen mode

Output example:

GLOBAL   BEAR   -0.553
US       BEAR   -0.612
EU       NEUTRAL 0.041
ASIA     BEAR   -0.441
EM       BEAR   -0.388
Enter fullscreen mode Exit fullscreen mode

R Integration

library(httr2)

key  <- "mf_live_YOUR_KEY"
base <- "https://api.moneyfeel.ai/v1"

resp <- request(base) |>
  req_url_path_append("history") |>
  req_url_query(region = "US", tf = "WEEKLY", from = "2020-01-01") |>
  req_headers(Authorization = paste("Bearer", key)) |>
  req_perform() |>
  resp_body_json()

df <- do.call(rbind, lapply(resp$data, as.data.frame))
head(df)
Enter fullscreen mode Exit fullscreen mode

API Endpoints Reference

Method Endpoint Auth Description
GET /v1/status No Health check
GET /v1/current No Current regime, all regions
GET /v1/history Yes Historical regime series
GET /v1/regime/latest Yes Latest record for region+tf
GET /v1/metrics Yes Strategy KPIs (Sharpe, CAGR, MaxDD)
GET /v1/timeseries Yes Daily strategy vs benchmark
GET /v1/eoy Yes Year-by-year returns
GET /v1/drawdowns Yes Top 10 drawdowns
GET /v1/download Yes Full CSV export

Rate limits: 30 req/min, 2,000 req/day (free tier).


Get Your Free API Key

  1. Register at moneyfeel.it — no credit card required
  2. Go to your account page
  3. MRI API Access → Generate API Key

GitHub Repository
PyPI Package
Live Dashboard


Citation

If you use MRI data in research or publications:

moneyfeel (2026). Macro & Geopolitical Risk Index (MRI). moneyfeel.it.
Retrieved from https://moneyfeel.it/dashboard/macro-risk-index/

Iacoviello, M. (2022). Measuring Geopolitical Risk.
American Economic Review, 113(4), 1194–1225.


License: CC BY-NC 4.0 — free for research and non-commercial use.

Originally published on Medium

Top comments (0)