Skip to main content
000%
BETA// LIVEPlatform in beta. Feedback welcome.Share Feedback →

// METHODOLOGY

DERIVATION & DATA SOURCES

Every derived metric, signal, and composite score on Sapinover is calculated from verifiable market data and documented here. This page serves as the institutional audit trail for all quantitative analysis displayed across the platform.

Hover over or click the metric name in the headers to anchor your browser. Share these links with colleagues to reference specific calculation methodologies. All sources, inputs, and calculation steps are fully transparent.

MULTI-SOURCE INTELLIGENCE FUSION

SOURCES

  • Finnhub general headlines (free tier, 60 calls/min)
  • Yahoo Finance v8 chart API — VIX (^VIX/VX=F), 10Y Yield (^TNX), Gold (GC=F), Crude Oil (CL=F), DXY (DX-Y.NYB)
  • Claude claude-sonnet-4-6 — LLM synthesis of headlines + market stress data

CALCULATION

Finnhub headlines and real-time market stress indicators (VIX, Gold, Crude, DXY, 10Y yield) are injected into a structured Claude prompt. Claude returns a 1-10 risk score, a plain-language brief, and 7 dimension scores in a single inference pass. The result is cached and served via 30-minute ISR on Vercel.

Refreshed every 30 minutes via Vercel cron dispatch + 30-minute ISR cache. LLM output is non-deterministic; the same inputs may produce slightly different scores across runs.

GEOPOLITICAL RISK SCORE

SOURCES

  • Finnhub general headlines (used as signal input)
  • Yahoo Finance v8 chart API for live market stress indicators
  • Claude claude-sonnet-4-6 synthesis

CALCULATION

A hybrid quantitative-then-qualitative process: real-time market stress indicators (VIX level, Gold % change, Crude % change, DXY % change, 10Y yield % change) are computed first and injected as context into a Claude prompt alongside recent Finnhub headlines. Claude synthesizes both the quantitative stress signals and the qualitative news content to produce an integer 1-10 risk score, a label, a plain-language brief, one primary threat vector, and 7 dimension scores. The LLM rationale is visible in the 'brief' field displayed below the score.

INPUTS

VIX (^VIX)
CBOE 30-day implied vol on SPX options. Cash closes 4:15 PM ET; VX=F (futures) used overnight.
Gold (GC=F)
Gold futures % change. Rising gold signals flight-to-safety / risk-off.
Crude Oil (CL=F)
WTI crude futures % change. Supply shocks and geopolitical events register here.
DXY (DX-Y.NYB)
Trade-weighted USD index % change. Dollar strengthening often accompanies risk-off episodes.
10Y Yield (^TNX)
On-the-run 10Y UST proxy % change. Rapid moves signal rate stress or flight-to-safety.
Finnhub headlines
General news headlines used as qualitative context for LLM thematic scoring.

ISR cache: 30 minutes. Score is 1 (minimal risk) to 10 (extreme risk). The LLM rationale for each score is auditable in the brief field. Because both quantitative market data and qualitative news feed into Claude, scores reflect the model's read of combined signals — not a purely deterministic formula.

THREAT DIMENSIONS (7 VECTORS)

CALCULATION

Each of the 7 dimensions receives a 0-10 score from Claude per assessment cycle. Claude reads current Finnhub headlines and market stress context, then assigns each dimension a severity score reflecting headline density and severity within that thematic bucket. Scores are rendered on the radar chart; the highest-scoring dimension is flagged as the primary threat vector.

INPUTS

Armed Conflict
Military engagements, territorial disputes, defense posture changes, and conflict escalation across global hotspots. Driven by: Gold moves, GDELT conflict events, defense sector flows.
Trade Tensions
Tariffs, trade barriers, sanctions, trade war rhetoric, and cross-border economic disputes affecting capital flows. Driven by: DXY moves, tariff headlines, trade balance data.
Political Instability
Government transitions, contested elections, civil unrest, regulatory uncertainty, and policy reversals. Driven by: Gold flight-to-quality, political news density, policy uncertainty index.
Energy Supply
Oil and gas supply disruptions, OPEC+ production decisions, pipeline and refinery risks, and energy infrastructure threats. Driven by: Crude oil price moves, energy sector disruption news.
Financial Contagion
Cross-market correlation spikes, credit stress indicators, sovereign debt risk, and systemic risk transmission. Driven by: VIX level, credit spread widening, cross-market correlation.
Central Bank
Monetary policy shifts, unexpected rate decisions, quantitative tightening, and central bank communication surprises. Driven by: 10Y yield moves, Fed/ECB/BOJ communications, rate expectations.
Pandemic
Disease outbreaks, public health emergencies, pharmaceutical supply chain disruptions, and health-related economic impacts. Driven by: Healthcare sector activity, WHO alerts, supply chain disruption signals.

