Backtested on 2,058 trading days · 100% real market data

Commodity Regime Intelligence
for Structured Products

Two APIs. Five signals. Four trade corridors. One decision: should you issue that autocallable today? Backtested at 81.2% regime accuracy across 8+ years of real Yahoo Finance data.

0%
Regime Accuracy
0
Trading Days
0
Market Inputs
0%
Whipsaw Rate

Five Signals, One Regime Score

Each signal captures a different dimension of the commodity cycle. The weighted composite produces a single score that classifies the market into one of five regimes — from STRESS to STRONG_RALLY.

🛢
Brent Crude Trend
16.0% weight
20-day rate-of-change of Brent futures, tanh-normalized. Captures directional momentum in the benchmark crude contract.
🚢
Shipping Divergence
8.7% weight
Baltic Dry Index ETF (BDRY) momentum and volatility regime. Tracks physical shipping demand as a leading indicator.
Energy Spread Regime
34.1% weight
Brent-WTI spread dynamics — contango vs backwardation. The single most informative sub-signal (55.8% variance contribution).
📊
GSCI Gated Trend
9.7% weight
S&P GSCI commodity basket (GSG) trend, gated by the Dollar Index (DXY). Dollar strength suppresses commodity signals.
💱
Currency Dispersion
31.5% weight
Cross-sectional dispersion of 5 commodity currencies (AUD, CAD, NOK, BRL, ZAR). High conviction = strong directional signal.
RegimeScore RangeIssuance SignalHedging ImplicationStructurer Action
STRONG_RALLY > +25 Autocall likelyMax delta hedgeSuspend new issuance
EXPANSION +15 to +25 Proceed with cautionElevated vol premiumWiden barriers
NEUTRAL -11 to +15 Standard windowNormal ratiosStandard issuance
CONTRACTION -25 to -11 Delay issuanceReduce gammaWait for direction
STRESS < -25 SuspendMax protectionWiden KI to 50%

Backtest Results — 2018 to 2026

Every number on this page is computed from real Yahoo Finance data. No synthetic data, no curve fitting, no look-ahead bias. The model predicts 10-day forward direction with 81.2% accuracy across 2,058 trading days.

Year-by-Year Regime Accuracy

All years exceed 60% minimum threshold. Target: >80%.

Variance Contribution

Which signal drives the composite score?

Leave-One-Out Impact

Accuracy drop when each signal is removed

Advanced Validation Metrics

Beyond headline accuracy
MetricValueInterpretation
Autocall Precision (30d)65.0%When API says STRONG_RALLY, 30d forward return is positive 65% of the time
Risk Alert Recall18.2%API flagged CONTRACTION/STRESS before 18% of major (>10%) GSG drawdowns
Spearman ρ0.041Near-significant rank correlation (p=0.062) between score and 10d return
Whipsaw Rate7.9%Only 7.9% of regime transitions reversed within 3 days

What the Backtest Proves

Honest assessment of capabilities
Direction prediction works
81.2% accuracy on 10-day forward direction across 8+ years
Stable across regimes
No single year below 72% — consistent through COVID, Ukraine, rate hikes
Magnitude prediction is weak
Spearman ρ near zero — the model tells you UP or DOWN, not HOW MUCH
Risk alerts need tuning
18.2% recall on major drawdowns — not a standalone risk system

Four Corridors, Six Sub-Signals Each

API 2 monitors physical trade routes that drive commodity flows. Each corridor produces a risk score (0–100) from six sub-signals. Scores above 60 trigger structurer alerts; above 75 triggers issuance suspension.

🇨🇳→🇦🇪 35%
China → Middle East
Strait of Hormuz risk. 20% of global oil and 25% of LNG transits. Critical for Iran scenarios.
FXIUSDCNYUAEBDRYEMBAED=X
🇨🇳→🌍 25%
China → Africa
Belt & Road resource extraction. Copper, cobalt, lithium supply chain. Industrial metals exposure.
FXIAFKEZAUSDZARCOPXLIT
🇦🇪→🇪🇺 20%
ME → Europe
Energy transit corridor. European energy security post-Russia 2022. LNG and crude oil flows.
UAEVGKEWGEURUSDTLTCL=F
🌏→🇪🇺 20%
Asia → EU (Suez)
Global supply chain choke point. Container shipping, semiconductors, industrial goods.
FXIVGKSOXLXLIBDRYPICK

