Resilience Telemetry — Operator Wiki

A plain-language field guide to the cross-asset fragility & directed-spillover console · companion to the console (index.html in this folder)
DESCRIPTIVE, NOT PREDICTIVE. This console — and this guide — describe market stress as it happens. Nothing here forecasts crashes, gives timing, or is financial advice. Every stress panel rises during dislocations (2008/2020/2022), not before. The few forward-looking reads on the Predictive tab (volatility, a months-horizon recession & credit read, decade-scale valuation) are slow and hedged, and they are never a timing signal. Read Section 1 first.

What this is — and what it is NOT

Read it: Start here. The console is explicitly NOT predictive. It is a stress thermometer, not a crash detector.
Does NOT mean: Do NOT use this to time trades or forecast crashes. Do NOT assume high readings mean a collapse is imminent. Do NOT treat lead-lag associations as causal relationships.

The Honesty Contract. This console describes financial stress in real time. It is not a crash predictor or a timing tool, and it makes no forecast of crashes or of price direction. The separate Predictive tab shows only the small set of things that are genuinely forecastable — short-horizon volatility, months-horizon recession and credit context from leading indicators such as the yield curve and credit spreads, and decade-scale valuation — each shown with its limits, and none of them is a trading signal. The framing borrows from physics (critical slowing down, phase transitions) as an analogy only — these signals are mostly absent before historical meltdowns.

Why Markets Aren't Like the Water System. The console's core panels — spectral radius, absorption ratio, turbulence, Hawkes clustering, lead-lag — were built as a thermometer of stress, not a thermometer of future crisis. By their own authors' admission, they rise during 2008/2020/2022, not before. Markets invert every advantage the water system has:

  • Topology is estimated and rewires in a crisis. The cross-asset network here is inferred from noisy returns; the instant volatility spikes, correlations collapse to one mode (everything moves together), and the graph rewires unpredictably.
  • Nothing is conserved. A crowded position unwinds in milliseconds through price. There is no quantity to integrate forward — no water level rising to a calculable overflow.
  • Drivers are endogenous and already priced. The would-be exogenous shocks (Fed policy, CPI, flows) are already embedded in price expectations. Only the unforecastable surprise remains.
  • Information has ~zero transport delay. Any stable upstream-leads-downstream pattern gets arbitraged away immediately. Lead-lag is an association observed in the data, not a causal edge you can exploit.
  • Price is the expectation itself. There is no hidden state. Watching the gauge perturbs it (reflexivity). The market is not a system with secrets to uncover.

What the Panels Actually Tell You. When the Fragility Thermometer rises (60–100), you are seeing that an asset's stress indicators have been rising unusually fast for it over the last 60 days; when spectral radius climbs or Mahalanobis turbulence spikes, you are seeing that the market is currently moving in ways that are statistically large or tightly coupled — today. A high reading can persist for months or years with nothing catastrophic happening. It can also drop from low levels with no warning. This is coincident, not leading.

The Only Weakly-Honest Leading Signal. The standardized absorption-ratio shift has shown the barest hint of lead in some sample windows — but it is sample-dependent and has not held out-of-sample. Do not trade on it.

Reading the console at a glance

Read it: Scan the two pills at the top right (threat tier and data as-of date). Read the banner. Pick Live or Backtest. Then choose a tab: Diagnostic (current strain), Predictive (the honest forecasting ceiling) or Risk (your own behaviour and sizing rules). The plain-English briefing and Data health appear on every tab.
Does NOT mean: Do NOT ignore the banner. Do NOT assume the threat pill is predictive. Do NOT cherry-pick favorable readings.

Header: Threat Tier Pill

The coloured pill at the top right names the tier of the single highest Fragility-thermometer score across all 51 markets (the score itself, and which market it is, are in the banner below the header):

  • Green, "Resilient" (0–59): the asset's fragility indicators are not rising unusually fast for it. This says nothing about their level: an already-volatile asset that is no longer getting more so can sit here.
  • Amber, "Reduced resilience — watch" (60–84): its fragility indicators have been rising faster than is usual for that asset over the last 60 days, but not extremely so.
  • Red, "Least resilient vs recent norm" (≥85): its fragility indicators have been rising far faster than the asset's own history of 60-day trends.

The pill refreshes whenever the console recomputes — on load, after a live refresh that changed prices, and whenever you move the Backtest cursor or run a drill. It is a coincident indicator — it moves when stress is happening now, not before it arrives.

Header: Data As-of Pill

Next to it, a second pill says how fresh the market data is: data as of YYYY-MM-DD with a green dot when the data is at most 4 days old, otherwise an amber dot with the date and its age in days. The amber text names the cause: snapshot YYYY-MM-DD · Nd old only when no live feed has updated any series this session (the embedded snapshot; a later failed refresh does not switch it back), otherwise oldest series YYYY-MM-DD · Nd old (live feeds updated some series, but at least one was not refreshed or has no recent publication — e.g. an ECB holiday for FX). The date is the oldest series end, not the newest, because each cross-asset panel only uses dates that every market in that panel shares (all 51 for the directed network; the 48 non-crypto names for coupling, turbulence and the manifold), so a series that stops early holds back every panel that includes it (see Where the data comes from). The UTC clock beside the asset selector is wall-clock time, not a data date (it is hidden on phones). Under the title, the header also links to this wiki, the mastery roadmap and the list of all consoles.

Always-On Honesty Banner

Below the header, a prominent banner states:

DESCRIPTIVE, NOT PREDICTIVE. A resilience thermometer, not a crash detector.

It names the highest current reading and repeats the critical caveats: high readings can persist for months with nothing happening; declines also start from low readings; lead-lag is association, not causation; this is not financial advice. When the data behind that reading (that market's own newest bar) is more than 4 days old it says so, with the date and the age in days, and calls it the embedded snapshot only when no live feed has updated that market's series. It also prints the network's directedness (Σ|A|/ΣD), which reads "n/a (too little shared history at this date)" in Backtest before about 2023-10-09: crypto history starts 2023-09-21, and the 51-market network needs at least 12 shared days.

Live | Backtest Toggle

The two-button toggle in the header switches between two modes:

  • Live monitor (default): starts from the embedded snapshot and tries to refresh every series once at load and then every 10 minutes, asking each feed for data from that series' snapshot end onward (crypto from Binance.US, FX from Frankfurter, VIX and all 43 US-listed stocks and ETFs from Yahoo via a proxy). A live tail is never joined across a hole of more than 7 calendar days: that feed is reported as a gap and its series stay on the snapshot (see Where the data comes from). If a refresh changes no prices, nothing is recomputed; if it does, most — not all — panels recompute (see Live vs Backtest mode).
  • Backtest / research: adds the Backtest replay & base-rate honesty card with a date cursor. The walk-forward panels then use only data up to the cursor date; a few panels do not follow the cursor, and the manifold has look-ahead (see Live vs Backtest mode). A separate "base-rate honesty" table does not follow the cursor: over the selected asset's whole history, it compares how often a ≥10% drawdown followed within 60 trading days on high-fragility (≥70) days versus on any day. Because crashes are rare (handful per decade), any apparent "skill" is mostly luck.

Definitions on hover / tap

Every ticker and abbreviation on the console has a dotted underline: hover over it (or tap it on a phone) for its official name and a plain-English definition — for example UUP is a fund that tracks the US dollar against six major currencies, while CHF in the network is the USD/CHF exchange rate (Swiss francs per US dollar). Abbreviations inside a definition are spelled out underneath it. Buttons, links and checkbox labels keep their normal click and list their abbreviations in a hover title instead. The full list is in Tickers & abbreviations.

Tabs

Below the header, three tabs — Diagnostic, Predictive and Risk — split the cards (see The three views). On phones the tab bar scrolls sideways.

Detail Asset Selector

In the header ("Detail asset"), grouped by empirical factor basket. It picks the market shown in Indicator detail — seven indicators grouped into three channels (persistence, amplitude, tail) that overlap significantly and are not independent votes — the market used by the base-rate table, and the target of the volatility-spike drill. Clicking a row in the Fragility thermometer does the same.

The three views — Diagnostic, Predictive, Risk

Read it: Three tabs under the header split the console: Diagnostic ("current health & strain" — what is happening now), Predictive ("forecasting — the honest ceiling" on what can be foreseen) and Risk ("brake yourself, not the market" — your own behaviour, sizing rules and allocation drills). The plain-English briefing and Data health show on every tab.
Does NOT mean: The Predictive tab is NOT an alpha engine. It is the deliberately small, honest set of things that can be forecast (volatility, recession horizon) shown next to the things that cannot (short-term direction, R²≤0). The split exists to keep the two from being confused. The Risk tab is NOT a trading desk either: it is walled off from the market gauges, and none of its cards turns a reading into a trade.

The console used to mix descriptive monitors and the honest forecast panels in one scroll. They are now separated so the mental model is explicit. This is itself the thesis in furniture form: a large, rich diagnostic surface, a small, hedged predictive one — and a separate tab about the one thing you actually control, your own behaviour.

Diagnostic — current health & strain

Predictive — forecasting, the honest ceiling

Risk — brake yourself, not the market

On every tab

In plain English — what the latest data says (start here)

Read it: The briefing card (top of the right-hand column on desktop, further down on phones; on every tab) auto-writes 6–8 plain sentences describing what the panels are saying — for a non-specialist. The header also shows a one-line regime summary.
Does NOT mean: "Elevated" or "Stressed" is a description of current conditions, never a prediction or a buy/sell signal.

If you read nothing else, read this panel. It translates the whole console into plain language and updates with the data (and with the date cursor in Backtest). Its heading says which date it describes: "Right now" when the data is fresh; "As of 2026-10-20 (embedded snapshot · N days old)" when the data is more than 4 days old and no live feed updated anything; "As of YYYY-MM-DD (oldest series end · N days old)" when live feeds updated some series but the oldest series end is still more than 4 days old; or the cursor date in Backtest. The bullets use time words that match the heading: "Today's" and "right now" only when the data is fresh and no cursor is set; otherwise "The 2026-10-20 snapshot's" and "in the latest snapshot data" (or "The latest shared day's (YYYY-MM-DD)" and "in the latest data" once live feeds have updated some series), and "That day's" and "as of that date" in Backtest. When the data is stale, the per-market readings (the breadth behind the regime word and the most stretched name) are taken on the date the heading prints; if the most stretched market has a newer bar, the first sentence says so and notes that the banner shows each market's newest bar.

The header regime line

Under the title you'll see, e.g., Regime: Slightly elevated · coupling moderate · turbulence calm · data as of 2026-10-20 (in Backtest the last part reads cursor YYYY-MM-DD). That's the one-glance summary: the overall regime word, whether assets are moving together (coupling — high at or above the 65th percentile of its own history, moderate from the 40th, otherwise low), whether today's combined move is unusual (turbulence — high at ≥85, elevated at ≥60, otherwise calm), and the date the cross-asset data runs to.

The regime word is systemic, not one stock

The headline regime — Calm / Slightly elevated / Elevated — watch / Stressed — is driven by the system: how tightly assets are coupled, how large the combined move is, and how many assets are individually elevated. Stressed means turbulence ≥85, coupling at or above its 85th percentile, or at least 45% of markets with fragility ≥60; Elevated — watch uses 60 / 65th / 25%; Slightly elevated uses 45 / 45th / 12%; otherwise Calm. A single very-stretched name does not turn the whole headline red (that name is still called out in the first sentence). The colored pill in the top-right corner, by contrast, flags the single least-resilient asset.

What each sentence covers

  • Overall + most stretched name — the regime, and which single market's fragility indicators have been rising fastest relative to its own history (a 60-day trend, not a level: an already-volatile market that is no longer getting more so is not "stretched").
  • Coupling — are markets moving independently or together, and the plain consequence: when they move together, diversification protects you less.
  • Absorption-ratio shift (only when it is at least 1σ above its baseline) — the way markets share risk is reorganising; the one construct with a weak tendency to lead, sample-dependent and coincident in practice.
  • Turbulence — is today's combined move ordinary or unusually large.
  • Leaders — only when more directed pairs pass the network's significance gate than chance alone would give (the same test as the network card's footer: more than 1.2 × the ~5% of pairs that pass by chance): which market's moves have tended to come first lately, and the gate-passing market it leads most strongly. It flags when that market is an international ETF, whose US-hours "lead" is partly mechanical, and adds the reminder that this is a pattern, not a cause, and it can flip. Otherwise it says the network finds no lead-lag structure beyond chance, with the count of passing pairs next to what chance gives (64 of 1,275 against ~64 on the embedded snapshot), or, if the top net transmitter has no gate-passing link, that no single market is clearly leading. If the network has too little shared history at the date (Backtest before about 2023-10-09; crypto history starts 2023-09-21), it says there is not enough shared history at that date to tell whether any market leads, instead of reading the empty network as simultaneity.
  • Closest historical analog — which past date today's market "shape" most resembles (a resemblance, not a prediction).
  • Shock clustering — whether big moves are isolated or clustering.
  • Anticipation — which market the full-history spillover decomposition ranks as the top net exporter of stress (the Diebold–Yılmaz transmitter), whether its out-of-sample lead beats the basket's own stress persistence (on the embedded snapshot it does not, so the sentence calls it a place to look, not a proven leader), and whether that ranking is stable — association, not cause, and not a trade signal.

Every readout ends with the same bottom line: it describes conditions on the date in the heading ("today" only when the data is fresh; when the data is stale it adds "not today" and says either that live feeds did not update the snapshot or that they have not brought every series up to date), it does not forecast a crash, and it is not advice.

Directed spillover network (LCCA) — who leads whom

Read it: Diagnostic tab, first card. Left = net transmitters (red), right = net receivers (blue). Only the 12 strongest asymmetries are drawn; among them, solid arrows passed the permutation gate (the small label on each is the lag, in days, of its peak) and dashed ones were drawn but fell below significance. The footer counts how many of the 12 drawn links pass, and how many of all 1,275 directed pairs pass overall — about 5% would pass by chance alone, because each pair is tested separately with no multiple-testing correction, so that count is not by itself evidence of structure. Most surviving leads peak at 1 day — effectively contemporaneous. Lead-lag here is association, not causation.
Does NOT mean: Not causal graphs. Not a predictor of spillover events. Not a ranking of systemic importance—transmitters may be volatility conduits, not fundamental drivers. The network rewires in crises; historical in-sample links often don't hold out-of-sample. Lead-lag is dominated by common risk factors and information lags, not structural causality.

What Is LCCA?

Lagged Cross-Correlation Asymmetry: measures whether one asset's past returns line up with another's future returns more than the reverse. An arrow i→j means i's lagged returns correlate more strongly with j's forward returns than the reverse, over the last 252 trading days that all 51 markets share.

Calculation

For each pair i, j and lags k = 1 to L (L = 4 days):

  • Compute Fisher z-transformed cross-correlation: xcorr(i, j, k) at lag k.
  • Average absolute z-values: D(i→j) = Σ|fz(xcorr(i, j, k))| / L.
  • Asymmetry: A(i→j) = D(i→j) − D(j→i). Red i→j means i leads j; blue j leads i; near-white = pure co-movement.
  • Net transmitter/receiver: NET(i) = Σⱼ A(i→j). Positive = transmitter (red), negative = receiver (blue).

Permutation Gate

Each of 160 null draws circularly shifts every series by its own random offset — destroying the lead-lag timing while keeping each series' own behaviour — and recomputes the asymmetries. A link passes only if its asymmetry exceeds the 95th percentile of that pair's 160 null values. The draws use a fixed seed, so the same data always gives the same gate. The diagram draws only the 12 strongest positive asymmetries: solid = passed the gate; faint dashed = drawn but below significance. Many pairs that pass are not drawn. The footer therefore gives two counts — how many of the 12 drawn links pass the gate (solid), and how many of all directed pairs pass overall — next to the reminder that about 5% would pass by chance: each pair is tested on its own at the 5% level with no multiple-testing correction, so across 1,275 pairs some 60-odd passes are expected from noise alone.

Directedness Ratio

Σ|A| / ΣD—how much of the total cross-correlation is directional (asymmetric) vs co-movement. Higher = clearer leader-follower structure; lower = assets moving as one, simultaneously. The console computes it only for the current window (no history of it is plotted), so this guide makes no claim about how it behaves through crises; the common-shock drill in the Scenario sandbox shows that adding simultaneous moves with no leader lowers it or leaves it about where it was (it plants no leader), while the inject-lead drill raises it. In Backtest, until the 51-market network has at least 12 shared days (crypto history starts 2023-09-21, so before about 2023-10-09), the ratio reads n/a and the footer says there is too little shared history at that date.

Critical Honesty Note

Lead-lag is association, not causation. Most surviving leads peak at 1 day (≈contemporaneous), reflecting information diffusion and microstructure, not causal transmission. With the Scenario sandbox you can inject a synthetic lead to watch the network respond (in Live, or in Backtest from about 2023-10-09 on; before that the 51-market network has fewer than the 12 shared days it needs (crypto history starts 2023-09-21), so its panels say "not enough shared history at this date"; the drills still change coupling, absorption, turbulence and Hawkes, which use the 48 non-crypto markets, and the DRILL — SYNTHETIC markers stay on)—but real lead-lag tendencies are fleeting and don't generalize out-of-sample. The network is a snapshot of dependence structure, not a transmission mechanism.

Display

  • Network diagram: nodes ordered from the strongest transmitter (left) to the strongest receiver (right), sized by |NET|, filled red/blue by sign and ringed in their factor-basket colour. Hover over a node (or tap it on a phone, or Tab to it and press Enter) to see its official name, a plain-English description, its basket and its role; the tooltip's Show its indicators button selects it in Indicator detail. Esc or a tap elsewhere closes it. The asymmetry matrix's abbreviated labels show the same definitions on hover or tap. Edges = the 12 largest positive asymmetries; solid edges carry the lag (1–8 days) at which that pair's lagged correlation peaks. A "DRILL — SYNTHETIC" badge appears while a drill is active. On phones the diagram scrolls sideways inside its card.
  • Heat matrix: rows = source i, cols = target j. Red (i→j) = i leads; blue = j leads i. Intensity = strength of the z-transformed correlation asymmetry.
  • Net bars: sorted by NET, showing TO (total outflows) and FROM (total inflows) per asset.
  • Too little shared history (Backtest before about 2023-10-09): the diagram and the heat matrix are replaced by "not enough shared history at this date", the net table is left empty rather than filled with zeros (all-zero NET scores would look like "no leader"), and the footer reads "directedness: n/a".

Asymmetry matrix & net transmitter / receiver