Dimension scores are LLM-generated and reflect Claude's read of headline severity within each thematic bucket. They are not deterministic statistical scores. The radar chart's hover panel shows the driver signals for each dimension.

DIRECTIONAL PERFORMANCE BAR

SOURCES

  • /api/global-markets (Yahoo Finance v8 chart API — equities, FX, commodities, yields, crypto)
  • /api/geopolitical-risk (for signal divergence check)
  • Supabase market_regime_signals table (regime history snapshots)

CALCULATION

Aggregates 11 cross-asset signals into a single weighted score ranging from -10 (strong defensive) to +10 (strong growth-oriented). Each factor contributes: direction signal (+1 or -1) × asset weight × magnitude scale, where magnitude = min(abs(% change), 5%) to prevent outliers from dominating. Raw weighted sum is normalized by the theoretical maximum (sum of all weights × 5%) to produce a -1 to +1 value, then scaled to -10/+10 for display.

INPUTS

ES (3.0x, equity)
S&P 500 Futures — up is growth-oriented
NQ (2.5x, equity)
Nasdaq 100 Futures — up is growth-oriented
RTY (2.0x, equity)
Russell 2000 Futures — up is growth-oriented
VIX (2.5x, fear)
CBOE Volatility Index — inverted: rising VIX is defensive
HYG (2.0x, credit)
High Yield Corporate Bond ETF — up signals healthy credit = growth-oriented
GC / Gold (1.2x, haven)
Gold futures — inverted: Gold up = flight to safety = defensive
CL / Oil (1.0x, equity)
Crude Oil futures — up is growth-oriented
TLT (1.0x, bond)
20+ Year Treasury ETF — inverted: TLT up = flight to safety = defensive
TNX / 10Y (0.8x, haven)
10Y yield — inverted: rapid yield rise signals rate stress
DXY (0.8x, haven)
US Dollar Index — inverted: DXY spike signals defensive dollar demand
BTC (0.8x, equity)
Bitcoin — up is growth-oriented (speculative risk appetite)

Equity guard: when all three core equity futures (ES, NQ, RTY) are negative, the label caps at NEUTRAL regardless of other factors — prevents a misleading 'growth-oriented' reading during volatility compression with equities red. Symmetrically, all three up prevents a DEFENSIVE label. Score and all 11 factor contributions are stored in Supabase market_regime_signals every 5 minutes.

WEIGHTED RISK COMPOSITE INDEX

SOURCES

  • /api/geopolitical-risk (Claude geopolitical risk score + dimension scores + stress indicators)
  • VIX level, Gold % change, Crude % change, DXY % change, 10Y yield % change (from geopolitical-risk stress_indicators payload)

CALCULATION

A 0-100 composite index that blends the Claude geopolitical risk level with independent market stress signals. Each input is normalized to a 0-100 risk signal before weighting. VIX uses a logarithmic scale (VIX 10 = 0 risk, VIX 80 = 100 risk). Gold and DXY are directional signals (up = risk). Crude and 10Y yield use absolute % change (volatility = risk). Dimension concentration measures how concentrated the 7 dimension scores are (high concentration = one acute threat domain dominating).

INPUTS

Geopolitical Risk Level (25%)
Claude 1-10 score linearly normalized to 0-100.
VIX (25%)
Logarithmic scale: vixToRisk = 100 × log(VIX/10) / log(8). Capped at 0-100.
Gold % change (12%)
Directional: Gold up = risk. Normalized to 0-100 with 3% cap.
Crude % change (10%)
Absolute % change (volatility signal). Normalized to 0-100 with 5% cap.
DXY % change (8%)
Directional: DXY up = dollar stress. Normalized with 2% cap.
10Y yield % change (8%)
Absolute % change (rate stress signal). Normalized with 3% cap.
Dimension Concentration (12%)
Max dimension score / mean dimension score ratio. Ratio ≥ 3 = 100 risk; ratio = 1 (even distribution) = 0 risk.