Event Analogue Engine — 12 Historical Fingerprints

API 2 computes Euclidean distance between today's corridor readings and 12 historical crisis patterns. Higher severity = closer match to a known stress event.

Global Financial Crisis95
COVID Collapse88
Russia-Ukraine82
Arab Spring72
China Devaluation68
US-China Trade War65
Red Sea / Houthi62
Suez Blockage58
Evergrande Crisis55
US-China Tech War52
Rare Earth Controls45
Panama Drought40

Built on Transparency

Every signal is independently verifiable. Every data point comes from a free, public source. No black boxes, no proprietary feeds, no hidden inputs.

Data Sources

33 instruments from Yahoo Finance — ETFs, futures, FX pairs. All free, all auditable. No proprietary data feeds required.

Yahoo Finance API

Signal Computation

Rate-of-change, z-scores, rolling volatility, cross-sectional dispersion, EMA smoothing (span=10). All standard quantitative techniques.

NumPy + Pandas

Regime Classification

Weighted composite score mapped to 5 regimes via fixed thresholds (HI=25, LO=15). No machine learning black box — fully explainable.

Deterministic Rules

Backtest Protocol

Walk-forward: at each date, only data available up to that date is used. 10-day forward return direction compared to regime prediction.

2018–2026

Accuracy Metric

Regime correctly matches forward return direction (positive return + bullish regime or negative return + bearish regime). NEUTRAL gets 10% tolerance.

81.2% Overall

Honest Limitations

No magnitude prediction (Spearman ≈ 0). 18.2% recall on major drawdowns. Not a standalone risk system — an intelligence layer.

Full Disclosure
Live API

See It Working Right Now

The same signals powering this backtest are available as live REST API endpoints. Try them with real-time Yahoo Finance data — no API key required for the demo.

Explore Live API Endpoints

One Macro Button. Live Signals in Excel.

Your IAM desk already lives in Excel. This dashboard connects directly to the live API with a single VBA macro — no Python, no terminal, no API key. Click Refresh, get the signal.