Read it: The N×N heatmap (rows = source, columns = target) shows which asset leads which. The bar chart to the right ranks all assets by net directedness: red extends right (transmits), blue extends left (receives).
Does NOT mean: The values are correlation-based associations, not causal drivers. A red SPY→LQD link does not mean stock strength causes bond weakness; it means their lagged returns moved together in that direction during the window — and only links drawn solid on the network diagram passed the circular-shift gate; matrix cells are not gated.

The left panel shows the directed asymmetry matrix A(i→j) = D(i→j) − D(j→i), where D(i→j) is the average absolute (Fisher-z) lagged cross-correlation of i leading j over lags 1–4.

Matrix interpretation:

  • Red cells (positive A) indicate i→j: asset i leads asset j.
  • Blue cells (negative A) indicate j→i: asset j leads asset i.
  • Near-white cells indicate pure co-movement with no directional winner (both lead/lag symmetrically).

The matrix is anti-symmetric: if A(SPY→LQD) is red, then A(LQD→SPY) is equally blue. Row and column labels use the ticker (FX pairs by their quote currency, e.g. JPY).

Right panel — net directional spillover: A table ranks assets by their NET score (sum of all outgoing leads minus all incoming lags), with a centred bar:

  • Right/red bars: Pure sources and hubs that lead more than they lag.
  • Left/blue bars: Pure sinks and relays that lag more than they lead.
  • TO[i] = total outgoing lead-lag contribution (i leads others).
  • FROM[i] = total incoming lead-lag contribution (others lead i).

Which markets transmit and which receive changes with the window, so there is no stable "typical" pattern to memorise. On the embedded snapshot (markets as of 2026-10-20), NVDA, international corporate bonds (IBND) and SOL are the largest net transmitters, and the strongest receivers are the FX pairs (USD vs AUD, EUR and CHF).

Cascade simulation — shock propagation

Read it: Pick a market to shock and a minimum link strength; the panel propagates the shock downstream along the directed spillover network and reports how many markets it reaches, in how many waves, and which fall in each wave. It also reports the percolation threshold — the strongest link-strength cut at which a shock from the chosen market still reaches at least half of all markets.
Does NOT mean: NOT a forecast and NOT a claim that shocking X will hit Y. The network is estimated from noisy returns, it rewires in a crisis, and lead-lag is association arbitraged toward lag 0. This is a descriptive what-if drill on the current inferred structure.

This is your St. Pete water‑cascade mechanic — directed downstream propagation — brought to the market network as a directed‑reachability (percolation) cascade, the same family of model used for epidemics, power‑grid blackouts, and bank runs. A shock at the source flows to any market reachable via directed lead‑lag links of at least the chosen strength; each wave is one hop further out. Raising the trigger keeps only the strongest links (the cascade localises); lowering it lets weaker links carry the shock system‑wide. The behaviour is genuinely source‑dependent and moves with the window: on the embedded snapshot at the default 40% cut, a shock at the biggest outflow hubs (NVDA, SOL) reaches 18–19 of 51 markets in two or three waves, a shock at the S&P reaches only 3 in a single wave, and a shock at a peripheral market like agriculture (CORN) reaches no other market. The percolation line is the tipping point at which one shock spans ≥50% of the system — the cascade‑analysis read on systemic fragility. It is descriptive: it shows how the currently inferred structure would carry a shock, not whether one is coming.

Settings. Link strength is measured relative to the strongest asymmetry in the network: at the default 40% (slider 15–65%) only links with A(i→j) at least 40% of the largest A are used. Every positive asymmetry above the cut counts — the cascade does not apply the network's permutation gate. The source selector is grouped by factor basket and starts on the anticipation transmitter. The percolation line scans cuts from 90% down to 5% in 5-point steps and reports the highest one at which the chosen source still reaches ≥50% of markets (or "never spans ≥50%"). In Backtest, until the network has at least 12 shared days (about 2023-10-09; crypto history starts 2023-09-21), the panel says "not enough shared history at this date" instead of simulating.

Network structure — hubs, choke points & amplification

Read it: Three structural reads of the directed spillover network: where outflow concentrates (preferential-attachment hubs), which market is the bottleneck whose removal most fragments how a shock spreads (choke point), and how far a typical shock travels (amplifier vs suppressor).
Does NOT mean: NOT a forecast. The network is estimated and rewires; these are descriptive structure of the current inference. The choke point is not a "weak link that will break" — it is where the current inferred topology happens to bottleneck.

This panel is the honest residue of two more cross-domain analogies — metabolic pathways and evolutionary/social graph theory. Preferential attachment (the rich-get-richer power law seen in wealth and in how well-connected mutant genes take over a structured population) shows up as spillover concentration: a Gini and top-3 share of out-strength, and the hub list. Choke points are the metabolic-pathway idea of bottleneck reactions: the market whose removal most fragments shock propagation — which is genuinely distinct from the loudest transmitter (on the embedded snapshot, the top transmitter is NVDA while the top choke points are Canada (EWC) and EM local-currency sovereign debt (EMLC)). Amplification is evolutionary graph theory's amplifier-vs-suppressor distinction: how far a single shock reaches on average. What deliberately did not make it: flux-balance analysis (the predictive core of metabolic modelling) needs a conserved, stoichiometric quantity — markets have none (their #2 missing ingredient); and fixation-probability / evolutionary-dynamics models need an observable population of agents or strategies, which price data does not contain. Importing either would manufacture prediction the substrate can't support — so only the descriptive network structure transfers.

How it is computed. A market's out-strength is the sum of its positive asymmetries; the panel shows the top-3 share of all outflow, the Gini of out-strength and the five biggest hubs. Choke points: each of the 12 strongest hubs is removed in turn and the console measures how much total shock reach falls; the top four are listed. Amplification is the average share of markets a single shock reaches (≥40% = amplifier, ≥20% = mild amplifier, otherwise suppressor). Both use a fixed 40% link-strength cut, independent of the cascade slider. In Backtest, until the network has at least 12 shared days (about 2023-10-09; crypto history starts 2023-09-21), the panel says "not enough shared history at this date" instead of printing a Gini, hubs or a reach (an empty network would only give meaningless numbers).

Systemic coupling — spectral radius ρ̂ & absorption ratio

Read it: The 'Systemic coupling' panel shows two sparklines and current values: ρ̂ (spectral radius) and AR (absorption ratio). Both are plotted over time since 2016; the caveats explain they rise DURING crises (2020 and 2022 in the sparklines; 2008 in the wider literature), not before.
Does NOT mean: These are NOT early-warning signals of a crash. They are 'thermometer' readings of how unified the market currently is, analogous to critical-slowing-down in physics, but the analogy breaks in markets because the topology is estimated post-hoc, not fixed as in water systems.

These two metrics measure how tightly the whole cross-asset system is moving as a single unified entity. Both are coincident-to-lagging indicators: they spike during stress, not before.

Spectral radius ρ̂: The dominant eigenvalue (λ_max) of the rolling cross-asset correlation matrix, divided by the number of assets. Think of it as a proxy for how many independent modes of variation remain in the system. High ρ̂ (closer to 1) means the assets are "mode-collapsing" — correlations rising, individual shock absorption falling.

  • Formula: ρ̂ = λ_max / N (where N is the asset count).
  • This is an analogy to the VAR spectral radius ρ(Φ) from your seismic/hydraulic work, not a fitted dynamical operator.
  • The basis is the 48 non-crypto names (US and international equities, sectors, rates, credit, commodities, the dollar, FX and VIX); crypto is excluded so the history reaches back to 2016.
  • Current values use the last 252 trading days all 48 share; the sparklines are rolling 60-day windows stepped every 7 days across the whole history.

Absorption ratio (AR): The fraction of total variance explained by the top k eigenmodes, with k = N/5 = 10 for the 48 names. High AR = little local shock absorption; most of the move is concentrated in the leading modes. Kritzman-Li (2011) framed this as a fragility measure, but it too rises during crises, not before. The standardized AR-shift δ compares the mean of the three latest rolling AR values with the mean and spread of all earlier ones (a weak regime flag only). The panel also lists the eight largest loadings on the dominant mode — what drives the common factor. Cards that rank today's absorption against its own history (the crash badge, the diversification card and the perspectives) use a separate rolling history of the same 252-day measure, sampled on a fixed grid every 21 trading days from the start of the history, plus the current window, not the 60-day sparkline: the shorter windows read about 3 points higher on average, from sampling noise.

Why they are not leading indicators: Both metrics are fixed-topology readouts of realized correlation. When liquidity evaporates or systematic factors dominate (as in March 2020 or September 2022), all correlations spike simultaneously — the topology doesn't exist until after the move. The console's transparency: "ρ̂ is an analogy to the water system's fixed topology — except here the topology is estimated and rewires in a crisis."

What they tell you: High ρ̂/AR indicates the current market is moving in lock-step (regime of tight coupling), not that a break is imminent. A persistent high reading can last months or years with nothing happening; declines also start from low readings (base-rate honesty).

Factor baskets — what actually moves together

Read it: Hierarchical (average-linkage) clustering of the return-correlation matrix groups the 48 non-crypto names into a handful of empirical factors that actually drive them — the "actual baskets," not the nominal nine asset-class labels. It reports the participation ratio (effective number of independent factors), and the directed-network nodes are ringed in each basket's color.
Does NOT mean: Assets in one basket are NOT independent bets. Spreading money across names inside the same basket barely diversifies. The clustering is descriptive of co-movement, not a claim about causation or the future.

This panel answers "how much of my breadth is real?" Directly: the 48 non-crypto names collapse to about 4.8 effective independent factors (participation ratio = trace²/‖C‖²). The biggest basket — roughly two-thirds of the assets (33 of 48) — is a single global equity beta cluster: US large-cap, sectors, developed and emerging international, high-yield/EM credit and even broad commodities and crude oil (DBC, USO) all move as one risk-on factor. The clustering is genuinely informative where the labels mislead: it splits "credit" by behavior — high-yield and EM debt land in the equity-beta basket, while investment-grade and government bonds plus gold form a separate duration / safe-haven basket. The dollar/FX names form a third basket; volatility (VIX), cash (SHV) and agriculture (CORN) each sit alone. This is the empirical backbone of the "more assets, not more information" finding, shown as structure rather than asserted.

How it is computed. Correlations use every day all 48 names share; distance = 1 − ρ; clusters are merged by average linkage until exactly six remain (the number of baskets is fixed at six, not discovered), and the card shows each basket's size and average internal correlation. Crypto is not clustered; it is added as a seventh, display-only "Crypto" group. The baskets are computed once when the page loads.

The baskets drive the whole interface. The asset selector is grouped into these baskets (not the nominal classes), the fragility thermometer sorts and headers by basket with a basket-color dot on each row, and the directed-network nodes are ringed in their basket color — so wherever you look, assets are organized by what actually moves together. (The underlying class field is retained only for mechanics like base-rate eligibility, the crypto exclusion and FX labelling.)

Game-theoretic lens — beauty contest & coordination risk

Read it: Two things. First, the strategic reason short-term direction can't be forecast (Keynes' beauty contest / higher-order beliefs). Second, a coordination/run-vulnerability gauge built from existing readings — strategic complementarity (coupling), crowding (share of markets already stretched), and whether the system's leader (focal point) is stable.
Does NOT mean: NOT a prediction that a run or crash will occur. The run-vulnerability gauge is a global-games framing that reads conditions off the cross-asset state — it never claims a coordinated move is imminent.