Output range: 0 (LOW) to 100 (SEVERE). Thresholds: 0-20 LOW, 20-35 GUARDED, 35-50 ELEVATED, 50-70 HIGH, 70+ SEVERE. The 30-day trailing chart uses one reading per day (latest of that day). This composite is a Sapinover-proprietary index; it is not published by any external data vendor.

VIX — CBOE VOLATILITY INDEX

SOURCES

  • CBOE (^VIX via Yahoo Finance v8 chart API)
  • VX=F (VIX futures via Yahoo Finance) for overnight hours

CALCULATION

^VIX is the CBOE's 30-day implied volatility measure derived from SPX option prices across a wide range of strikes, calculated in real time during regular US equity market hours. The index reflects the market's expectation of 30-day forward volatility on the S&P 500.

^VIX trades 9:30 AM – 4:15 PM ET and closes at the end of each session. Outside those hours the displayed value is the last close and is therefore stale. During overnight hours, VX=F (VIX front-month futures) is substituted where available, as futures trade 24h on CME Globex. A 'STALE' label is shown when the cash index is closed.

DXY — US DOLLAR INDEX

SOURCES

  • DX-Y.NYB via Yahoo Finance v8 chart API

CALCULATION

The DXY is a geometrically weighted index of the US dollar against a basket of 6 major currencies: EUR (57.6%), JPY (13.6%), GBP (11.9%), CAD (9.1%), SEK (4.2%), CHF (3.6%). ICE calculates and publishes the index. The quote shown is sourced from Yahoo Finance.

The FX market trades 24 hours/5 days per week, so DXY is considered LIVE outside US equity hours. Weights are fixed and reviewed infrequently; the EUR weight has been unchanged since 1999.

10Y YIELD — US TREASURY

SOURCES

  • ^TNX (CBOE 10Y Treasury yield index) via Yahoo Finance v8 chart API

CALCULATION

^TNX tracks the yield on the on-the-run 10-Year US Treasury note as published by CBOE. The quote represents the annualized yield expressed as a percentage. Change is shown in basis points (bps): 1 bps = 0.01%.

Treasury yields are quoted during US bond market hours (approximately 8 AM – 3 PM ET). Outside those hours the displayed value is the last close and is stale. In the directional performance bar, TNX is treated as a 'haven' signal (inverted): a rapid yield spike indicates rate stress, not risk appetite.

REGIME SCORE

SOURCES

  • /api/global-markets (11 cross-asset quotes)
  • Supabase market_regime_signals (historical regime snapshots)

CALCULATION

Continuous score on a -1 to +1 normalized scale, displayed as -10 to +10. Computed by the DirectionalPerformanceBar model: each of 11 factors contributes direction (+1/-1) × asset weight × min(|% change|, 5%). Raw sum is divided by theoretical maximum (sum of all weights × 5) to normalize. Equity guard caps the effective score at NEUTRAL (±0.05) when all core equity futures point the same direction opposite the model result.

INPUTS

> +2.5
STRONG GROWTH-ORIENTED
+0.8 to +2.5
GROWTH-ORIENTED
-0.8 to +0.8
NEUTRAL
-2.5 to -0.8
DEFENSIVE
< -2.5
STRONG DEFENSIVE

Equity guard is active when all three US equity futures (ES, NQ, RTY) are simultaneously negative (caps at NEUTRAL) or simultaneously positive (prevents DEFENSIVE label). The score and all factor contributions are persisted to Supabase every 5 minutes for the Regime History time-series chart.

CUT THROUGH THE NOISE

SOURCES

  • Yahoo Finance v8 chart API — market snapshot (equities, crypto, FX, commodities)
  • Finnhub — news headlines (primary, 60 calls/min)
  • Alpha Vantage — news fallback (25 calls/day)
  • Claude claude-sonnet-4-6 — LLM synthesis
  • Supabase market_summaries table — pre-generated variants (8 total)