NWCA_Signal_Dashboard.xlsm — Excel
FileHomeInsertPage LayoutDeveloperView
C4 fx =NWCA_LIVE_SIGNAL()
ABC DEF G
1 NWCA Structured Products Intelligence
2 Commodity Momentum Signal — Live Dashboard
3
4 COMPOSITE SCORE +22.55 REGIME EXPANSION
5 As of: 2026-03-02 ▶ REFRESH SIGNAL
6
7 Sub-Signal Breakdown
8 Signal Score Weight Contribution
9 Brent Crude Trend +47.27 16.0% +7.56
10 Shipping Divergence +15.49 8.7% +1.35
11 Energy Spread Regime +44.82 34.1% +15.28
12 GSCI Gated Trend -6.27 9.7% -0.61
13 Currency Dispersion +1.53 31.5% +0.48
14
15 Trade Corridor Risk
16 Corridor Score Level
17 China → Middle East 38.5 MEDIUM
18 China → Africa 32.1 MEDIUM
19 ME → Europe 29.7 LOW
20 Asia → EU (Suez) 31.4 MEDIUM
VBA Macro — Paste into Excel Developer > Visual Basic > Insert Module
'========================================================== ' NWCA Structured Products — Excel Signal Dashboard ' One-click refresh from live API. No API key required. '========================================================== Sub RefreshSignal() On Error GoTo ErrHandler Application.StatusBar = "Connecting to NWCA API..." Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Dashboard") Dim http As Object: Set http = CreateObject("MSXML2.XMLHTTP.6.0") ' ── Call the flat Excel-optimized endpoint ── http.Open "GET", "https://nwc-advisory.com/structuredproducts/api/v1/excel-data", False http.send If http.Status <> 200 Then MsgBox "API returned status " & http.Status, vbExclamation: Exit Sub End If Dim j As String: j = http.responseText ' ── Populate dashboard ── ws.Range("C4").Value = Val(GetVal(j, "composite_score")) ws.Range("E4").Value = GetVal(j, "regime") ws.Range("B5").Value = "As of: " & GetVal(j, "as_of") ' Sub-signals ws.Range("C9").Value = Val(GetVal(j, "brent_trend_score")) ws.Range("E9").Value = Val(GetVal(j, "brent_trend_contribution")) ws.Range("C10").Value = Val(GetVal(j, "ship_diverge_score")) ws.Range("E10").Value = Val(GetVal(j, "ship_diverge_contribution")) ws.Range("C11").Value = Val(GetVal(j, "energy_regime_score")) ws.Range("E11").Value = Val(GetVal(j, "energy_regime_contribution")) ws.Range("C12").Value = Val(GetVal(j, "gsci_gated_score")) ws.Range("E12").Value = Val(GetVal(j, "gsci_gated_contribution")) ws.Range("C13").Value = Val(GetVal(j, "ccy_dispersion_score")) ws.Range("E13").Value = Val(GetVal(j, "ccy_dispersion_contribution")) ' Corridors ws.Range("C17").Value = Val(GetVal(j, "corridor_china_me_score")) ws.Range("D17").Value = GetVal(j, "corridor_china_me_level") ws.Range("C18").Value = Val(GetVal(j, "corridor_china_africa_score")) ws.Range("D18").Value = GetVal(j, "corridor_china_africa_level") ws.Range("C19").Value = Val(GetVal(j, "corridor_me_europe_score")) ws.Range("D19").Value = GetVal(j, "corridor_me_europe_level") ws.Range("C20").Value = Val(GetVal(j, "corridor_asia_eu_suez_score")) ws.Range("D20").Value = GetVal(j, "corridor_asia_eu_suez_level") ' Color the regime cell Select Case ws.Range("E4").Value Case "STRONG_RALLY": ws.Range("E4").Interior.Color = RGB(5, 150, 105) Case "EXPANSION": ws.Range("E4").Interior.Color = RGB(217, 119, 6) Case "NEUTRAL": ws.Range("E4").Interior.Color = RGB(148, 163, 184) Case "CONTRACTION": ws.Range("E4").Interior.Color = RGB(249, 115, 22) Case "STRESS": ws.Range("E4").Interior.Color = RGB(220, 38, 38) End Select ws.Range("E4").Font.Color = vbWhite: ws.Range("E4").Font.Bold = True ws.Range("G5").Value = "Refreshed: " & Format(Now, "yyyy-mm-dd hh:mm:ss") Application.StatusBar = False Exit Sub ErrHandler: Application.StatusBar = False MsgBox "Error: " & Err.Description, vbExclamation End Sub ' ── Simple JSON value extractor (no external dependencies) ── Private Function GetVal(json As String, key As String) As String Dim p As Long, s As Long, e As Long, ch As String p = InStr(1, json, Chr(34) & key & Chr(34)) If p = 0 Then GetVal = "": Exit Function s = InStr(p, json, ":") + 1 Do While Mid(json, s, 1) = " ": s = s + 1: Loop If Mid(json, s, 1) = Chr(34) Then s = s + 1: e = InStr(s, json, Chr(34)) GetVal = Mid(json, s, e - s): Exit Function End If e = s Do While e <= Len(json) ch = Mid(json, e, 1) If ch = "," Or ch = "}" Then Exit Do e = e + 1 Loop GetVal = Trim(Mid(json, s, e - s)) End Function

Works with Excel 2016+, Microsoft 365, and LibreOffice Calc. No API key required.

NWCA Intelligence
Hi! I'm the NWCA Intelligence assistant. Ask me about the commodity momentum signal, trade corridors, or use the quick buttons above.