This makes the game theory that was implicit in the console explicit. Why direction is a guessing game: a price is the market's average guess about everyone else's average guess (Keynes' beauty contest); acting on a public signal moves the very price you are predicting (reflexivity); and any stable edge is competed toward zero. That higher-order-belief loop is the game-theoretic reason short-term direction is a martingale — the console's whole thesis, restated in game theory. Coordination / run-vulnerability: a crisis is a coordination failure (a run, a stampede, a currency attack). Global-games theory (Morris–Shin) says such failures get likelier when actions strongly reinforce each other (high complementarity ≈ high coupling), many players already sit near their tipping point (crowding), and the focal point is shifting (an unstable system leader). The gauge blends those three into a descriptive vulnerability read — context for the regime, not a timing signal.

The blend: 0–100 = 50% × coupling percentile + 30% × share of markets with fragility ≥60 + 20% if the anticipation transmitter is unstable across bootstrap resamples. Below 40 reads low, 40–65 moderate, 66 and above elevated.

Resting bid vs ask size — live book microstructure

Read it: Diagnostic tab, live mode only. For BTC, ETH and SOL: a centred bar showing whether more resting size sits on the bid or on the ask of the Binance.US order book (top 20 levels), refreshed every 5 seconds, plus BTC's top-of-book spread in basis points.
Does NOT mean: NOT a buy or sell call and NOT a short-term forecast. Any move a skewed book anticipates is smaller than the spread and gone in seconds — not directional alpha, and not tradable through a browser. A skewed book is liquidity resting there right now.

Imbalance = (bid size − ask size) / (bid size + ask size) over the top 20 price levels, shown on a ±100 scale ("balanced" within ±5, otherwise bid- or ask-skewed). It is a snapshot ratio, not a strength-of-signal score, and the console deliberately keeps no history of it — a trend line would read as momentum. Crypto only, because it is the only free live order book.

In Backtest mode the card explains that there is no historical book to replay. If the exchange cannot be reached, the rows say "connecting…"; this endpoint is not listed in Data health.

Financial turbulence (Mahalanobis)

Read it: Read the turbulence value and its χ² percentile, then the list of today's biggest contributors. Treat the percentile as ordinal (fat tails make it optimistic). The shrinkage slider changes how much the covariance is pulled toward a scaled identity (equal variances, zero correlations).
Does NOT mean: Not a forecast of volatility or crashes. Not a threshold-crossing predictor—high turbulence can persist for days with no event, or spike on a single outlier. Not independent of spectral radius; both are multivariate stress measures that correlate during crises but neither causes the other. χ² tails are understated in financial returns.

Core Measure

The Mahalanobis distance of today's one-day cross-asset return vector (the 48 non-crypto names) from the mean of the last 252 shared trading days, scaled by that window's covariance. A multivariate extension of the per-asset surprise lens, capturing how far the system sits from its typical state in metric-adjusted space.

Calculation

  • Estimate mean μ and covariance Σ from the last 252 trading days all 48 names share (at least 3 × 48 = 144 are needed).
  • Shrink: Σα = (1−α)Σ + α·(tr Σ / N)·I — a fixed linear shrinkage toward equal variances and zero correlation (not Ledoit-Wolf's estimated intensity). α is the slider (0–0.8, default 0.20); if the matrix still cannot be inverted, the console raises α to at least 0.5 and says so.
  • Compute d = (x − μ)ᵀ Σα⁻¹ (x − μ) for today's one-day return vector x (and for every day in the window, for the sparkline).
  • Map today's d to a χ² CDF percentile using N = 48 degrees of freedom.
  • The sparkline is the 20-day rolling average of d across the window.

Interpretation

Higher turbulence = larger deviation from the system's covariance-weighted center. Rising turbulence during 2020 and 2022 crises is well-documented; it is a coincident-to-slightly-lagging read on regime stress, not a leading signal.

The drivers list shows each asset's contribution to today's Mahalanobis distance: xᵢ × (Σ⁻¹ x)ᵢ, ranked by size (top eight) — the assets pushing the system away from its center.

Caveat: Fat Tails & χ² Optimism

χ² percentiles are optimistic in financial fat tails—the true tail probability is worse. Treat the percentile as ordinal (higher = worse), not as a precise exceedance probability. During high turbulence, the true risk is underestimated.

Display

A line reading "Turbulence d (today) · χ²(48) percentile", the 20-day-smoothed sparkline, then today's top eight contributors. In Backtest everything is computed as of the cursor date.

Structural geography — market-state manifold (diffusion map)

Read it: Each dot is a 10-day cross-asset state; ψ₁ (left→right) is the stress axis. Find the ● now marker and the ◌ closest analog. A resemblance in geometry says nothing about what follows.
Does NOT mean: Not a predictor of next-regime transitions. Not a ranking of crisis severity—the manifold is a state portrait, not a potential-energy landscape. Nearest neighbors in the 10-day state space share historical return patterns, but financial systems do not repeat exactly. The manifold changes as new data arrive; past orbits are not predictive of future ones.

What It Shows

A nonlinear generalization of the coupling panel: every dot is a 10-day cross-asset state (the average standardized return of each macro name over 10 days), placed by a diffusion map so geometrically similar regimes sit together. Calm states cluster tightly; crises (2020, 2022) form a stressed arm. Current position and its nearest historical analog are highlighted.

Diffusion Map Construction

  • Daily returns of the 48 non-crypto names over all shared history, each z-scored over the full sample.
  • About 400 sampled days (428 on the embedded snapshot). Each state is the 48-number vector of mean z-returns over the previous 10 days; its "stress" is the average absolute z across those 10 days and 48 names.
  • A dense Gaussian kernel exp(−‖xᵢ − xⱼ‖² / ε) over all pairs of states, with ε = the median squared distance (no nearest-neighbour graph).
  • Symmetric degree normalisation, then the top three eigenvectors; ψ₁ and ψ₂ are the second and third (the first is trivial), scaled by their eigenvalues, with ψ₁'s sign set so that higher = more stress.
  • Dots are coloured by their stress relative to the most stressed state (green calm → amber → red stressed arm).

Interpretation

Proximity = geometric resemblance in the realized cross-asset state. Where today sits—and which past state it most resembles—is a coincident read on the regime, never a forecast. The manifold structure is a nonlinear generalization of PCA/spectral structure, showing how the system inhabits its state space.

Honest Caveat

⚠ COINCIDENT STATE GEOMETRY, NOT A FORECAST. A "closest analog" is a geometric resemblance—it does not imply the same outcome follows. Historical recurrence is rare in financial systems; initial conditions drift, and regimes change. The manifold is a coincident snapshot of structure, useful for regime classification, not for predicting the next move.

Backtest caveat: the map is built from the full history, and the analog search can pick a date after the cursor — so in Backtest this panel (and the briefing's analog sentence) has look-ahead.

Display

A static scatter in the first two diffusion coordinates (no hover or tooltips; on phones it scrolls sideways). ● marks the state nearest today (or the cursor); the dashed ◌ ring marks the closest analog — the state whose raw 10-day, 48-market vector is nearest by Euclidean distance, excluding states within 60 days of now. Below: ψ₁ as a percentile of all states, the analog's date, and the mode-dominance gap (λ₁−λ₂)/N from the coupling panel.

Perspectives — documented frameworks as lenses

Read it: The default Aggregate view synthesises ten frameworks on the current strain at once — where they converge, where they split — and you can toggle any single lens (Burry, Stevenson, Soros, Templeton, Livermore, Bogle, Minsky, Mandelbrot, Thorp, Dalio). Each is really a documented stance (contrarian↔trend, value↔momentum, risk-on↔risk-off, micro↔macro, instability, fat-tails, factor-balance, sizing-discipline) wrapped in a memorable name, and reads the live numbers through it, auto-updating with the data. The four newer lenses were chosen to cover the axes the expanded console now measures: Minsky (stability-breeds-instability — coupling + calm credit + cascade amplification), Mandelbrot (fat tails — turbulence + Hawkes clustering; every Gaussian number understates the tail), Thorp (the systematic thesis itself — no edge in direction, the math is in sizing; reads the vol lab + meta layer + Deflated-Sharpe/PBO), and Dalio (risk parity — the factor panel: many names, few real factors). An LLM is deliberately not used to generate these: it would invent fluent but fabricated quotes and reasoning, with no verifier to catch it — the deterministic, quote-free version is the more honest engine.
Does NOT mean: These are not their words, endorsements, predictions, or advice. None of the ten has any connection to this console. Lenses map at the level of posture only.

The Aggregate view shows the same strain word as the briefing, a one-line summary (coupling percentile, turbulence, how many markets are stretched, the anticipation transmitter, and three backdrop numbers), one line per framework, and a convergence verdict: converge on caution when at least three of {coupling ≥65th percentile, turbulence ≥60, ≥25% of markets stretched, absorption at or above the 80th percentile of the rolling history of the same 252-day measure} hold, mixed when one or two do, benign when none do. Absorption is judged against its own history because its raw top-10-mode share has stayed between about 76% and 91% on these 48 names, so a fixed cut-off would always count. The verdict and the closing bottom line describe where the frameworks agree — discipline, rules written down in advance and respect for costs, not price direction — and state that by the console's rule none of it is a cue to cut size, add hedges or trade. When the system is at a fear extreme (turbulence ≥85 or VIX at or above its 85th percentile) it adds that the lenses split — contrarian versus trend — a tension the data cannot resolve for you.

Each single lens writes a few sentences from the current numbers. The Burry lens watches for surface calm sitting on top of crowding (low VIX over high coupling, or absorption in the top 20% of its own 252-day history; the sentence says which of the two holds), real-asset texture (gold), and the most-stretched name — carrying his hard-won "right but early" discipline, which is exactly why a loaded reading is never a countdown. The Stevenson lens reads the rates / gold / credit macro backdrop and the asset-strength-amid-stress pattern his inequality thesis points to; it counts credit as stressed only when high yield is actually falling and lagging investment grade, or the high-yield spread is above 4.5% (the Forward-macro "stress building" line), and it names whichever stress signals fired. Soros reads reflexivity (a one-mode tape, a shifting leader, and why any thin edge is perishable); Templeton describes the contrarian stance at system-level fear extremes — a stance, not a signal, with no valuation to say what is cheap; Livermore describes how tightly stress spills over and which market transmits it (a full-history volatility-connectedness estimate, not a price trend: this lens reads no trend, and the Factor companion's 12-minus-1-month trend count on the Predictive tab is a separate descriptive reading, never an entry trigger), and his rules-written-in-advance sizing discipline, without applying it to today's VIX; Bogle sends you to the Alpha Lab's net-of-cost line; Minsky, Mandelbrot, Thorp and Dalio read the axes listed above. Minsky quotes the network's shock reach only when the lead-lag network passes the same chance test as the briefing (more directed pairs pass its significance test than the ~5% chance alone gives, with a 20% margin); otherwise it says the reach describes noise. It reads a wide reach as a build-up only when its calm-over-coupling tell also fires, and when the network has too little shared history it says so instead of quoting a reach; Thorp reads the meta layer's low-vol / mid-vol / high-vol terciles as forecast reliability, not an input to exposure; Dalio's factor count is averaged over the whole shared history of the 48 non-crypto names, not today's structure. No lens tells you to size, hedge or demand more cushion: each describes what that framework's stance would say about the current numbers — explicitly not a recommendation — and the only thing on this console that touches size is the down-only comfort band you type on the Risk tab.

Every sentence is generated from the current data (most of it follows the Backtest cursor). The only full verbatim quote shown is a documented one (Burry, 2019), clearly attributed. The other words in quotation marks are short attributed catch-phrases: Graham's "Mr. Market" and Buffett's "fearful when others are greedy" in the closing note under every single lens, and Templeton's "maximum pessimism" when stress is at an extreme. Everything else is "in the spirit of" the thinker's public thesis. Each lens carries its own honesty caveat — e.g. Burry's right-but-early, Stevenson's that the dashboard cannot prove a causal mechanism. A closing note says the value/growth legends (Graham, Buffett and others) are not on this console, because valuation and business quality are not what it measures; it keeps only their temperament echo (crowd fear), never a value verdict.

Structural backdrop — distribution & real economy

Read it: The wealth-distribution and real-economy data Stevenson's thesis actually rests on — top-1% vs bottom-50% wealth shares, real median income, the Gini index, the saving rate, home prices, labor share, and the policy rate — from the U.S. Federal Reserve / FRED.
Does NOT mean: A trading signal, and not proof of cause. These series are quarterly/annual and lagged, US-centric, and document the distribution without showing it drives asset prices.

This panel closes the honest gap in the Stevenson lens: the distributional data is now on the board. Each row shows the latest (or as-of-cursor) value, a long-history sparkline, and the approximate 10-year change — in percentage points for the series quoted in percent (the wealth shares, the saving rate and the Fed funds rate), and as a percent change for everything else, including labor share, which is a BLS index (2017 = 100) rather than a percentage, so its change is a relative move in the index, not percentage points. It is a slow structural backdrop — it moves quarterly or annually, not daily — so it is context for the regime, never a same-day signal. It is descriptive: it shows what the distribution is, not that the distribution causes the market readings in the rest of the console.

The data is an automatically updated FRED snapshot retrieved 25 October 2026 (wealth shares through 2026 Q2; median income through 2025; Gini through 2024).

Fragility thermometer

Read it: One row per market: a 0–100 score with three mini-bars for its channels (persistence · amplitude · tail). Rows are grouped by factor basket by default; click "sort: basket ▾" to sort by score instead, and click a row to load that market into Indicator detail.
Does NOT mean: A high score is NOT a crash-prediction tool. It describes how fast the asset's stress signature has been changing over the last 60 days relative to its own history — moves getting larger, mean-reversion weakening, tails getting heavier: a trend, not a level. The console explicitly warns: 'DESCRIPTIVE, NOT PREDICTIVE… A resilience thermometer, not a crash detector… [it] can persist for months or years with nothing happening.'

The console's headline score: a composite 0–100 reading per asset, built from seven indicators grouped into three channels. They are not independent; they overlap significantly, especially the persistence measures.

How the score is built

  1. Seven indicators on a rolling 252-day window of daily log returns: lag-1 autocorrelation and the recovery rate λ = −ln φ (both on EWMA-volatility-standardized residuals), DFA / Hurst α (recomputed every 3 days), annualized realized volatility, the bimodality coefficient, skewness and excess kurtosis (see Indicator detail).
  2. Direction-adjust so that higher = more fragile (λ and skewness are sign-flipped).
  3. Trend, not level: take each indicator's 60-day OLS slope and turn it into an expanding z-score against that asset's own history of slopes.
  4. Three channels: persistence = mean of the AC1, λ and DFA z-scores; amplitude = mean of realized vol and bimodality; tail = mean of skewness and kurtosis.
  5. Composite = mean of the three channels, turned into an expanding z-score again and mapped to 0–100 with the normal CDF. The mini-bars are the three channels on the same 0–100 scale.

Score interpretation: A high reading (e.g., 70/100) means that asset's stress indicators — persistence, amplitude, tail — have been rising over the last 60 days more steeply than is usual for that asset. It is a descriptive summary of how the asset's own behaviour is changing, not a forecast. An asset that is already very volatile but no longer getting more so can score low.

Display: a basket-colour dot, the score bar (green below 40, light green 40–59, amber 60–84, red 85+), the value, and the three mini-bars. A score needs about a year of history (252 days) before it exists and a further 60 days before its trend term means anything, so crypto (history from September 2023) has a shorter record.

Behavior in the wild: High fragility readings can persist for months or years with nothing happening. Declines also routinely start from low readings, so a low score does not guarantee stability. The console is explicit: "A high reading can persist for months or years with nothing happening, and declines also start from low readings."

Honest caveats per channel:

  • Persistence (AC1, λ, DFA): AC1 is the weakest channel in markets; λ carries the same information as AC1; DFA needs long windows and lags the regime shift.
  • Amplitude (realized vol, bimodality): mostly restates known volatility clustering (GARCH); often coincident, not leading; apparent flickering has a high false-positive rate.
  • Tail (skewness, kurtosis): one extreme day flips or dominates the estimators; very noisy.

Why the critical-slowing-down analogy breaks: Physics systems (lasers, neurons) show genuine early warning via reduced variance and coherence before a bifurcation. Markets invert this: price is the expectation; there's no hidden state to telemeter. Correlations are estimated and rewire instantly on news, so no fixed topology exists until after the move. The console is unsparing: "The critical-slowing-down framing is an analogy from physics (these signals were largely absent before historical meltdowns); the volatility channel mostly restates GARCH."

Indicator detail — the seven indicators behind the score

Read it: Pick an asset in Detail asset (header) or click its row in the Fragility thermometer. Each of the seven indicators shows a 0–100 reading of its 60-day trend, an arrow (▲ red = trending toward more fragile, ▼ green = the other way), a sparkline of its level over the last ~120 days, the direction that counts as more fragile, and its honest failure mode. Read the three groups (persistence · amplitude · tail) together — they are not independent votes.
Does NOT mean: Not a 7-indicator voting system. Persistence overlaps across AC1/λ/DFA. Amplitude is driven by GARCH. Tail is one-event-sensitive. No weighting by predictive power—they are ensemble members, not independent classifiers.

Each fragility score rests on seven indicators. They are not independent votes—persistence indicators especially overlap. Only the two autocorrelation indicators (AC1 and λ) are computed on EWMA(0.94) volatility-standardized residuals; the others use raw daily log returns. Display order: AC1, recovery rate, realized vol, bimodality, skewness, excess kurtosis, DFA.

Persistence (3 indicators, averaged)

  • Lag-1 autocorrelation (CSD) — vol-standardized to avoid measuring GARCH. Rising = slower recovery from shocks. Weakest channel in markets; hard to move the needle.
  • Recovery rate λ = −ln φ (φ = AR(1) parameter) — same information as AC1, repackaged. Falling λ = slower return to equilibrium. A sibling, not an independent vote.
  • DFA / Hurst α — rising toward 1 = more persistence / less mean-reversion. Needs long windows (252-day rolling, computed every 3 days); descriptive, often lags the regime shift by weeks.

Amplitude (2 indicators, averaged)

  • Realized volatility (annualized) — rising = larger fluctuations / higher stress. Mostly restates known volatility clustering (GARCH); often coincident, not leading. Computed as √(252 × variance of the 252-day window's daily returns).
  • Bimodality / flickering — rising = switching between calm and stressed states. Vol clustering alone produces apparent switching; high false-positive rate. Computed from skewness, kurtosis, and sample size.

Tail (2 indicators, averaged)

  • Skewness — more negative = asymmetry toward big drops. Returns are always left-skewed; one bad day flips the sign. Estimator is noisy.
  • Excess kurtosis — rising = fatter tails. Estimator dominated by 1–2 extreme days; very noisy. High variance, little signal between regimes in practice.

Honesty Panel

Each indicator displays a small caveat in the console (verbatim):

  • AC1: weakest channel in markets; vol-standardized to avoid measuring GARCH.
  • Recovery rate: same information as AC1 (φ) — a sibling, not an independent vote.
  • DFA: needs long windows; descriptive, lags the regime.
  • Realized vol: mostly restates known volatility clustering (GARCH); often coincident not leading.
  • Bimodality: vol clustering alone produces apparent switching; high false-positive rate.
  • Skewness: returns are always left-skew; one bad day flips it.
  • Kurtosis: estimator dominated by 1–2 extreme days; very noisy.

GARCH surrogate check. In Backtest mode the base-rate card can compare against a GARCH surrogate: a 1,400-day synthetic GARCH(1,1) series with volatility clustering but no built-in transition, run through the same fragility pipeline. The console reports the share of surrogate days with fragility ≥70 and asks whether it is near zero; if it is not, the index is largely reacting to vol clustering, not a unique stress regime. The surrogate is deterministic, and on the current build it scores ≥70 on roughly a third of its days — so read every fragility reading with that in mind.

Surprise lens (active-inference analogue)

Read it: One row per market: a ~120-day sparkline of its 20-day-smoothed surprise, then a 0–100 number for how surprising its last ~20 days of moves were to a simple causal AR(1)+EWMA-volatility model, relative to its own history. High = recent moves keep beating that simple model's expectations — a coincident read, not a warning.
Does NOT mean: Not a leading indicator. Not volatility or variance—it is a residual innovation metric conditioned on a 60-day local model. Not a forecast of returns or crashes. Not independent of fragility—both rise during stress, but neither causes the other.

Core Concept

One-step negative log-likelihood (NLL) from a simple AR(1) + EWMA model. Analogue of variational free energy from active inference: higher surprise = larger deviation from the asset's local predictive model. Reported as a 0–100 reading: today's 20-day-smoothed NLL standardized against the mean and spread of all earlier smoothed values for that asset, mapped through the normal CDF.

Calculation

For each day t ≥ 1:

  • Fit the AR(1) coefficient φ on a rolling 60-day window ending at t−1.
  • Predict next day: μ = φ × r[t−1].
  • Compute NLL: 0.5 × ((r[t] − μ) / σ)² + log(σ), where σ = √v and v is a running EWMA variance (started from the first 60 returns).
  • Update variance via EWMA: v ← 0.94 × v + 0.06 × (r[t] − μ)².
  • Smooth with 20-day rolling average.
  • Convert to a 0–100 reading using the mean and std of the smoothed series up to that day (walk-forward).

Interpretation

High surprise (70–100) = asset behavior deviates far from its own simple local predictive model. Not a forecast signal, but a coincident read on how much the asset is surprising itself. During stress (2020, 2022), surprise tends to rise, along with vol and fragility.

Why "Active Inference"?

In active inference, the system minimizes surprise (prediction error) to maintain a generative model. Here, we invert it: surprise measures how much the asset's local model is failing. Rising surprise = environment is drifting away from the model, not that a crash is imminent.

Shock clustering — Hawkes self-excitation

Read it: Read the system branching ratio n (0 = shocks isolated, → 1 = each shock triggers about one more) and the shock half-life, then the per-asset list. High n means aftershocks are under way now — not that a new shock is coming.
Does NOT mean: Not a predictor of the next shock. Not a measure of systemic importance or contagion. High branching ratio = feedback loops are active, not that a crash is coming. n is very noisy with few events; a single bad day changes the fit significantly. Not independent of turbulence or fragility—all three rise together during crises, but none causes the others.

Core Concept

Do large moves beget more large moves? Fits a self-exciting point process to large return shocks (≥2.5σ magnitude, measured against each asset's EWMA volatility). The branching ratio n is how self-reinforcing the clustering is: n ≈ 0.3 means shocks decay; n ≈ 0.9 means critical (on the brink of runaway); n = 1 is unstable.

Calculation

  • For each of the 51 assets, standardize daily returns by an EWMA volatility (λ = 0.94) and mark days with |z| above 2.5 as shocks.
  • Pool all assets' shocks into one daily count over the 751 calendar days ending at the newest data day of any series (2026-10-21 on the embedded snapshot, a day past the 2026-10-20 markets as-of date; after a live refresh, the newest refreshed day), or ending at the cursor in Backtest. Weekends, and days on which a series has no data, count as zero-shock days.
  • Fit Hawkes process: λ(t) = μ + α Σ exp(−β(t − tᵢ)), where μ = background rate, α = jump size, β = decay rate — in discrete daily time, by maximizing a Poisson log-likelihood.
  • Grid search over (μ, α, β) — 6 × 6 × 5 values — then four rounds of local refinement.
  • Compute branching ratio: n = α exp(−β) / (1 − exp(−β)). This is the expected number of children per event in a Galton-Watson branching process.
  • Also report half-life: how fast aftershocks decay (log(2) / β, in calendar days).
  • Repeat the fit per asset for every asset with at least 8 shocks in the window.

Interpretation

CONTEMPORANEOUS: high n = shocks CURRENTLY clustering (aftershocks underway), NOT a coming exogenous mainshock. Rising branching ratio during stress (2022) means the cascade is self-sustaining. However, a high n does not forecast the next shock's magnitude or timing—only that if a shock occurs, more are likely to follow quickly. It is the temporal twin of ρ(Φ) → 1 (cf. the induced-seismicity pilot).

Caveats

  • Least-stable panel: single exponential kernel, daily bins, often few jump events per asset (per-asset fits need ≥8). Confidence in n is low.
  • Threshold-dependent: moving 2.5σ to 3.0σ or 2.0σ (the console fixes it at 2.5) changes the count and fit.
  • Temporal resolution: daily bins may miss intra-day clustering and aftershock sequences that resolve in hours.

Display

The system branching ratio n with a 0–100 bar (clipped at 1.0) and a sparkline of the fitted intensity, the shock half-life, the total shock count, then bars for the eight assets with the highest per-asset n. A message appears if there are too few shocks (five or fewer in total) to fit a reliable process.

Scenario sandbox (drills)

Read it: See 'Scenario sandbox (drill)' section with a dropdown menu. Select an injection, observe how panels change (especially the directed network), then click Reset.
Does NOT mean: These are teaching exercises, never investment signals. They show how the console responds to synthetic patterns.

Purpose

Clearly labeled a DRILL: Inject synthetic structures to see how the directed network and other panels respond. Never live data. Works in both Live and Backtest mode, with two limits: the network drills (inject lead, common shock) act only where the 51-market network has at least 12 shared days — in Backtest, from about 2023-10-09 on (crypto history starts 2023-09-21) — and the volatility spike acts only on the last 15 returns of the series (see below). A "DRILL — SYNTHETIC" badge appears on the network card while a drill is active.

Available Drills

  • Inject lead: Make the 1st asset (SPY) a transmitter — on each day SPY traded, every other market's return becomes 40% its own plus 60% of SPY's previous-session return (matched by date, because series end on different days and follow different calendars: crypto trades 7 days a week, FX and VIX keep other holidays; days with no SPY session are left unchanged). Tests how the network highlights a planted transmitter: directedness should rise and SPY should move toward the top.
  • Common shock: On each day SPY traded, every other market's return becomes 40% its own plus 60% of SPY's return on that same date (days with no SPY session are left unchanged) — a contemporaneous common factor with no leader. It adds co-movement but no lag structure, so directedness falls or stays about where it was and no leader is planted: simultaneous moves blur the leader-follower picture rather than sharpen it.
  • Volatility spike: The detail asset's last 15 daily returns in the series (the most recent trading days, not the 15 before the Backtest cursor) are multiplied by 3.2. In Backtest it only has an effect when the cursor is within about the last 15 trading days of that series; at an earlier cursor the DRILL badge still shows but no panel changes. Tests how the surprise lens and the cross-asset panels respond to pure volatility without regime change.

What responds

Drills feed the directed network, asymmetry matrix, cascade and network structure, coupling, turbulence, the surprise lens and Hawkes — and, through those readings, the Risk tab's crash badge, sentiment Panic leg and diversification absorption line while a drill is active. They do not change the fragility thermometer, Indicator detail or the base-rate table — those are computed from the raw returns and are not recomputed for drills.

Reset Button

Clears the injection and reverts to live/snapshot data.

Pedagogical Role

These drills let an operator understand the console's sensitivities without guessing from real market moves. They show that a planted lead raises directedness and puts its source on top, while a common shock adds co-movement with no leader and does not: directedness falls or stays about where it was. Simultaneous moves are not leadership.

Anticipation — where stress starts, & the out-of-sample test (the predictive layer)

Read it: This panel adapts the companion paper's directed-spillover diagnostic for an interactive public-data console. It names the upstream transmitter (the market whose stress tends to lead the others — where to direct attention, not a trade), contrasts it with the loudest (most volatile) market, and runs a genuine out-of-sample test of whether the transmitter actually leads.
Does NOT mean: A buy/sell signal or a price/return forecast. Any out-of-sample lead it finds is small in absolute terms — it sharpens where stress originates, not whether to trade.

Every other panel is descriptive — it tells you the state now. This one is the closest thing to a predictive reading the evidence honestly supports, and it is an interactive adaptation of Patrick Iben's Anticipating network contagions: when directedness outperforms connectedness. The repository contains the research code, data and prediction-first records. This console uses a lightly regularized unconstrained VAR on standardized absolute returns; the paper's nonnegative-VAR/interdiction pipeline is documented in the research repository.

What it computes

  • Net transmitter (Diebold–Yılmaz): a one-lag vector autoregression (lightly ridge-regularized) on the standardized absolute daily returns of the 48 long-history macro names, decomposed with a generalized forecast-error-variance decomposition over 8 days into directed volatility spillovers. The market that exports more stress than it imports (highest NET) is the transmitter — the "anticipation target": the place to watch, for attention, not for trades.
  • Loudest market: the basis series with the highest mean absolute daily log change over the full sample — the most volatile of the 48, the instinctive "react here" target, which is usually downstream. For the out-of-sample test it is re-picked on the training split. Because VIX is a volatility index whose log changes dwarf those of every price series, it wins "loudest" by construction, whatever the data; when the loudest is VIX the card says the transmitter-vs-loudest comparison is weak, since it is then benchmarked against a fixed choice rather than a data-driven one.
  • Total directed spillover (Diebold–Yılmaz connectedness, %) and directedness (0–1): how one-way the pairwise spillovers are. The paper's core claim: anticipation can only help when the network is directionally asymmetric — when the transmitter and the loudest market differ. The verdict line: if the transmitter is the loudest, reacting is as good as anticipating; if total spillover is below 35% or directedness below 0.12, there is no clear upstream source; otherwise the transmitter is the top net exporter of spillover in this full-sample decomposition — a place to direct attention, not a trade — and whether that buys any real lead is left to the out-of-sample test.
  • Transmitter stability: 100 block-bootstrap refits report how often the same market comes out on top and a 95% interval for its rank, plus a 95% bootstrap interval for its NET. If it tops fewer than half the resamples or its rank interval reaches past 3, the leadership counts as unstable: on the panel the stability row turns amber (green when stable), and the plain-English briefing and the game-theoretic lens's focal-point row say in words that it is unstable.

The out-of-sample test (why this is honest, not hype)

The engine splits the shared history into a training part (first 60%) and a held-out test part (last 40%). It picks the transmitter and the loudest market on the training part only, then checks on the unseen test part how well each one's stress today correlates with the whole basket's average stress five days later. It reports both correlations, the transmitter's advantage, and the share of 200 block-bootstrap resamples of the test period in which that advantage is positive. It also reports two fairer baselines on the same test: the basket's own 5-day stress persistence (basket stress today against basket stress five days later, with its own count of resamples in which the transmitter beats it), and the transmitter's rank among all 48 basis markets. Because VIX wins "loudest" by construction, beating it says little: on the embedded snapshot SPY's advantage over VIX is positive in 100% of resamples, yet SPY (0.149) ranks 3rd of 48 (median 0.08) and does not beat persistence (0.151; ahead in 48% of resamples).

The verdict is keyed to the persistence baseline, not to the loudest market, and has three branches: a lead over the loudest that also beats the basket's own persistence in at least 90% of resamples → "a small out-of-sample lead that also beats the basket's own 5-day stress persistence" (still small in absolute terms); a lead over the loudest only → the card gives the transmitter's rank and the persistence comparison and says this test cannot tell transmitter leadership apart from ordinary volatility clustering (the case on the 2026-10-20 snapshot, in line with the companion paper's own real-data result: positive but not statistically significant); otherwise → no out-of-sample lead on this split. When the transmitter's correlation and the baseline round to the same two decimals, the card shows a third. Either way it sharpens where stress tends to originate — exactly why the panel refuses to call it a trade signal. Lead is association, not causation, and on non-stationary data the transmitter migrates over time — read the stability rows.

The panel also carries a methods caveat: variance spillover can distort linear Granger-type inference (Mantalos & Shukur 2010); this is a forecast-error-variance decomposition, not impulse-response causality, and a nonlinear-Granger check (Wismüller et al. 2021) is the robustness alternative. The engine runs on the full history — it does not follow the Backtest cursor.

Alpha Lab — can you actually trade the signal?

Read it: A walk-forward backtest that tests, honestly, whether the stress signal makes money — net of trading costs, benchmarked against simply buying and holding SPY. A collapsed card on the Predictive tab: open it, pick a stance (Risk-off / Contrarian / UUP/SPY), the entry threshold τ, a cost in basis points, a holding period and a position size.
Does NOT mean: Sold alpha or a live trading signal. It is research. The likely honest result — confirmed in the build — is that the edge bleeds out after friction and underperforms buy-and-hold.

This panel answers the natural question — "there's a tiny statistical lead, can I monetise it?" — the only honest way: by simulating it. Your chosen stance supplies the direction the data cannot.

How it trades (in simulation)

  • Signal: walk-forward turbulence — each day's Mahalanobis distance of the 48-name return vector from the previous 252 days (covariance refreshed every 10 days, shrinkage 0.2). The entry threshold τ is a percentile of the training split (the first 60% of days), so there is no look-ahead; slider 50th–90th, default 60th. The Contrarian stance always uses the 90th percentile, whatever the slider says. That holds in the simulation and for the configuration the rigorous validation below scores. The validation's 15-trial sweep still runs Contrarian at all five τ, and those runs count toward its no-skill bar and PBO.
  • Stances: Risk-off = short ½ SPY and ½ XLF, long ½ TLT and ½ UUP; Contrarian = the reverse; UUP/SPY = long UUP, short SPY.
  • Entry and exit: enter when turbulence crosses τ; exit after the holding period (slider 3–10 days, default 5) or when turbulence falls below 0.8τ. For Risk-off and UUP/SPY a regime filter stands aside — or exits — while the 60-day SPY–TLT correlation is above 0.2 (the flight-to-quality premise has broken, as in 2022), though it detects that late.
  • Costs and size: a cost in basis points (slider 2–10, default 4) charged on the gross position at both entry and exit; position size 0.25–1.0× (default 0.25×, margin-of-safety). The walk-forward box (on by default) makes TEST the period after the training split; unticked, TEST covers the whole history.

What it reports

A headline net TEST result next to SPY buy-and-hold total return over the same dates, an equity-curve chart (net strategy, gross, SPY), and a table of net Sharpe, total return, max drawdown and trade count for TEST and TRAIN, plus win rate on active days and cost as a share of gross PnL for TEST only (their TRAIN cells are left blank). The TRAIN column is flagged "⚠overfit" when its Sharpe beats TEST by more than 0.5. The result is stamped INCONCLUSIVE when the test Sharpe is below 0.1, the net return is not positive, there are fewer than 20 trades, or the Deflated Sharpe from the rigorous validation below is under 50%. The last rule means a positive net number never appears unlabelled when the console's own overfitting check says it does not clear the no-skill bar; the caveat then names the net return and the Deflated Sharpe side by side.

What it shows, as built: on the embedded snapshot at the default settings, all three stances come out INCONCLUSIVE and far behind SPY buy-and-hold (+95.2% over the same test dates) once friction is charged. Contrarian is the closest call: net +1.2% on test, but its Deflated Sharpe is 9%, so it does not clear what 15 no-skill tries would produce. That is the point. It is the computational form of Bogle's lesson: the small volatility-correlation the Anticipation card measures out of sample — a few percent of variance; the panel quotes it live from that card rather than as a fixed number — is the kind of edge frictions quietly consume. Use it to disprove trade ideas cheaply, not to find a money machine.

Rigorous validation (the "better cross-validation" answer). The validation runs automatically with every backtest (the button only recomputes it). It sweeps 15 configurations (3 stances × τ at the 50th, 60th, 70th, 80th and 90th percentiles, at your current cost, holding period and size) and reports two overfitting diagnostics: a Deflated Sharpe Ratio (Bailey–López de Prado — the probability that the scored configuration's Sharpe beats the best you'd expect from 15 no-skill tries, adjusted for skew and fat tails; the scored configuration is the grid point nearest your settings — your stance at the swept τ closest to the slider, always the 90th percentile for Contrarian — and the panel names it) and the Probability of Backtest Overfitting via CSCV (combinatorially symmetric cross-validation: the history is cut into 10 equal blocks and every 5-versus-5 split is tried; PBO is how often the configuration that looked best in-sample lands below the median out-of-sample). There is no purging or embargo between the blocks. The panel labels PBO of 50% or more "likely overfit", 30–50% "fragile", below 30% "is not obviously overfit" — and whenever the Deflated Sharpe is under 50% it adds that no configuration clears the no-skill bar, so a low PBO never reads as an edge. Both numbers move with the sliders, so apart from the default-settings Deflated Sharpe quoted above, this guide does not quote them. These tests shrink apparent edge; they never create it.

The constructive flip side — predicting volatility instead of direction — has its own card: see Forward-volatility lab. Like it, the Alpha Lab is computed from the history at load: it does not follow the Backtest cursor and is not redone after a live refresh until you reload.

Forward-volatility lab — predict what's predictable

Read it: Predictive tab. Rows: SPY's realized volatility over the next 5 and 20 days predicted from simple price-state features (out-of-sample R²), forward direction as a control (scored on the same three features), the same model with forward-macro features added, and a no-model persistence baseline. Higher R² = more of the next period's volatility explained; at or below 0 = no better than predicting the average.
Does NOT mean: NOT a price or direction forecast — direction is the control row and stays at about zero (at or below zero, or within ±0.02). A learnable volatility forecast is risk context, never a signal to trade or hedge — the ridge model is not wired to the Risk tab's sizing dial, which applies only your own band to SPY's trailing 20-day volatility — and an R² of 0.2–0.4 still leaves most of the next period's volatility unexplained.

The constructive complement to the Alpha Lab: point the same honest machinery at what is learnable. A ridge regression (λ = 1) on three risk-state features — SPY's trailing 20-day realized volatility, the Alpha Lab's walk-forward turbulence, and the 60-day SPY–TLT correlation — is scored with blocked 5-fold cross-validation, dropping 20 days of training data on either side of each test fold (purge + embargo) so overlapping windows cannot leak.

On the embedded snapshot (markets as of 2026-10-20): forward 5-day volatility R² ≈ 0.41 and forward 20-day volatility R² ≈ 0.22, while forward direction, scored as a control on the same three features, comes out at ≈0 at both horizons (at or below zero, or within ±0.02) — no better than simply predicting the average. Today's volatility used directly as the forecast (the persistence baseline) scores −0.09; that naive baseline, not the ridge model, is what the Risk tab's sizing dial uses. The 5-day reads higher than the 20-day because volatility clustering is strongest at short lags — it does not make the model "more predictive" of anything else. That contrast is the whole lesson: aim any learning at vol/regime/risk, not at price direction.

The "more data" experiment — an honest negative. A natural instinct is "add the best forward-content macro data and the model improves." The lab tests exactly that: it adds the 10y−2y yield curve, the high-yield spread, the Chicago Fed financial-conditions index, VIX and the 10-year real rate as features. The out-of-sample result is that they do not help the 20-day model — they slightly degrade it (R² 0.22 → 0.17). This is reported on the panel with a red ▼0.05 (computed before rounding, so it can differ by 0.01 from the gap between the two rounded figures), not hidden. It is the "shallow wins" / overfitting lesson demonstrated on live data: more and better data does not equal better prediction — slow, correlated features add parameters that overfit even under ridge regularization. Those macro series carry genuine signal, but at the recession / regime horizon (months), which is why they live in the Forward-macro panel — not inside a 20-day model.

The lab is computed once from the history at load: it does not follow the Backtest cursor and is not redone after a live refresh until you reload. Its 5- and 20-day results also feed the meta-learning layer's skill board.

Forecast reliability — the meta-learning layer

Read it: A layer above the forecasts. It does not predict — it reports when each forecast can be trusted: a skill board (out-of-sample R² for 5- and 20-day volatility vs direction) and a regime-conditional reliability table (how forecastable volatility is in the low-vol / mid-vol / high-vol terciles of SPY's 20-day volatility), with the tercile SPY's latest 20-day vol falls in marked.
Does NOT mean: NOT a way to manufacture directional alpha. Conditioning on regime improves your sense of how much to trust the volatility/risk forecast — it is not an input to exposure, and it never makes direction forecastable. Direction stays R²≈0 in every regime.

This is meta-labeling in its only honest form (after López de Prado): know when the working risk model is more or less reliable — not to change exposure, and not to invent a directional signal. The skill board repeats the forward-volatility lab's out-of-sample R². The regime table splits SPY's history into terciles of trailing 20-day volatility (low-vol / mid-vol / high-vol, about 857 days each) and, within each, reports how well trailing 5-day volatility tracks the next 5 days' volatility, and trailing 5-day return the next 5 days' return (squared correlations — in-sample, unlike the skill board).

The regime table makes two facts concrete. First, volatility is far more forecastable when stress is already elevated — its regime-conditional R² climbs from roughly 0.01 in the low-vol tercile to ~0.08 mid-vol to ~0.36 high-vol (clustering is strongest in turmoil). Second, direction is unforecastable in every regime (R²≈0 throughout). So the honest reading is descriptive: the risk reading is more informative in high-vol stretches than in calm ones. It is not an input to exposure — the only sizing mechanism on the console is your own pre-set, down-only band on SPY's trailing 20-day volatility, which takes no regime input — and never a direction call or a reason to trade. The panel marks the tercile SPY's latest 20-day vol falls in, as of SPY's last data day (not the Backtest cursor), with the value and the tercile boundaries: on the embedded snapshot, 8.8% annualised as of 2026-10-21, in the Low-vol tercile (boundaries 10.1% and 15.2%) — a vol tercile, not a stress alarm. It is computed once at load from SPY's full history.

Overnight vs intraday — the one free directional regularity

Read it: Pick a fund (SPY, QQQ, IWM, GLD or TLT) and a window (full history or the last 3 years). The card splits each day into its overnight (close→open) and intraday (open→close) halves, plotting the cumulative return of holding only-overnight vs only-intraday vs buy-and-hold, with annualised figures. Most of the equity-index return has historically accrued overnight.
Does NOT mean: NOT a tradable edge. You cannot capture the close-to-open gap net of spreads, slippage and overnight-gap risk. It is a risk premium / opening-auction print artifact, not informational alpha, and not a forecast.

This card is the honest answer to "what free public data predicts short-term direction?" The answer is: almost nothing — except this one documented, index-level regularity (Lou-Polk-Skouras 2019; the New York Fed's overnight-drift work). On this data SPY's overnight half earns about +9.0%/yr versus +4.1%/yr intraday — roughly two-thirds of the buy-and-hold return — and small-caps (IWM) are starker still: the intraday half is actually negative, so effectively all of the return came overnight.

Why it is not a trade. The drift has persisted in this sample rather than arbitraging away — which is precisely the signature of a risk premium (you are paid for bearing overnight-gap and dealer-inventory / liquidity-provision risk) plus an opening-auction print artifact, not free informational alpha. You cannot isolate the gap without paying spreads and slippage that erase it, and you would still carry the overnight-gap risk you are being compensated for. Switch the selector to TLT (Treasuries) and the pattern inverts (about −6.3%/yr overnight vs +1.7%/yr intraday over the full history; buy-and-hold lost money there, so the card says which half carried the loss instead of quoting a share of the return), which suggests an equity-flow effect rather than a universal law — though GLD (gold) shows the equity-like pattern too (about +13.5%/yr overnight vs −1.5%/yr intraday), so the split is not purely about equities.

It is the closest free data gets to short-term directional structure, included precisely to show why that structure is still not a forecast you can trade — the same lesson as the Alpha Lab and the volatility lab, made concrete on a real, named anomaly. The card uses its own embedded daily open/close history for these five funds (June 2016 – October 2026), which is never refreshed live; "Last 3 years" means the last 756 sessions.

Long-horizon valuation thermometer

Read it: Predictive tab. Where the US market's Shiller CAPE sits versus its own history: the latest embedded value and its percentile since 1881 and since 1950, the multiple of the long-run median, the earnings yield next to the 10-year Treasury yield (a rough equity risk premium), and the 10-year real return a simple CAPE regression implies, with a 95% band.
Does NOT mean: NOT a timing signal and NOT a forecast you can act on this year. The in-sample fit does not survive out of sample, the band is wider than the estimate, and the horizon is a decade — useless for the console's 5–20-day window, where direction is correctly ~0. Expensive markets can stay expensive, or get more so, for years.

The one place the academic canon (Cochrane's discount-rate result; Shiller's CAPE) says market direction is even weakly forecastable from free data — and only over many years. A high CAPE (low earnings yield) has gone with lower real returns over the following decade, through mean-reversion of the risk premium. It is an equilibrium risk-premium level, not a mispricing to arbitrage.

The data is Shiller's monthly CAPE series as embedded in the page — 1881 to June 2026, the latest month with complete earnings, dividend and 10-year-yield data in Shiller's revised release of October 2026 — and it is not refreshed live, so this card lags the rest of the console (markets as of 2026-10-20) by about four months. On that embedded data: CAPE 40.2, the 99th percentile since 1881 and the 98th since 1950, about 2.4× the long-run median of 16.6; the Shiller earnings yield is 2.49% against a 4.47% 10-year Treasury yield, so the gap is about −2%. A regression of subsequent 10-year real returns on the earnings yield, fitted on the series through September 2024 and not refitted on the revised release (the card says so), implies about +2.6%/yr at the June 2026 CAPE, with a 95% band of roughly −6.0% to +11.2%; its in-sample R² is about 0.27.

The honesty wrapper is the finding, not boilerplate: these predictors mostly fail to beat the historical mean out of sample (Goyal–Welch 2008/2022), beating it only weakly and only with sign/valuation constraints (Campbell–Thompson), and persistent-regressor (Stambaugh) bias inflates the in-sample fit. The card does not follow the Backtest cursor. A thermometer, not a trade.

Factor companion — harvested premia (1–12 month)

Read it: Predictive tab. Three documented cross-asset premia read off prices the console already holds, for the 48 non-crypto markets: trend (how many are in a 12-minus-1-month uptrend, plus the strongest and weakest), carry (the 10y−2y Treasury slope) and low-risk (the three lowest- and three highest-volatility markets).
Does NOT mean: NOT a timing tool and NOT a buy list. These premia are real on average across decades and many markets, but timing them usually loses to holding them statically after costs; a market in an uptrend today says nothing reliable about next month.
  • Trend (time-series momentum): each market's return from 12 months ago to 1 month ago (the close 21 trading days back over the close 252 trading days back, minus 1). The card shows how many of the 48 are positive (33 of 48 on the embedded snapshot — "broadly trending up" when at least two-thirds are), and the three strongest and three weakest.
  • Carry (term structure): the FRED 10-year minus 2-year Treasury slope — positive = positive bond carry, negative = inverted. Carry here is only the rates/term slope; clean FX and commodity carry need yield/roll data the console does not have.
  • Low-risk / defensive: trailing 60-day realized volatility (annualized); the three lowest and the three highest.

The canon (Ilmanen's Expected Returns; AQR's "Value and Momentum Everywhere"; the low-risk / betting-against-beta anomaly) treats these as real and replicated. Factor timing is "deceptively difficult" and usually loses to static, diversified harvesting after costs (Asness et al.), and most factor-zoo anomalies fail multiple-testing / replication (Harvey–Liu–Zhu). So the card is restricted to that trustworthy core and shown as descriptive posture, never a trade trigger. It uses the latest data only (it does not follow the Backtest cursor) and is computed at load.

Cross-sectional factor demo — what "doing what quants do" returns

Read it: Predictive tab, amber border. A frozen exhibit — the result of an offline backtest, not computed in the page — of the one quant playbook free data allows: rank 85 large-cap stocks each month on a no-fit blend of three documented factors (12-minus-1-month momentum, 1-month reversal, low volatility) and go long the top fifth, short the bottom fifth. Read it top to bottom: is the signal there, does it pay after costs, does it persist, does breadth rescue it.
Does NOT mean: NOT a strategy, NOT a signal and NOT a recommendation — the finding is that there is no investable edge. The numbers are fixed; they do not update with the console's data.
  • Is the signal there? Composite rank information coefficient +0.021 (next month, out-of-sample), 95% interval −0.021 to +0.062, p = 0.33 — indistinguishable from zero; t = 1.0 against the field's discovery hurdle of t > 3.0 (Harvey–Liu–Zhu). Per signal: momentum +0.029, reversal +0.045, low-vol −0.041 (suspect).
  • Does it pay? Gross +4.6%/yr (Sharpe 0.26) shrinks to +3.2%/yr at 5 bps per side, +1.8% at 10, −1.1% at 20 and −3.9% at 30. Break-even is about 16 bps per side — below an honest all-in cost (20–30 bps of spread and impact plus about 50 bps a year to borrow the shorts). Net max drawdown −37.6%.
  • Does it persist? IC +0.042 in 2016–21 → about 0 in 2021–26 — though the decay itself is not significant, so "real edge that faded" cannot be told apart from noise.
  • Does breadth rescue it? Widening the same model from 85 hand-picked mega-caps to 589 names takes the IC to −0.003 and the gross Sharpe to −0.06 (break-even −3 bps: a loss even trading free). Breadth amplifies real signal; here there was none to amplify — Grinold's law run in reverse.

Survivorship, stated on the card: the universe is 85 current (2026-picked) large-caps, so failed and delisted names are missing. That inflates momentum and reversal and may flip low-vol's sign — the true effect is at most what is shown — while picking liquid mega-caps deflates the real premia, which live in small, illiquid names. The number is squeezed from both sides.

What it proves is epistemic: the accessible levers are honesty instruments that cleanly reject a fake edge, not machines that manufacture a real one. Professionals make a similarly tiny IC pay with what free data cannot buy — a delisting-inclusive universe, microcap access, a securities-lending desk, and execution that keeps turnover below the cost cliff.

Forward macro — recession & financial conditions (months horizon)

Read it: The panel where the best free forward-looking data actually carries signal: the smoothed recession probability (Chauvet–Piger — a coincident nowcast of whether the U.S. is in recession now, not a forecast), the 10y-2y and 10y-3mo curve spreads (the leading indicators), the high-yield credit spread (OAS), the Chicago Fed financial-conditions index, initial jobless claims, and unemployment — each with a sparkline of its last ~120 observations and its current value, plus a plain-language read (benign / building / elevated). Source: FRED, published daily and checked anonymously by the browser, with the embedded snapshot retained if a check fails. The dates describe observation periods, not a promise of new daily observations.
Does NOT mean: NOT a market-timing tool and NOT a same-day signal. These series are slow (weekly to monthly), noisy, and widely watched — so largely priced. An inverted curve has led recessions by 6-18 months on average, with long and variable lags and false signals. Use them for recession-watch context, never for entries or exits.

This is the constructive home for the forward-content macro data, read at its natural horizon. The yield curve is the single best-documented leading indicator of U.S. recessions, and the two curve rows (10y−2y and 10y−3mo) are the panel's leading indicators. The recession-probability row is a different thing: the card labels it "Recession probability (Chauvet–Piger nowcast)". It is FRED series RECPROUSM156N, the Chauvet–Piger smoothed U.S. recession probability — a Markov-switching model on coincident indicators (payrolls, industrial production, real income, real sales) that estimates whether the economy is in recession now, published with a lag. It is not a yield-curve model and not a 12-month-ahead probability: in the embedded data it reads ~99% during 2008–09 and near 100% in spring 2020, yet it stayed below 3% through the 2022–24 curve inversion. It confirms a recession; it does not forecast one. High-yield spreads and the financial-conditions index lead equity stress by weeks to months. The honest division of labour with the vol lab: short-horizon risk (vol, days-to-weeks) is best read from price state; medium-horizon regime (recession, months) is best read here. Forcing the months-horizon data into a days-horizon model overfits (see the vol-lab experiment), so the console keeps them separate.

How to read it: the card's read says Elevated recession / financial-stress risk when the recession probability is above 20%, the 10y−2y curve is inverted, financial conditions are above 0.5, or the high-yield spread is above 6%; Some forward stress building when the probability is above 5%, the spread above 4.5% or conditions above 0; otherwise Forward macro benign (curve positive, credit tight, conditions loose, recession probability low). Historically the curve inverting, the HY spread widening through ~4.5–6%, and financial conditions turning positive (tight) have been the meaningful regime shifts — context on a months clock, not a trigger for anything.

The series are an automatically updated FRED snapshot retrieved 25 October 2026 (daily sampled points 2026-10-22; weekly latest points 2026-10-16–2026-10-17; monthly latest points 2026-07–2026-09); each sparkline is the last ~120 observations, so how much time it spans depends on how often the series is sampled: about 10 years for the monthly rows (recession probability, unemployment), a little over 2 years for the weekly ones (both curve spreads, financial conditions, jobless claims) and only about 5.5 months for the daily high-yield spread. The high-yield history itself starts in June 2023, so in Backtest its row is absent before 19 June 2023 and its sparkline has fewer points until December 2023. The card follows the Backtest cursor.

The Risk tab — brake yourself, not the market

Read it: The third tab. Ten cards about the one thing you control — your own behaviour and the rules you set in advance: a decision journal with pre-commitments, a down-only volatility-sizing dial, a crash-context badge, a diversification reality check, a contrarian sentiment thermometer, a synthetic stress-test, a drift monitor, a stock-bond ballast read, the crisis replay and the premia allocator.
Does NOT mean: NOT a trading desk. The tab's rule, printed on the guardrail card, is that no reading on this console may justify a trade — "the market looks fragile" is never a reason. Every number here is context for rules you write down beforehand, never a trigger.

The Diagnostic and Predictive tabs describe the market. This tab is about what the evidence says actually moves an investor's outcomes: behaviour (overtrading, panic-selling), sizing, diversification that holds up, and sticking to rules. It is deliberately walled off from the market gauges: the cards that read market data (crash context, diversification, sentiment, the stress-test, ballast, drift) are labelled as states, annotations or descriptive distributions wired to nothing (the stress-test, for example, rescales its synthetic paths to SPY's current EWMA volatility only to draw a distribution of bad months), and the two that touch your exposure only work from inputs you set: the sizing dial trims only against the volatility comfort band you type (applied to SPY's trailing 20-day volatility, a naive forecast), and the drift card compares your mix to the target weights you set in Crisis replay, using fixed bands (5 points, or a quarter of the target) that mark a state, not a trade.

The eight Risk cards use the latest data and do not follow the Backtest cursor, with one exception. Three of them reuse readings from panels that do follow it: the crash badge shows the turbulence, absorption and Hawkes readings those panels currently show, the sentiment thermometer's Panic leg uses the same turbulence reading, and the diversification card's absorption line uses the same absorption ratio. In Backtest those readings come from the cursor date, while every other input to these cards (VIX percentile, SPY skew, the covariance, CAPE) stays at the latest data, so the three cards mix dates. Read them in Live mode; the crash badge and the diversification card's absorption line print the date they describe. The cards are recomputed each time you open the tab and, while the tab is open, whenever the console recomputes: after a live refresh that changed prices, a switch between Live and Backtest, a release of the Backtest cursor, or a drill change. The journal and pre-commitments are stored only in your browser.

Cards: Behavioral guardrail · Volatility-sizing dial · Crash-context badge · Diversification reality check · Contrarian sentiment thermometer · Scenario stress-test · Drift & rebalance · Stock-bond ballast read · Crisis replay · Premia allocator.

Behavioral guardrail — brake yourself, not the market

Read it: Write if-then pre-commitments (e.g. "if about to sell after a >10% drop, wait 24h"), log each buy or sell, and watch two counters: decisions in the last 30 / 7 days (overtrading) and sells made after a drop (panic-prone). Logging a "sell after a drop" pops up a pause that shows your first rule and asks you to confirm.
Does NOT mean: NOT a trade signal and NOT proof the journal works — the evidence is about investor behaviour in general; this journal itself is untested. It never blocks you; the friction is a pause. And it is walled off from every market gauge: no reading on this console may justify a trade.

The one lever the evidence says matters most for outcomes is behaviour, not the market. The card audits yours against the strongest retail evidence (Barber–Odean: overtrading hurts; panic-sellers who exit rarely buy back). It counts decisions over the last 30 and 7 days — 8 or more in 30 days reads "high — overtrading risk", 3 or more "moderate", otherwise "low" — and how many of your sells were logged as "after a drop". Your rules are listed with a ✕ to delete them; the six most recent journal entries are shown.

Privacy and storage: the journal and rules are saved only in this browser (localStorage). Nothing is sent anywhere; another browser, a private window, or clearing site data starts empty.

The honest size of the prize is small — the card puts the realistic behaviour/timing cost at about 0.1%/yr (not the debunked DALBAR figure) — so this is about doing less self-harm, not about finding return.

Volatility-sizing dial — a down-only throttle

Read it: Set your comfort band (target volatility, 5–40%, default 15%) and read the exposure your own rule implies: min(100%, your target ÷ SPY's trailing 20-day volatility, annualised — the naive forecast it uses), floored at 30%. Below it, a walk-forward check shows what that rule did to SPY's drawdowns, and what it cost in turnover.
Does NOT mean: NOT a direction call and NOT a buy/sell signal. It is your band applied to SPY's trailing volatility used as a naive forecast — it only ever suggests holding less, never levers up, and earns no return. No Sharpe ratio is shown because the out-of-sample benefit of volatility targeting is fragile (Cederburg et al.).

How it works. The "forecast" is simply SPY's trailing 20-day realized volatility, annualized, carried forward unchanged — the naive persistence forecast that the forward-volatility lab uses as its no-model baseline (used raw as a level forecast it scores R²≈−0.09 there: worse than predicting the average, because volatility mean-reverts and the raw level overshoots after spikes — though the lab's fitted model gets much of its skill from this same input; a read on risk, never on direction), not the lab's learnable ridge model, which is not wired to the dial. The card labels it "Trailing 20-day vol (annualised) — the naive forecast it uses". Exposure = min(100%, your target ÷ that volatility), never below 30%: when it is above your band the rule says hold less; when it is below, the rule says 100% — never more. You set the band; you decide whether to follow the rule.

Walk-forward check. Over SPY's full embedded history the card applies the rule day by day, each day's exposure using only earlier returns, and compares the maximum drawdown of buy-and-hold with that of the vol-sized version, plus the turnover the rule generates (exposure changes per year). On the embedded snapshot at the default 15% band, buy-and-hold's maximum drawdown is −34% against −20% vol-sized, at a sizing turnover of 2.3× a year: down-sizing has shallowed drawdowns on this history — but it cannot earn return, and a twitchier band trades more.

The rule is about risk you have already decided to carry, written down in advance — exactly the kind of pre-commitment the guardrail asks for.

Crash-context badge — the regime you're already in

Read it: Four tail readings side by side — turbulence (0–100), the absorption ratio (labelled "Absorption (top-10-mode share)": the variance share of the top 10 eigenmodes, not a one-factor share), Hawkes shock clustering n, and SPY's 60-day return skew — and one phrase: Benign tail regime (none flagged), Mixed — some tail signals up (one or two), or Elevated left-tail regime (three or four), followed by the date it describes: "now" when the data is fresh, "as of YYYY-MM-DD (… · N days old)" when the data is more than 4 days old (the oldest series end; on the embedded snapshot that is crypto's 2026-10-20, while turbulence and absorption (the 48 non-crypto names), the skew (SPY) and the Hawkes n (fitted on shocks through the newest bar of any series) all run through 2026-10-21, a day later — see Hawkes), and the cursor date in Backtest (where it notes that the skew still uses the latest data). A reading is flagged at turbulence ≥70, absorption (its current 252-day value) in the top 20% of the rolling history of that same 252-day measure (sampled on a fixed grid every 21 trading days from the start of the history, plus the current window; with fewer than 12 samples, at a very early Backtest cursor, no percentile is shown and it is not flagged), Hawkes n ≥0.6, or skew ≤ −0.3. Absorption is judged against the history of the same 252-day measure, not a fixed level and not the 60-day sparkline (shorter windows read systematically higher): for these 48 names the 252-day level has stayed between about 76% and 91% since mid-2017, so any fixed cut would fire every day and the badge could never read Benign.
Does NOT mean: NOT a forecast and NOT a crash warning. Every one of these rises during 2020/2022, not before, and skew flips on a single bad day. The badge is wired to nothing — it moves no dial and predicts nothing.

A pure annotation of the tail regime you are already in. Three of its inputs come from other panels (turbulence, the absorption ratio — compared with a rolling history of the same 252-day absorption measure, not the panel's 60-day sparkline, which runs about 3 points higher on average — and the Hawkes branching ratio); the fourth is the skewness of SPY's last 60 daily returns. It is coincident by construction: you read it; you decide, by rules you set beforehand.

Diversification reality check

Read it: How many independent bets an equal-weighted basket of the 48 non-crypto markets really holds: the participation ratio (effective number of factors, from the factor-baskets panel), the diversification ratio (average volatility ÷ portfolio volatility; higher = more diversified), the top three names' share of total risk, and the four largest risk contributors.
Does NOT mean: NOT a promise that diversification will hold. The diversification ratio, top-3 share and risk contributions describe only the last two years of correlations; in a crisis correlations rush toward one and the effective number of bets collapses further. NOT a recommended portfolio — the equal-weight basket is an illustration, not your holdings.

The effective-bets figure is the participation ratio from the factor-baskets panel, which uses every day all 48 names share (about ten years, 2016–2026, including 2020 and 2022). On the embedded snapshot, 48 names collapse to about 4.8 effective bets. The diversification ratio, the top-3 share and the risk contributions use a separate covariance over the last 504 trading days (about two years) that all 48 names share, annualized; every name gets the same weight, and each name's risk contribution is its share of portfolio variance. The card repeats the absorption ratio, with its percentile in the rolling history of the same 252-day measure and the date it applies to ("now", "as of YYYY-MM-DD" when the data is stale, or the cursor date in Backtest), as a reminder of how much variance sits in a few modes; it is not itself a crisis reading (on the embedded snapshot it reads 79%, only the 12th percentile of its own history). Read it with Factor baskets: spreading money inside one basket barely diversifies.

Contrarian sentiment thermometer

Read it: One phrase — Panic / fear, Euphoria / greed, or Neutral — ignore — plus "proof it's not a clock": the spread of SPY's next-month returns from days like today.
Does NOT mean: NOT a turn signal, NOT "buy the panic", NOT a buy/sell call of any kind. Extremes persist and deepen for months (2000, 2021), and from here the share of up months is about SPY's usual share, with a losing lower quartile (the middle half of next-month outcomes runs from −0.8% to +2.5% around a +1.2% median on the embedded snapshot). It is context for rules you write down beforehand, never a trigger.
  • Panic / fear when VIX is at or above the 80th percentile of its own history, or turbulence is at least 80.
  • Euphoria / greed when CAPE (the embedded Shiller series, see valuation) is at or above its 85th percentile and VIX is at or below its 40th — the weaker leg, since CAPE carries ~zero short-horizon information.
  • Otherwise Neutral — ignore.

"Proof it's not a clock": the card takes every past day whose trailing 20-day SPY volatility fell in the same tercile as today's, and shows the 25th, 50th and 75th percentile of SPY's next-21-day return from those days, plus the share that were positive. (The bucket is the volatility tercile, not the sentiment phrase.) The "Share positive" row puts that bucket's share of up months next to SPY's share over all days (e.g. 68% vs 69% on the embedded snapshot). The point is that the bucket adds next to nothing over the base rate — it says little about direction — and its 25th percentile is still a loss, so both outcomes stay live. The card's caveat quotes that middle half (25th to 75th percentile) and the median from the same numbers, so it stays true when the bucket moves; it makes no turn or reversal claim. If prices keep falling after a panic reading, the reading was not wrong: a thermometer never claimed a turn.

Scenario stress-test — synthetic crises to stress-test a size you already chose

Read it: Two thousand synthetic next-month (21-trading-day) paths for SPY built from its own history: the 5th, 50th and 95th percentile of the month's return, and the worst dip within the month (median path, 5% tail, single worst path).
Does NOT mean: NOT a forecast of next month and NOT a probability you can bank on. It cannot invent a crisis worse than the moves it resamples — no novel black swan, and no 2008 (the embedded data starts in 2016). It is for stress-testing a position size you have already chosen.

Method — filtered historical simulation. Each of SPY's daily returns is divided by the EWMA volatility (λ = 0.94) prevailing at the time, giving a pool of volatility-standardized moves with the real fat tails. Each synthetic path draws 21 of those moves at random (independently, with a fixed seed) and rescales them to today's EWMA volatility. That gives a fuller range of bad months than the handful of real crises — the transparent cousin of a generative model, with no black box and no mode collapse.

Limits. Volatility is held at today's level for the whole path and the draws are independent, so the paths do not reproduce volatility clustering within the month; tails come only from the historical pool (2016 onward). It reads today's EWMA volatility only to scale this descriptive distribution: nothing on the card sets or changes a size. A stress distribution, never a prediction.

Drift & rebalance — a state, not an alert

Read it: Takes the target weights you set in the Crisis-replay card (60/40 equities/Treasuries by default) and shows where one year of each sleeve's price change has pushed them: target → current weight and the drift in percentage points. A sleeve is marked "band" when it has drifted by at least 5 points, or by at least a quarter of its target.
Does NOT mean: NOT a rebalance signal and NOT a red alert. A breached band is a state, not an action: rebalance on a calendar or a wide band you chose in advance — never because a gauge said so.

Each sleeve's drift uses its proxy's price return over the last 252 trading days (equities SPY, Treasuries TLT, credit LQD, commodities DBC, gold GLD, dollar UUP, crypto BTC). If no weights are set, the card asks you to set them in Crisis replay (on this same Risk tab).

The "rebalancing bonus" is mostly the diversification you earn buy-and-hold anyway (Cuthbertson–Hayley); with no mean-reversion to harvest (direction R² ≈ 0), rebalancing early just sells winners at tax and spread cost. Route rebalancing through tax-advantaged accounts and new cash first.

Stock-bond ballast read

Read it: One number — the correlation of SPY and TLT daily returns over the last 63 trading days (about three months) — and one phrase: Bonds ARE acting as ballast (−0.10 or below), roughly uncorrelated — partial ballast (in between), or Bonds are NOT ballast — moving WITH stocks (+0.20 or above, like 2022).
Does NOT mean: NOT an allocation steer and NOT a forecast that the relationship will persist. The stock-bond correlation flips regime (negative for decades, positive in the 2022 inflation shock) and mean-reverts unpredictably; assuming it persists and reallocating is timing.

Present-tense context for whether your bonds are currently diversifying your equities. It describes the past quarter only and uses the latest data (it does not follow the Backtest cursor). Read it next to Crisis replay, which shows how much a 60/40 mix's protection depended on that correlation in past stress windows.

Crisis replay — your mix through past stress windows

Read it: Set the weights YOU choose across seven sleeves (Equities, Treasuries, Credit, Commodities, Gold, Dollar, Crypto), pick a real past stress window, and the card replays that allocation — daily-rebalanced — through the embedded history, showing an equity curve and the realized total return, max drawdown, and volatility versus 100%-stocks and a 60/40 baseline. It is a collapsed card on the Risk tab: click its title to open it.
Does NOT mean: NOT a forecast, NOT a recommendation, NOT an optimizer. It never suggests or optimizes weights — you set them. Past drawdown is not a prediction; the windows are a fixed, non-representative sample, and the embedded data starts in 2016 (there is no 2008 GFC in it).

This is the one new artifact that came out of asking whether a full Expected-Free-Energy planner could be added to the console. The honest answer was no — that planner needs a controllable agent, a learnable forward world-model, and stable structure, none of which markets give a passive observer (forward direction here is out-of-sample R²≈0). So this card is deliberately that planner with the planner, the world-model, and both free-energy terms removed: what's left is a pure historical replay, which is honest precisely because it asserts nothing about the future.

What it computes: for the chosen window, the portfolio return each day is the weighted sum of the sleeves' realized simple daily returns (renormalized across whichever sleeves have history — crypto only exists from late 2023, so it is dropped and flagged in earlier windows), cumulated into an equity curve. Max drawdown is the deepest peak-to-trough on that curve; volatility is the annualized standard deviation of daily returns. The 100%-stocks and 60/40 lines are the same computation on fixed reference weights.

Windows and sleeves: COVID crash (2020-02-19 → 2020-04-30), 2022 rate-shock bear (2022-01-03 → 2022-10-14), 2018 Q4 selloff (2018-09-20 → 2018-12-31), 2023 bank stress (2023-02-01 → 2023-05-01), 2024 August carry-unwind (2024-07-15 → 2024-09-10), and the full history (2016–2026). The sleeves map to SPY, TLT, LQD, DBC, GLD, UUP and BTC; presets are 60/40, Equal and All stocks. A sleeve with prices on fewer than 95% of the window's days is flagged. The weights you set here are also what the Drift & rebalance card reads.

What it teaches: the console's whole thesis, made personal. In the COVID window, a 60/40 mix cut the drawdown from about −34% (all stocks) to about −18% and the total loss from about −14% to about −1% — because Treasuries (the 40% TLT sleeve; the 60/40 baseline holds no gold) were still diversifying stocks. The lesson is to watch how much that protection shrinks in windows where everything couples (the systemic-coupling panel shows that coupling rising as it happens). It is a descriptive teaching tool for sizing and diversification intuition, not a trade.

Premia allocator + stress-test — your passive-income plan, made concrete

Read it: Split a capital sum (default $100,000) across six risk premia — cash / short T-bills, Treasuries, IG credit, US equity, international equity, gold — or pick a preset (Conservative, Balanced, Growth). The card shows the income yield, the dollar income per year, an illustrative total return, the drawdown that mix actually took in the COVID crash (Feb–Apr 2020), with its path, and its deepest drawdown anywhere in the embedded history, with peak and trough dates. It sits on the Risk tab, open by default.
Does NOT mean: NOT advice and NOT a forecast. The yields and returns are fixed illustrative assumptions typed into the page, not live quotes or expected returns; the drawdown is one real historical path, not the worst that can happen. Higher income does not mean a deeper drawdown here: the highest-yield sleeves (cash, Treasuries, IG credit) are the defensive ones, so Conservative has both the most income (3.8%) and the shallowest drawdowns (−12.7% in the COVID window, −21.7% over the whole history). In the presets, the equity share is what raises the illustrative return and deepens the drawdown (COVID window: Conservative 4.9% / −12.7%, Balanced 5.6% / −18.0%, Growth 6.2% / −25.5%). The decision is whether you can hold that drawdown.
SleeveProxy (for the drawdown)Assumed yieldIllustrative total return
Cash / short TSHV3.9%3.9%
TreasuriesTLT4.5%4.4%
IG creditLQD5.2%5.0%
US equitySPY1.4%7.0%
InternationalEFA3.2%6.5%
Gold / realGLD0.0%3.8%

Presets, in the table's order: Conservative 25/25/25/15/5/5, Balanced 10/20/15/35/15/5 (the default), Growth 5/10/5/55/20/5. Income = the weighted yield × capital; the COVID drawdown is the deepest peak-to-trough of the daily-rebalanced mix using the proxies' real daily returns from 2020-02-19 to 2020-04-30, and a second tile gives the same measure over the whole embedded history, with its peak and trough dates. With the default Balanced mix that is about 3.0% income ($3,040 a year on $100,000), a 5.6% illustrative total return, a −18.0% COVID drawdown and a −23.7% deepest drawdown (2021-12-27 → 2022-10-14). The COVID window is not necessarily the worst: Conservative's deepest was −21.7% (2021-11-09 → 2022-10-20) against −12.7% in the COVID window, while Growth's deepest was the COVID drop itself (−25.5%, 2020-02-19 → 2020-03-23).

The assumptions cannot be edited on the card. You can compare them with the yield-curve and credit-spread rows in Forward macro (published FRED observations with their own reporting periods, not real-time telemetry) to judge how dated they are, but not to change your mix: the weights are a plan you set in advance, not a response to market readings. The card's own guidance: tax-advantaged accounts first; lowest fees win; rebalance on a rule, never on a signal.

Live vs Backtest mode

Read it: Toggle between 'Live monitor' and 'Backtest / research' in the header. In Backtest, a "Backtest replay & base-rate honesty" card with a date cursor appears at the bottom of the left column; the walk-forward panels recompute as of the cursor, and the base-rate table compares fragility with what actually happened next over the selected asset's whole history (it does not move with the cursor). (The scenario sandbox works in either mode, within the limits under Scenario sandbox.)
Does NOT mean: The backtest mode avoids look-ahead in its walk-forward panels (not in every panel — see below) but is NOT a trading backtest. It is a stress-measure validation. The rare-events problem means even a "high-skill" conditional rate estimate has wide confidence intervals; the console refuses to claim predictive skill.

Live monitor

Starts from the embedded snapshot and tries to refresh it once at load and then every 10 minutes (sources in Where the data comes from). Every statistic is trailing: its window ends at the latest data point and uses nothing after it. Live mode makes no short-term price or direction call. The few forward-looking reads it does show are risk and context estimates with wide error, never a reason to trade: forward volatility (the forward-volatility lab and the meta layer; the sizing dial only carries trailing 20-day volatility forward as a naive forecast), the anticipation card's out-of-sample test of whether the stress transmitter leads (where stress tends to start: for attention, not a price forecast), the months-horizon recession & credit read on the forward macro card (the curve, credit spread and financial conditions; its recession probability is a nowcast, not a forecast), the decade-horizon CAPE return band on the valuation card, and, on the Risk tab, two next-month SPY return spreads: the scenario stress-test's synthetic distribution scaled to today's volatility (a stress range for a size you already chose, not a forecast) and the sentiment thermometer's historical spread from past days in today's volatility tercile (it adds next to nothing over SPY's base rate). Neither card sets or changes a size. If a refresh changes no prices, nothing is recomputed. When prices do change:

  • Recomputed at once: fragility (thermometer and indicator detail), surprise, the directed network, asymmetry matrix, cascade and network structure, coupling, turbulence, Hawkes, the manifold, anticipation, the game lens, the briefing, perspectives, structural backdrop, forward macro, the pills and banner, and Data health.
  • At once if the Risk tab is open, otherwise when you next open it: the eight Risk cards.
  • When you change their inputs: crisis replay and the premia allocator.
  • Only on reload: factor baskets, the Alpha Lab (and its validation), the forward-volatility lab, the meta layer and the factor companion. The overnight card and valuation use embedded data that never refreshes.

Backtest / research

Switching to Backtest adds the Backtest replay & base-rate honesty card (at the bottom of the left column, on every tab) with a cursor slider spanning the selected detail asset's history; releasing the slider recomputes. These panels follow the cursor and use only data up to it: fragility, indicator detail and surprise; the directed network, asymmetry matrix, cascade and structure; coupling, turbulence and Hawkes; the briefing and regime line (which then reads "cursor YYYY-MM-DD"), perspectives (mostly), the game lens, structural backdrop, forward macro, and the threat pill and banner. Before 2023-09-21 (when crypto history starts) the 51-market network has no shared days, and it needs at least 12 before it is estimated (about 2023-10-09). Until then the network diagram, asymmetry matrix, cascade, network structure, the briefing's leader sentence and the Minsky lens's shock-reach sentence say there is not enough shared history at this date instead of showing numbers, the net table is left empty, the network card's footer and the banner's directedness read n/a, and the network drills have nothing to act on.

Not walk-forward:

  • The manifold has look-ahead: its map is built from the full history, and the closest-analog search can pick a date after the cursor (the briefing's analog sentence inherits this).
  • Anticipation and the factor baskets use the full history.
  • The Alpha Lab, forward-volatility lab and meta layer use their own fixed train/test splits.
  • Valuation, the factor companion, overnight, crisis replay, the premia allocator and the eight Risk cards use the latest data or fixed windows. One exception: in Backtest, the crash badge's turbulence, absorption and Hawkes readings, the sentiment thermometer's turbulence leg and the diversification card's absorption line come from the cursor date, mixed with latest-date inputs (see the Risk tab).
  • The order-book card is live-only.

Base-rate honesty check

This is the most integrity-preserving part of the console. Real financial crashes are rare (a handful per decade). With such a small sample, apparent "skill" in a backtest is mostly luck and overfitting. For the selected asset, over its whole history (the table does not move with the cursor), the check asks:

  • Unconditional rate: on all days, how often did a drawdown of at least 10% follow within the next 60 trading days?
  • Conditional rate: on days when fragility was ≥70, how often?
  • Time in alarm: what share of days had fragility ≥70?

Event counts sit next to each rate; no confidence interval is drawn, so read the counts. The verdict says the conditional rate is "somewhat above base rate … suggestive, not skill" only when it is more than 1.4× the base rate on at least two events; otherwise "no demonstrated out-of-sample timing skill". The console warns: "Crashes are rare (a handful of real events in a decade), so every rate above has a wide confidence interval; this is a base-rate honesty check, not a backtest of profits."

Scenario sandbox

Drills (planted lead, common shock, volatility spike) work in either mode, with limits in Backtest: the network drills need the cursor on or after about 2023-10-09 (the network needs 12 shared days; crypto starts 2023-09-21), and the volatility spike only shows when the cursor is within about the last 15 trading days of the series — see Scenario sandbox. They let you ask "if SPY's moves started leading everything, how would the network respond?" without touching real data or committing to a real trade.

Base-rate honesty panel

Read it: In Backtest mode, find the 'Backtest replay & base-rate honesty' card at the bottom of the left column. Choose the asset with the header's Detail asset selector (or click a thermometer row). The panel shows conditional vs unconditional drawdown rates with event counts and a "verdict" on whether timing skill is real or noise.
Does NOT mean: Crashes are rare (a handful per decade); every rate has a wide confidence interval. This is a base-rate honesty check, not a backtest of profits or trading performance.

Purpose

Compares the conditional forward-drawdown rate (when fragility ≥ 70) against the unconditional base rate (any day). It tallies the selected asset's whole history, so it does not move with the Backtest cursor. A "drawdown" here means the price falling at least 10% below that day's close at some point within the next 60 trading days. With only a handful of real drawdown events in a decade, hit-rate comparisons are fragile; this panel enforces intellectual honesty.

Outputs (for the selected asset)

RowRateEvents
Unconditional (any day)% of days followed by a ≥10% drawdown within 60 trading days# drawdown days / # days
Conditional on fragility ≥ 70the same, on high-fragility days only# drawdown days / # high-fragility days
Time-in-alarm% of days with fragility ≥ 70—

Below the table, a one-line verdict (see Live vs Backtest mode) and the standing caveat.

GARCH Surrogate Check

The "Compare vs GARCH surrogate" button adds one line: the share of days with fragility ≥70 on a deterministic 1,400-day synthetic GARCH(1,1) series that has volatility clustering but no built-in regime transition. If that share is not near zero, fragility is largely measuring known volatility clustering, not a unique transition. On the current build it is roughly a third of days — so treat fragility mostly as a volatility-clustering read.

Asset Exclusions

  • VIX (volatility index) and the four FX pairs (USD/JPY, USD/CHF, USD/AUD, USD/EUR) are excluded: not holdable long positions, so forward-drawdown base rates do not apply.
  • These assets still feed the cross-asset network, coupling, and turbulence panels.
  • Every other market works: US and international equities, sectors, rates (including SHV and TLT), credit, commodities, the dollar ETF (UUP) and crypto.

Asset coverage & exclusions

Read it: The "Detail asset" selector in the header lists all 51 markets, grouped by empirical factor basket (plus a Crypto group) rather than by asset class. Use it to drive Indicator detail, the base-rate table and the volatility-spike drill.
Does NOT mean: Asset exclusions are not data gaps; they reflect that volatility indices and FX rates are not holdable long positions, so forward-drawdown rates don't apply.

Full Asset Universe

51 assets across multiple classes (a richer basket sharpens the multivariate stress measures and adds a genuine global-contagion view):

  • US equities (6): SPY, QQQ, IWM, AAPL, MSFT, NVDA
  • International equities (14): EEM (Emerging Mkts), EFA (Developed ex-US), VGK (Europe), EWG (Germany), EWU (UK), EWJ (Japan), MCHI (China), INDA (India), EWY (Korea), EWT (Taiwan), EWZ (Brazil), EWC (Canada), EWW (Mexico), ACWX (World ex-US)
  • Sectors (8): XLF (Financials), XLK (Technology), XLE (Energy), XLV (Health Care), XLI (Industrials), XLU (Utilities), XLP (Staples), IGV (Software)
  • Rates (4): TLT (20y+ US Treasuries), SHV (short US Treasuries, 0–1y T-bills), BWX (Intl Treasury ex-US), BNDX (Intl Bond, USD-hedged)
  • Credit (6): LQD (US IG), HYG (US High-yield), VCIT (US IG corp), EMB (EM sovereign, USD), EMLC (EM local-currency sovereign), IBND (Intl corp bond)
  • Commodities (4): DBC, USO (Crude), GLD (Gold), CORN (Agriculture)
  • Dollar (1): UUP (a fund that tracks the US dollar against six major currencies — not an exchange rate)
  • Crypto (3): BTC, ETH, SOL
  • FX pairs (4): USD/JPY (yen per US dollar), USD/CHF (Swiss francs per US dollar), USD/AUD (Australian dollars per US dollar), USD/EUR (euros per US dollar) — labelled JPY, CHF, AUD and EUR in the network and asymmetry matrix
  • Volatility (1): VIX

The 2026 expansion added the missing S&P sectors, short-duration rates, intermediate credit, an agricultural commodity, and a global equity layer (Europe, Germany, UK, Japan, China, India, Korea, Taiwan, Brazil, Canada, Mexico, World-ex-US) — chosen for distinct stress-transmission roles. Important — global markets and timezones: the international markets are added as US-listed regional ETFs, which all close at 4pm ET. This is deliberate: it keeps them synchronized with the rest of the basket and avoids the non-synchronous-trading bias (Lo-MacKinlay) that native local-hours indices (Nikkei, DAX…) would inject into the lead-lag network — where the later-closing market spuriously appears to "lead." The honest tradeoff is that these ETFs reprice overnight foreign news during the US session, so any "lead" the US shows over them in the directed network is partly a mechanical repricing artifact, not pure information flow (this caveat is shown on the network panel itself).

What Feeds Which Panels

  • All 51 (including crypto): directed spillover network, asymmetry matrix, cascade and network structure; fragility thermometer, indicator detail, surprise lens, Hawkes. The network uses only dates all 51 share — including crypto, whose history starts on 2023-09-21 — so in Backtest it is empty before then, and too thin to estimate until it has 12 shared days (about 2023-10-09) — its panels say "not enough shared history at this date" rather than show numbers — and runs on a shorter-than-252-day window until roughly late 2024. International ETFs carry the timezone caveat above.
  • The 48 non-crypto names (US and international equities, sectors, rates, credit, commodities, the dollar, FX and VIX — history back to 2016): coupling (ρ̂) and absorption ratio, turbulence, manifold, anticipation, factor baskets, the Alpha Lab's turbulence signal, the diversification check and the factor companion.
  • SPY-based: forward-volatility lab, meta layer, volatility-sizing dial, the crash badge's skew, the sentiment thermometer's forward returns, the synthetic stress-test, and (with TLT) the ballast read.
  • Base-rate honesty: every asset except VIX and the four FX pairs (not holdable long positions).

Where the data comes from & data health

Read it: The console merges live feeds into a 10-year snapshot, with crypto (~3.1y) and rolling 252-day windows. Live data never required — snapshot always available.
Does NOT mean: This is NOT a real-time prediction engine. It is a descriptive snapshot-plus-refresh architecture that gracefully degrades if live feeds fail.

Embedded real-history snapshot: the foundation

The console rests on data baked into the page, so it always works without a network:

  • Daily closes for all 51 markets. US-listed stocks and ETFs (including the international ETFs) and VIX from mid-June 2016; FX from June 2015; crypto (Binance.US) from 2023-09-21 (~3.1 years). The series end on slightly different days: all 44 Yahoo series (the US-listed stocks and ETFs, including the international ones, and VIX) and FX on 2026-10-21; crypto on 2026-10-20, its last completed daily candle. Until live data arrives, the directed network and the panels built on it (asymmetry matrix, cascade, network structure), which use only days all 51 markets share, therefore run to 2026-10-20; the panels on the 48 non-crypto names (coupling and absorption, turbulence, the manifold, factor baskets, Anticipation, the Alpha Lab, the diversification check) and the SPY-based ones run to 2026-10-21.
  • 19 FRED macro series (wealth shares, income, Gini, saving rate, home prices, labor share, Fed funds, recession probability, yield curves, credit spreads, financial conditions, the real rate, inflation expectations, jobless claims, consumer sentiment, unemployment) — used by the structural backdrop, forward macro and the vol lab's macro experiment. Published daily from official graph CSV downloads and checked at startup, every visible hour, on visibility return, and on request; last good/embedded observations remain available if an update fails. Annual/quarterly release lags remain explicit. History includes revisions, so cursor replay is not an as-released macro-vintage backtest.
  • Daily open/close for SPY, QQQ, IWM, GLD and TLT (June 2016 – October 2026) for the overnight card. Embedded only.
  • Shiller CAPE, monthly, 1881 – June 2026 (the valuation regression is fitted through September 2024), for the valuation card and the sentiment thermometer's greed leg. Embedded only.
  • The cross-sectional factor demo's results, frozen as text.

Live refresh architecture (fail-silent design)

When operating in Live monitor mode, the console tries to refresh every one of the 51 series once at load and then every 10 minutes, asking each feed for data from that series' snapshot end onward (not just the last few weeks), so the first live close joins the stored history without a hole. It refuses to merge a live tail across a gap of more than 7 calendar days — otherwise the first live bar would book weeks or months of movement as one "daily" return inside every cross-asset window — and Data health then reports that feed as gap — snapshot too old to bridge, with its series left on the snapshot. A single feed failure never blanks the console — the snapshot remains the floor.

  • Binance.US crypto: daily klines for BTC, ETH and SOL, from each series' snapshot end; status marked live when reachable.
  • Frankfurter FX (api.frankfurter.dev, ECB reference rates): USD against EUR, JPY, CHF and AUD, from the snapshot end; updates when available.
  • Yahoo Finance daily charts (a range reaching back to each series' snapshot end): ^VIX and all 43 US-listed stocks and ETFs. A browser cannot call Yahoo directly, so requests go through a relay: an optional self-hosted Cloudflare worker if one is set in the page's EQUITY_PROXY setting (empty by default), otherwise the public api.allorigins.win relay, with a 9-second timeout. The public relay is flaky; when it fails, those series simply stay at the snapshot.
  • Binance.US order book: top-20 depth for BTC, ETH and SOL every 5 seconds, used only by the bid vs ask card (not listed in Data health).

If a refresh changes no prices, nothing is recomputed. Which panels recompute when prices do change is listed under Live vs Backtest mode.

Data health indicators

The Data health card (on every tab) shows one chip per source, each with a coloured dot:

  • Teal dot = loaded — the embedded snapshot ("embedded real history · loaded")
  • Green dot = live refresh succeeded (for Yahoo, at least one symbol came back)
  • Amber dot = currently loading
  • Red dot = unavailable; console continues on snapshot
  • Dim dot = idle (not yet attempted this session)
  • gap — snapshot too old to bridge = the feed answered, but its data cannot be joined to the stored series without a gap of more than 7 calendar days, so those series stay on the snapshot

Below them: markets as of 2026-10-20 (newest series 2026-10-21) · N days old — the oldest series end, which holds back every cross-asset panel that includes that series (teal dot, amber when more than 4 days old; on the embedded snapshot that series is crypto, so only the 51-market directed network and the panels built on it stop at 2026-10-20, while the panels on the 48 non-crypto names run to 2026-10-21); after a live refresh that updated only some series, the line ends with · still snapshot: …, naming them (or counting them when there are more than six); macro (FRED published/fallback, retrieved YYYY-MM-DD) latest points …; and CAPE (Shiller, embedded) through 2026-06. The header's as-of pill shows the same oldest date: green when at most 4 days old, otherwise amber — labelled as the snapshot only when no live feed has updated any series this session, otherwise as the oldest series (see Reading the console at a glance).

Window specifications & alignment

For all analytics:

  • Systemic panels (spectral radius, absorption ratio, turbulence, diffusion map): the 48 non-crypto names, reaching back to 2016; crypto is excluded from these so the baseline keeps its length.
  • Per-asset fragility thermometer: each asset uses its full available history (10y equities/FX, ~3.1y crypto); a score needs about a year of history to start.
  • Network & directed spillover: all 51 markets (equities, FX, crypto, commodities, vol, rates); the window is the last 252 trading days they all share.
  • Backtest mode: walk-forward for most panels — at the cursor date those use only data up to that day; the exceptions are listed under Live vs Backtest mode.

Overlapping asset coverage

Cross-asset panels compute on the intersection of dates: only days on which every market in the panel has a price. One series that stops early, or never refreshes, holds all of them back — which is why the as-of date is the oldest series end. Systemic coupling and turbulence need at least 3×N = 144 shared days in their 252-day window; the manifold needs at least 200 shared days in total.

Why it borrows the water dashboard's lenses but not its foresight

Read it: Markets have no fixed topology, no accumulation, no exogenous drivers, and no hidden state. Every structural advantage the water system has for forecasting is inverted in markets.
Does NOT mean: Do not treat elevated readings as predictive signals. They show current stress, not future moves.

The Resilience Telemetry console applies several structural analogs from the Saint Petersburg SCADA water-monitoring system (which can warn hours ahead). However, four critical market differences prevent the same forward-looking skill:

1. Fixed topology vs. estimated and rewiring

Water: The pipe network and elevation structure are ground-truth, surveyed and stable. Pressure and flow respond to known fixed constraints.
Markets: The cross-asset correlation network is estimated from noisy daily returns and systematically rewires when a crisis hits. Historical "lead-lag" dissolves; everything converges to one mode (panic). The topology is a ghost until it breaks.

2. Conservation vs. price instantaneity

Water: Water piles up in tanks of known volume and travels pipes at known speed. Total level + rate-of-rise → calculable time-to-overflow.
Markets: Nothing accumulates. A crowded position unwinds in milliseconds through price. There is no quantity to integrate forward; only the expectation of future supply/demand is priced. A crowded trade can evaporate before any aggregating metric signals it.

3. Exogenous drivers with real lead time vs. endogenous and already priced

Water: Rain and surge are exogenous — coming whether or not anyone forecasts them, and don't change course because operators reacted to yesterday's forecast.
Markets: The "drivers" (Fed policy, CPI, flows) are already priced into expectations by the time they become observable. Information arbitrage across venues means any stable upstream-leads-downstream edge is traded to lag zero. Surprise is all that remains — by definition, unforecastable.

4. Hidden-state telemetry vs. price as the expectation

Water: SCADA reads a tank level only the operator can see. The gauge is independent of what happens next; observing it does not change the water level.
Markets: Price is the aggregate expectation. There is no hidden state to telemeter. Worse, observing a gauge — discussing a risk, hedging it, trading on it — immediately changes the expectation and the price. Markets exhibit reflexivity; water systems do not.

Consequence: thermometer, not forecast

The spectral radius (ρ̂), absorption ratio, turbulence, Hawkes branching ratio, and timed lead-lag are built as a systemic-stress thermometer. By their authors' own admission, these metrics rise during 2008, 2020, and 2022 — not before. They are coincident-to-lagging measures of stress, not predictive. The only weakly-leading construct is the standardized absorption-ratio shift, and even that is sample-dependent and has not held out-of-sample.

This is exactly why everything here stays descriptive, not predictive. The console tells you where the market sits today, in geometric and spectral terms, relative to its own history — not where it will go.

FAQ for investors & operators

Read it: High readings persist for years without crashing. Lead-lag is association, not causation. Closest analogs are geometric, not predictive. Descriptive, not predictive.
Does NOT mean: This is not a black-box trading system or a crash-prediction tool. It is a diagnostic for understanding current market stress.

Q: Is a high reading (fragility ≥70) a sell signal?

A: No. A high fragility reading is a descriptive statement: "This asset's stress indicators — persistence, amplitude, tail — have been rising faster than is usual for it." It does not predict when a drawdown will occur. Readings can stay high for months or years without significant correction; conversely, crashes sometimes begin from low readings. This is a stress thermometer, not a market-timing tool.

Q: I've seen elevated readings for months with nothing happening. Does that mean the console is broken?

A: No, that is expected and honest. With only a handful of real drawdown events in a decade, the base-rate chance of a crash on any given day is already low. An elevated thermometer reading may raise that chance somewhat, but from a small number. The Backtest / base-rate honesty panel quantifies this: if you find that fragility ≥70 raises the chance of a ≥10% drawdown within the next 60 trading days from (say) 6% to 8%, that is the true signal — modest and uncertain. The console will never claim otherwise.

Q: Does an arrow in the network mean A causes B?

A: No. An arrow i→j means i's past returns line up with j's future returns more than j's past lines up with i's future (lagged cross-correlation asymmetry). It is related to — but simpler than — the "Granger causality" tests of econometrics (it does not control for j's own past), and like them it is purely correlational. Causes can include: genuine information cascades (rare), different market-open times, measurement lag, or simple overfitting. Any stable edge gets arbitraged away; what you see is mostly the noise of the week.

Q: Is the "closest-analog" state a prediction?

A: No. The diffusion map shows that today's state is geometrically closest to (say) 2019 or 2021. That historical state is a coincident analog — it looked similar. But it does not predict that the same moves will follow. Markets have short memory, regime shifts can happen overnight, and new shocks are always possible.

Q: What does it mean if spectral radius is rising?

A: It means the cross-asset correlation matrix is concentrating its variance in fewer eigenmodes. Assets are moving more in sync. This is a real, measurable signal of systemic tightness — but it is a coincident signal, visible during 2020 and 2022 as the crisis unfolded, not cleanly ahead of time. Rising coupling makes the system more fragile to the next shock, but the shock's timing and magnitude are unforecastable.

Q: If the Hawkes branching ratio approaches 1, is a crash imminent?

A: No. A branching ratio near 1 (critical coupling) means large shocks are currently self-reinforcing — they beget more large shocks. This is a real description of the shock cascade active right now. But it does not tell you how long the cascade will last, how large the next shock will be, or when it will end. You are observing the stress, not predicting its duration.

Q: What if all the indicators are red and the diffusion map shows the stressed arm?

A: That is a coherent stress description: the market is exhibiting high fragility, tight coupling, strong shock clustering, and a geometric regime similar to past crises. It is useful context for risk managers — but by the console's own rule it is not a reason to trade: review hedge ratios, concentration and liquidity assumptions on the schedule and by the rules you set in advance, not because a gauge lit up. It does not tell you to sell everything immediately, nor does it guarantee a crash by Friday. It is an honest call to heightened vigilance, not to action.

Q: Can I backtest a strategy on these signals?

A: The Alpha Lab (Predictive tab) is exactly that: a net-of-cost, walk-forward backtest of a turbulence-triggered trade with a Deflated Sharpe and PBO check — and as built it finds no edge. Backtest / research mode adds a base-rate table for fragility (conditional vs unconditional drawdown rates with event counts; no confidence intervals are drawn, so read the counts). But be warned: with a dozen real drawdown events in 10 years, apparent backtest "skill" is mostly luck. And even an edge that seemed to survive testing would not change the console's rule: no reading here justifies a trade.

Q: Is the volatility channel different from GARCH?

A: Not meaningfully. Realized volatility (the amplitude sub-score) and the bimodality coefficient mostly restate volatility clustering, which GARCH models directly. If you run a GARCH on the same asset, you will see similar conditional-vol spikes. The surprise lens (AR(1)+EWMA-vol log-likelihood) is more independent, but still a simple model. Neither the volatility channel nor surprise are strong out-of-sample predictors of drawdowns.

Q: What does the covariance shrinkage α do in the turbulence panel?

A: It blends the sample covariance matrix with a scaled identity (every variance set to the average, all correlations zero) to reduce estimation noise when data is scarce or dimensions are high. Higher α = more shrinkage. The default (0.20) is moderate. If covariance becomes ill-conditioned (nearly singular), α auto-raises to at least 0.5. Adjust the slider to see how turbulence readings change with shrinkage, but remember: turbulence itself is a coincident metric, not forward-looking.

Q: Can I use this for real-time trading?

A: No. The console is for situational awareness, not trading — including "risk-management" trades. By its own rule no reading here may justify a trade: not tightening stops, adding hedges or cutting leverage because fragility or coupling looks high ("the market looks fragile" is never a reason). If you want risk controls, write them down in advance — the Risk tab's pre-commitments and your own volatility band — and let the rule act, not the gauge. Trying to trade the direction or timing of these signals will likely fail out-of-sample.

Glossary

Read it: See definitions of all key terms: spectral radius, absorption ratio, fragility thermometer, LCCA, diffusion map, Hawkes, turbulence, surprise, DFA, bimodality, and more.
Does NOT mean: These are technical terms; understanding them is important for interpreting the console correctly and avoiding false signals.
Absorption ratio
The fraction of total variance in a correlation matrix captured by the top k eigenmodes (Kritzman-Li metric; k = 10 for the console's 48 names). High ratio = little local shock-absorbing capacity; most variance is driven by a few shared modes. It is not a one-factor share (that is ρ̂). Where the console ranks today's value against its own history, it uses a rolling history of the same 252-day measure. Coincident, not leading.
AC1 (Lag-1 autocorrelation)
Correlation between today's return and yesterday's return. In efficient markets, ~0. Rising values suggest slower mean-reversion (critical-slowing-down analogue). Weak in returns; mostly restated by volatility clustering.
Backtest / research mode
Walk-forward computation for the panels that follow the cursor: at any cursor date, those statistics use only data up to that date. Several panels do not follow the cursor — the manifold (which has look-ahead), anticipation, the factor baskets, the Alpha Lab, forward-volatility lab and meta layer, valuation, the factor companion, overnight, crisis replay, the premia allocator, the eight Risk cards (one exception: the crash badge, the sentiment thermometer's Panic leg and the diversification card's absorption line reuse the turbulence, absorption and Hawkes readings as of the cursor date, mixed with latest-date inputs) and the live-only order book (see Live vs Backtest mode). The base-rate table, which does not move with the cursor either, compares actual forward drawdowns over the asset's whole history to the base rate. Strict honesty check against luck.
Base-rate honesty
A statistical comparison of how often a ≥10% drawdown followed within 60 trading days on days when fragility was ≥70 (conditional rate) vs. on any day (unconditional base rate). If conditional ≈ unconditional, there is no demonstrated timing skill.
Bimodality coefficient
Statistical measure of "two-humped" distribution shape. Rising bimodality suggests the asset is flickering between calm and stressed states. Often a false positive driven by GARCH vol clustering alone.
Branching ratio (Hawkes)
In a Hawkes self-exciting point process, the expected number of child shocks per parent shock. Ratio ~1 = critical (approaching instability); <<1 = shocks die away fast.
CAPE (cyclically adjusted P/E)
Shiller's price-to-earnings ratio using the 10-year average of inflation-adjusted earnings. Weakly informative about the next decade's real returns, useless at the console's 5–20-day horizon. Embedded through June 2026.
Critical-slowing-down (CSD)
In physics, the analogue of rising recovery time, persistence, and amplification near a phase transition. These metrics (AC1, DFA, rvol, bimodality) borrow the analogy from CSD, but in markets they rise during stress, not before, and are largely coincident or even lagging.
Cross-correlation asymmetry (LCCA)
Matrix A(i→j) = D(i→j) − D(j→i), where D(i→j) is the average absolute (Fisher-z) correlation of i's past returns with j's future returns over lags 1–4 — not a Granger test. Anti-symmetric: red when i leads j, blue when j leads i. Predictive association, not causation.
CSCV / PBO
Combinatorially symmetric cross-validation: cut the history into blocks, try every half-and-half split, and count how often the configuration that won in-sample lands below the median out-of-sample. That share is the probability of backtest overfitting (PBO). The Alpha Lab uses 10 blocks, without purging.
Deflated Sharpe ratio
The probability that a strategy's Sharpe ratio beats the best Sharpe you would expect from the same number of no-skill tries, adjusted for skew and fat tails (Bailey–López de Prado). It shrinks apparent edge; it never creates it.
Diffusion map
A nonlinear dimensionality-reduction technique (generalization of spectral decomposition / PCA) that embeds high-dimensional states (here, 10-day mean returns of the 48 non-crypto names) into a low-D space so that similar regimes cluster.
DFA (Detrended fluctuation analysis) / Hurst exponent α
Measures scaling of cumulative returns; α ≈0.5 = random walk (no persistence), α >0.5 = more persistence (slow mean-reversion), α <0.5 = mean-reverting. Needs long windows; lags regime shifts; mostly descriptive.
Directedness ratio (Σ|A|/ΣD)
A network statistic: sum of absolute asymmetries divided by total lagged cross-correlation magnitude. High ratio = clear leader-follower structure; low ratio = moves are simultaneous, with no clear leader. A common (simultaneous) shock adds co-movement without a leader, so it lowers the ratio or leaves it about unchanged — see the common-shock drill. Reads n/a when the network has no shared history (Backtest before 2023-09-21).
Eigenvalue (λmax)
The dominant (largest) eigenvalue of a correlation matrix. Normalized by N (number of assets), it gives the spectral radius ρ̂. Dominance = systemic coherence; in crises, ρ̂ rises as assets correlate to one mode.
Filtered historical simulation (FHS)
A stress-test method: standardize past returns by the volatility of their day, resample those standardized moves, and rescale them to today's volatility. Keeps real fat tails without a black-box model; cannot produce a crisis worse than the moves it resamples.
Fragility thermometer
A per-asset 0–100 score combining three channels (persistence, amplitude, tail) built from seven indicators, measuring how steeply those indicators have been rising over the last 60 days relative to the asset's own history. High ≠ crash; can persist for years. Descriptive, not predictive.
Granger causality / lead-lag
Statistical test of whether past values of X help forecast Y more than Y's own past alone. "Lead" means X's past is predictive for Y's future; "lag" means the reverse. The console's lead-lag is the simpler LCCA asymmetry, not a Granger test. In markets, either is association driven by mechanics, measurement lag, and overfitting, not true causation.
Hawkes process
A self-exciting point process where arrivals (shocks) increase the intensity of future arrivals (branching ratio n). Fitted to daily counts of ≥2.5σ (EWMA-standardized) shocks pooled across all 51 markets; branching ratio rises in stress.
Ill-conditioned covariance
When a covariance matrix is nearly singular (near-zero or negative eigenvalues), inverse estimates blow up. Shrinkage α or dimension reduction is applied. The console auto-raises α to at least 0.5 if the matrix becomes ill-conditioned.
Mahalanobis distance / turbulence
One-day multivariate generalization of z-score. Measures how unusual today's cross-asset move is relative to the recent covariance. Risen in 2020/2022 (coincident), not before. An active-inference analogue (variational free energy) of per-asset surprise.
Manifold / state geometry
The high-dimensional space spanned by historical market states (here, 48-asset 10-day mean returns). A diffusion map embeds it into 2-D; similar regimes cluster. Coincident description of the market's regime geometry, not predictive of next state.
Participation ratio
The effective number of independent factors in a correlation matrix: (Σλ)² / Σλ² over its eigenvalues, i.e. trace² / ‖C‖². 48 names with a participation ratio of about 4.8 behave like fewer than five independent bets.
Permutation-gated null
Statistical test: circularly shift every series by its own random offset (160 draws) to break any lead-lag timing, recompute the asymmetries, and count a link i→j as significant only if its asymmetry exceeds the 95th percentile of its null values. Each pair is tested on its own at about the 5% level with no multiple-testing correction, so across 1,275 pairs a few dozen passes are expected by chance; the network draws the 12 strongest asymmetries and marks the passing ones solid.
Realized volatility (rvol)
The standard deviation of daily returns over a window, annualized (√(252 × variance)). A measure of magnitude of fluctuations. Rising rvol mostly restates GARCH vol clustering; a coincident metric, not predictive.
Recovery rate λ = −ln φ
Derived from AR(1) coefficient φ. λ measures the rate of exponential reversion to mean; rising λ = faster recovery. Sibling of AC1; largely redundant information in markets.
Shrinkage (α)
Regularization parameter for covariance estimation: C_shrink = (1−α)×C_sample + α×(tr C / N)×I. Higher α = more smoothing, better condition number, but less responsiveness to true covariance changes. Default 0.20; auto-raised to at least 0.5 if ill-conditioned.
Snapshot (embedded real history)
Daily closes for all 51 markets from 2016 (FX from 2015; ~3.1 years of crypto) to 20–21 October 2026, plus embedded FRED macro series, open/close data for five funds and Shiller CAPE through June 2026. Baked into the HTML; always available even if live feeds fail.
Spectral radius ρ̂
The dominant eigenvalue of the rolling cross-asset correlation matrix, normalized by N. Measures systemic coupling: ρ̂→1 = tight coupling (all move together); ρ̂ low = loose coupling (independent shocks). Coincident stress metric, not predictive.
Surprise lens (active-inference analogue)
One-step negative log-likelihood of a simple AR(1)+EWMA-volatility model. Rising = today's moves are more surprising to a simple expectation model. An active-inference variational-free-energy analogue, not the full EFE engine. Per-asset, not systemic.
Walk-forward validation
Strict backtesting methodology: at any in-sample date, all parameters are estimated using only data up to that date. Forward metrics are computed on future data. Prevents look-ahead bias. The console's Backtest mode does this recomputation only for the panels that follow the cursor — not for the manifold, anticipation, the factor baskets, the labs and meta layer, valuation, the factor companion, overnight, crisis replay, the premia allocator, the Risk cards (apart from the cursor-date turbulence, absorption and Hawkes readings that three of them reuse, mixed with latest-date inputs) or the order book (full list under Live vs Backtest mode).

Tickers & abbreviations

Read it: Every ticker and abbreviation the console shows, spelled out. On the console, anything with a dotted underline — plus the network nodes and the asymmetry matrix's labels — shows its definition when you hover over it or tap it; buttons and labels list theirs in a hover title. Dotted-underlined terms in this wiki work the same way.
Does NOT mean: A fund appearing here is not a recommendation to hold it, and the one-line descriptions are simplified — check the issuer's own documents for holdings, fees and risks. UUP is a dollar fund; USD/CHF and the other pairs are plain exchange rates. They often move together, but they are different things.

The 51 markets

SPY — SPDR S&P 500 ETF Trust
Fund tracking the S&P 500 index: 500 large US companies.
QQQ — Invesco QQQ Trust
Fund tracking the Nasdaq-100: the 100 largest non-financial companies on the Nasdaq exchange (tech-heavy).
IWM — iShares Russell 2000 ETF
Fund tracking the Russell 2000: about 2,000 small US companies.
XLF — Financial Select Sector SPDR Fund
Fund holding the financial companies in the S&P 500 (banks, insurers, asset managers).
XLK — Technology Select Sector SPDR Fund
Fund holding the technology companies in the S&P 500.
XLE — Energy Select Sector SPDR Fund
Fund holding the energy companies in the S&P 500 (oil, gas, energy equipment).
AAPL — Apple Inc.
A single company's stock.
MSFT — Microsoft Corporation
A single company's stock.
NVDA — NVIDIA Corporation
A single company's stock.
TLT — iShares 20+ Year Treasury Bond ETF
Fund holding US government bonds that mature in more than 20 years; very sensitive to interest rates.
LQD — iShares iBoxx $ Investment Grade Corporate Bond ETF
Fund holding investment-grade (higher-rated) US corporate bonds.
HYG — iShares iBoxx $ High Yield Corporate Bond ETF
Fund holding high-yield ("junk", lower-rated) US corporate bonds.
DBC — Invesco DB Commodity Index Tracking Fund
Fund holding futures on a basket of commodities: energy, metals and agriculture.
USO — United States Oil Fund
Fund holding US crude-oil futures (West Texas Intermediate grade).
GLD — SPDR Gold Shares
Fund holding physical gold.
VIX — Cboe Volatility Index
Not a fund: the stock market's expected volatility over the next 30 days, implied by S&P 500 option prices (the "fear gauge").
UUP — Invesco DB US Dollar Index Bullish Fund
Fund that rises when the US dollar strengthens against six major currencies (euro, yen, pound, Canadian dollar, Swedish krona, Swiss franc).
BTC — Bitcoin
Cryptocurrency, priced in US dollars (Binance.US).
ETH — Ether
Cryptocurrency of the Ethereum network, priced in US dollars (Binance.US).
SOL — Solana
Cryptocurrency of the Solana network, priced in US dollars (Binance.US).
USD/JPY — US dollar / Japanese yen
Exchange rate: how many Japanese yen (JPY) one US dollar buys. Rises when the dollar strengthens against the yen.
USD/CHF — US dollar / Swiss franc
Exchange rate: how many Swiss francs (CHF) one US dollar buys. Rises when the dollar strengthens against the franc.
USD/AUD — US dollar / Australian dollar
Exchange rate: how many Australian dollars (AUD) one US dollar buys. Rises when the US dollar strengthens.
USD/EUR — US dollar / euro
Exchange rate: how many euros (EUR) one US dollar buys. Rises when the dollar strengthens against the euro.
XLV — Health Care Select Sector SPDR Fund
Fund holding the health-care companies in the S&P 500.
XLI — Industrial Select Sector SPDR Fund
Fund holding the industrial companies in the S&P 500 (aerospace, machinery, transport).
XLU — Utilities Select Sector SPDR Fund
Fund holding the utility companies in the S&P 500 (electricity, gas, water).
XLP — Consumer Staples Select Sector SPDR Fund
Fund holding the consumer-staples companies in the S&P 500 (food, drink, household goods).
EEM — iShares MSCI Emerging Markets ETF
Fund holding stocks of emerging-market countries (e.g. China, India, Taiwan, Brazil).
EFA — iShares MSCI EAFE ETF
Fund holding stocks of developed markets outside the US and Canada (Europe, Australasia, Far East).
SHV — iShares Short Treasury Bond ETF
Fund holding US Treasury bills that mature within a year; close to cash.
VCIT — Vanguard Intermediate-Term Corporate Bond ETF
Fund holding investment-grade US corporate bonds maturing in about 5–10 years.
IGV — iShares Expanded Tech-Software Sector ETF
Fund holding US software companies.
CORN — Teucrium Corn Fund
Fund holding corn futures.
VGK — Vanguard FTSE Europe ETF
Fund holding stocks of developed European countries.
EWG — iShares MSCI Germany ETF
Fund holding German stocks.
EWU — iShares MSCI United Kingdom ETF
Fund holding UK stocks.
EWJ — iShares MSCI Japan ETF
Fund holding Japanese stocks.
MCHI — iShares MSCI China ETF
Fund holding Chinese stocks.
INDA — iShares MSCI India ETF
Fund holding Indian stocks.
EWY — iShares MSCI South Korea ETF
Fund holding South Korean stocks.
EWT — iShares MSCI Taiwan ETF
Fund holding Taiwanese stocks.
EWZ — iShares MSCI Brazil ETF
Fund holding Brazilian stocks.
EWC — iShares MSCI Canada ETF
Fund holding Canadian stocks.
EWW — iShares MSCI Mexico ETF
Fund holding Mexican stocks.
ACWX — iShares MSCI ACWI ex U.S. ETF
Fund holding stocks from developed and emerging markets worldwide, excluding the US.
BWX — SPDR Bloomberg International Treasury Bond ETF
Fund holding government bonds of developed countries outside the US, in their own currencies.
BNDX — Vanguard Total International Bond ETF
Fund holding investment-grade bonds issued outside the US, hedged back to US dollars.
EMB — iShares J.P. Morgan USD Emerging Markets Bond ETF
Fund holding emerging-market government bonds issued in US dollars.
EMLC — VanEck J.P. Morgan EM Local Currency Bond ETF
Fund holding emerging-market government bonds in their local currencies.
IBND — SPDR Bloomberg International Corporate Bond ETF
Fund holding investment-grade corporate bonds issued outside the US, in local currencies.

Currency codes

JPY — Japanese yen
Currency code. The console labels the USD/JPY exchange rate "JPY" in the network and asymmetry matrix (USD/JPY = Japanese yen per US dollar).
CHF — Swiss franc
Currency code. The console labels the USD/CHF exchange rate "CHF" in the network and asymmetry matrix (USD/CHF = Swiss francs per US dollar).
AUD — Australian dollar
Currency code. The console labels the USD/AUD exchange rate "AUD" in the network and asymmetry matrix (USD/AUD = Australian dollars per US dollar).
EUR — euro
Currency code. The console labels the USD/EUR exchange rate "EUR" in the network and asymmetry matrix (USD/EUR = euros per US dollar).

Abbreviations

AC1 — lag-1 autocorrelation
How much today's value resembles yesterday's.
ACWI — All Country World Index
MSCI's index of developed and emerging stock markets.
AQR — AQR Capital Management
An investment firm known for published factor research.
AR — absorption ratio
The share of all variance captured by the few strongest common factors; high = markets moving as one. (In "AR(1)" it means an autoregressive model of order 1: today predicted from yesterday.)
BEA — Bureau of Economic Analysis
The US agency behind the national-income and output data.
BLS — Bureau of Labor Statistics
The US agency behind the jobs and consumer-price data.
CAPE — cyclically adjusted price-to-earnings ratio
Shiller's valuation measure: price divided by the average of the last 10 years of inflation-adjusted earnings.
Cboe — Chicago Board Options Exchange
CDF — cumulative distribution function
The probability that a value comes out at or below a given level; used here to turn a statistic into a percentile.
CI — confidence interval
The range the true value plausibly lies in.
COVID — coronavirus disease 2019
The pandemic whose onset caused the February–March 2020 market crash.
CPI — consumer price index
The standard US measure of inflation.
CSCV — combinatorially symmetric cross-validation
The resampling scheme used to estimate PBO.
CSD — critical slowing down
A system recovering more slowly from small shocks as it nears a tipping point.
CV — cross-validation
Testing a model on data it was not fitted on, in rotating folds.
DALBAR — DALBAR Inc.
A research firm whose widely cited investor-behaviour study has been criticised for its method.
DAX — Deutscher Aktienindex
Germany's main stock index (40 large companies listed in Frankfurt).
DB — Deutsche Bank
The original sponsor of the fund's index.
DFA — detrended fluctuation analysis
Measures how persistent a series is (a Hurst-style exponent).
DSR — deflated Sharpe ratio
The probability that a strategy's risk-adjusted return is really above zero, after allowing for how many variants were tried and for fat tails.
EAFE — Europe, Australasia and Far East
ECB — European Central Bank
It publishes the daily reference exchange rates that Frankfurter serves.
EFE — expected free energy
The planning quantity in active inference.
EM — emerging markets
Developing economies such as China, India, Brazil or Mexico.
ERP — equity risk premium
Here, the Shiller earnings yield minus the 10-year Treasury yield: how much more stocks "earn" than safe bonds yield.
ET — US Eastern Time
New York time, when US markets close at 4pm.
ETF — exchange-traded fund
A fund that trades on a stock exchange like a single share.
EWMA — exponentially weighted moving average
An average that gives recent observations more weight.
FAQ — frequently asked questions
FHS — filtered historical simulation
Replaying past moves, rescaled from the volatility they happened in to today's volatility.
FOMC — Federal Open Market Committee
The Federal Reserve body that sets US interest rates.
FRED — Federal Reserve Economic Data
The St. Louis Fed's free database of US economic series.
FTSE — FTSE Russell
An index provider (originally Financial Times Stock Exchange).
FX — foreign exchange
Currency exchange rates.
GAN — generative adversarial network
A machine-learning model that generates synthetic data.
GARCH — generalized autoregressive conditional heteroskedasticity
The standard model in which volatility clusters: calm and turbulent spells each tend to persist.
GFC — global financial crisis
The 2007–09 banking and credit crisis.
HTML — HyperText Markup Language
The format web pages are written in.
HY — high-yield
"junk" bonds, rated below investment grade.
IC — information coefficient
The correlation between a signal's ranking of markets and their actual next-period returns.
IG — investment-grade
Bonds rated BBB− / Baa3 or better by the credit-rating agencies.
LCCA — lagged cross-correlation asymmetry
Whether one market's past moves line up with another's later moves more than the reverse.
LLM — large language model
An AI system that generates text.
MSCI — MSCI Inc.
An index provider (originally Morgan Stanley Capital International).
NET — net spillover score
How much more a market's past moves line up with others' later moves than the reverse. Positive = net transmitter, negative = net receiver. Association, not cause.
NLL — negative log-likelihood
How improbable a move was under a model; higher = more surprising.
NY — New York
"NY Fed" = the Federal Reserve Bank of New York.
OAS — option-adjusted spread
The extra yield a bond pays over comparable US Treasuries.
OLS — ordinary least squares
The standard straight-line fit.
PBO — probability of backtest overfitting
How often the setting that looked best in the fitting data does worse than the median on data it was not fitted on.
PCA — principal component analysis
Finds the few combined directions along which many series move most.
PnL — profit and loss
Q1 — first quarter
January–March.
Q2 — second quarter
April–June.
Q3 — third quarter
July–September.
Q4 — fourth quarter
October–December.
R² — R-squared
The share of the ups and downs a forecast explains (0 = none; below 0 = worse than simply predicting the average).
RECPROUSM156N — FRED series ID
The Chauvet–Piger smoothed US recession probabilities.
S&P — Standard & Poor's
The company behind the S&P 500 index of 500 large US companies.
SCADA — supervisory control and data acquisition
The telemetry system that reads sensors across water and power networks.
SPDR — Standard & Poor's Depositary Receipts
State Street's fund brand.
USD — US dollar
UTC — Coordinated Universal Time
VAR — vector autoregression
A model that predicts each series from the recent past of all the series.
VFE — variational free energy
A measure of surprise from the active-inference framework.