CALCULATION

Market data snapshot and recent headlines are injected into a structured Claude prompt. Claude returns a 1-2 sentence summary targeted to the selected audience lens (retail = plain English; institutional = desk view). Four scopes exist: US quick, US deep, global quick, global deep. The result is stored in the market_summaries table and served from cache. The 'Go Deeper' button fetches the deep variant on demand.

Refreshed every 30 minutes by the Vercel cron dispatcher. Weekend mode (Saturday all day + Sunday before 5 PM ET) applies a 6-hour freshness throttle and uses a separate prompt focused on past-week reflection and next-week framing. Clickable asset mentions in the summary text open the TradingView chart drawer.

REGIME OUTLOOK (NEXT SESSION)

SOURCES

  • Supabase market_regime_signals table — last 96 snapshots (~8 hours at 5-min cadence)
  • Claude claude-sonnet-4-5 — 3-sentence outlook generation

CALCULATION

The API queries the 96 most-recent regime signal rows from Supabase (DESC order). Analytics computed server-side: (1) current label and normalized score from the newest row; (2) trend direction by comparing avg score of newest 24 rows vs rows 25-48; (3) label distribution across all 96 rows; (4) equity guard fire count; (5) factor aggregation from the 5 most-recent signals — each factor's net direction (growth-oriented vs defensive) is voted across the 5 snapshots. These analytics are passed to Claude, which writes a 3-sentence outlook: current positioning + trend, dominant driving factor, and a risk/watch item. Response is cached for 15 minutes via s-maxage=900.

INPUTS

Signal window
Last 96 regime snapshots, ~8 hours of 5-min readings
Trend delta
Avg score of newest 24 readings minus avg of prior 24 readings; >0.05 = improving, <-0.05 = deteriorating
Factor votes
5 most-recent snapshots: each factor cast as growth-oriented or defensive; net direction used as Claude input

15-minute ISR cache (s-maxage=900, stale-while-revalidate=300). Requires minimum 12 signal rows to generate; returns ok=false with reason='insufficient data' otherwise. LLM output is non-deterministic.

GLOBAL MARKETS HEATMAP

SOURCES

  • CoinGecko — top-50 crypto by market cap (stablecoins filtered, 24h % change included, no API key required)
  • Yahoo Finance v8 chart API — US equity futures (ES, NQ, RTY, YM), commodities (Gold, Crude, Silver, Natural Gas), FX pairs (EUR/USD, USD/JPY, GBP/USD, AUD/USD, USD/CHF, USD/CAD), treasury yields (^TNX, ^FVX, ^TYX, ^IRX), bond futures (ZB=F, ZN=F), volatility (^VIX, VX=F)
  • Asia and European equity indices via Yahoo Finance

CALCULATION

Each asset group fetches live quotes and computes % change from prior close. Color intensity scales from near-flat (6% opacity) to extreme move (50% opacity) in 6 steps. Treasury yields display as percentage values; all others as price with 2-decimal formatting. Groups show primary assets by default; expanded view (institutional lens) reveals all tracked instruments. The weighted average toggle computes a simple equal-weight mean of all group members' % changes for a one-line summary.

Refreshed every 2 minutes via Vercel ISR (s-maxage=120). Market-hours badges per group reflect approximate regional trading hours and may not account for all holidays. Institutional lens (EXPANDED VIEW) shows all instruments; retail lens (PRIMARY ONLY) shows the top 3-5 per group.

OVERNIGHT ATS ACTIVITY

SOURCES

  • Alpaca Market Data API — overnight feed (BOATS, 15-minute delayed)
  • Dynamic ~65-symbol watchlist (S&P 500 components + ETFs active in prior BOATS sessions)

CALCULATION

The API polls Alpaca's overnight feed for the current watchlist. Symbols with a non-null lastPrice are considered active. Results are sorted by session volume (descending). The panel shows symbol, last price, session volume, and last-trade timestamp. A 'LIVE SESSION' badge fires when sessionActive=true; 'SESSION CLOSED' when outside BOATS trading hours (Sun-Thu 8 PM - 4 AM ET).

Data is 15 minutes delayed per Alpaca's overnight feed terms. The watchlist is dynamic and may not include all BOATS-active symbols. Panel polled every 2 minutes when the page is visible.

REGIME HISTORY

SOURCES

  • Supabase market_regime_signals table — stored every 5 minutes by DirectionalPerformanceBar
  • /api/regime-history — returns signals in DESC order; component reverses to oldest-first for chart

CALCULATION

Each dot represents one 5-minute regime snapshot: label (GROWTH-ORIENTED / NEUTRAL / DEFENSIVE / etc.), normalized score (-1 to +1), bar_percent (0=defensive to 100=growth-oriented), equity_guard_active flag, and per-factor contributions. The Y-axis maps bar_percent to chart height. Green zone = bar_percent above 60; red zone = below 40; amber center line = 50 (neutral). The cyan WMA line is a 12-point weighted moving average (most-recent point gets highest weight) computed client-side.

INPUTS

bar_percent 60-100
Growth-oriented zone (green tint)
bar_percent 40-60
Neutral band
bar_percent 0-40
Defensive zone (red tint)
Yellow ring on dot
Equity guard was active at that snapshot: all three core equity futures negative, label capped at NEUTRAL
Cyan WMA line
12-point weighted moving average smoothing short-term noise (~1 hour at 5-min cadence)

Time windows: 24h, 7d, 30d. Auto-selected on load based on data span. Hover any dot for score, factor count, and 6 key asset moves at that moment. Expand button opens a full-screen modal with a taller chart. Regime distribution badges below the chart show how many snapshots fell in each label bucket for the selected window.

AUDIENCE LENS

SOURCES

  • localStorage key 'sapinover-audience-lens' — persists selection across sessions

CALCULATION

A site-wide toggle stored in localStorage. Two modes: RETAIL (plain-English framing, primary-only asset view, simplified narrative) and INSTITUTIONAL (full quant detail, expanded asset groups, desk-view terminology). The lens is read from AudienceLensProvider context and consumed by CutThruNoise, GlobalMarketsHeatmap, DirectionalPerformanceBar, and other components to adjust depth and tone.

INPUTS

RETAIL
Consumer-friendly framing. GlobalMarketsHeatmap shows primary assets only. CutThruNoise uses plain-English prompt variant.
INSTITUTIONAL
Full quant detail. GlobalMarketsHeatmap expands all asset groups. CutThruNoise uses desk-view prompt variant with more technical context.

Toggle is in the site header (nav bar). Selection persists via localStorage and is restored on page load. Default is RETAIL. The AudienceLensBadge in the bottom-right corner shows the active mode at all times.

SOURCES & DISCLAIMERS

All quantitative inputs are sourced from free, publicly available data APIs unless otherwise noted. Data feeds include Yahoo Finance v8 chart API (equities, indices, commodities, FX, yields), Finnhub (news, economic calendar, quotes), CoinGecko (crypto), Alpaca Markets (overnight ATS), SEC EDGAR (13F holdings), and FINRA OTC Transparency (alternative trading system metrics).

LLM-Generated Analysis: Geopolitical risk scores, threat dimension assessments, and market summaries (“Cut Thru the Noise”) are generated by Claude (Anthropic’s claude-sonnet-4-6 model) based on structured prompts and live market data. While the synthesis is auditable (you can inspect the market data inputs used by the LLM), Claude outputs are non-deterministic; the same inputs may produce slightly different textual conclusions across runs. Scores are probabilistic, not deterministic formulas.

Research Use Only: All content and derived metrics on Sapinover are provided for research and informational purposes only and do not constitute investment advice, a recommendation to buy or sell any security, or an offer to provide professional investment advisory services. Past performance is not indicative of future results.

Institutional Auditability: This methodology page is designed for institutional readers to independently verify all quantitative calculations. Each metric’s inputs, weights, and transformations are documented in sufficient detail for replication in external systems.

Data Latency & Staleness: Some instruments (e.g., CBOE Volatility Index ^VIX, US Treasury yields) close or have limited trading hours. Overnight quotes are labeled as STALE. Futures (VX=F, ES, NQ, RTY, GC, CL) trade 24h on CME Globex and are labeled as LIVE when cash markets are closed. Always review the timestamp and market status label before interpreting overnight signals.