What this is — and what it is NOT
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
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
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
- Spillover structure: directed spillover network, asymmetry matrix & net transmitter / receiver, cascade simulation, network structure.
- System-wide state: systemic coupling, factor baskets, game-theoretic lens, resting bid vs ask size, financial turbulence, market-state manifold.
- Right-hand column: perspectives, structural backdrop, fragility thermometer, indicator detail, surprise lens, Hawkes shock clustering, scenario sandbox.
Predictive — forecasting, the honest ceiling
- anticipation, Alpha Lab (a collapsed card — click its title to open), forward-volatility lab, forecast reliability (meta-learning layer), overnight vs intraday, long-horizon valuation thermometer, factor companion, cross-sectional factor demo, forward macro.
Risk — brake yourself, not the market
- 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 (collapsed — click to open), premia allocator. See The Risk tab.
On every tab
- The In plain English briefing and Data health. In Backtest mode the Backtest replay & base-rate honesty card also appears, at the bottom of the left column of whichever tab is open.
In plain English — what the latest data says (start here)
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
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
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
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
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
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
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
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
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)
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)
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
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
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
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
- 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).
- Direction-adjust so that higher = more fragile (λ and skewness are sign-flipped).
- 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.
- Three channels: persistence = mean of the AC1, λ and DFA z-scores; amplitude = mean of realized vol and bimodality; tail = mean of skewness and kurtosis.
- 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
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)
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
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)
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)
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?
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
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
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
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
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)
- 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
- 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)
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
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
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
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
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
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
- 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
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
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
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
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
| Sleeve | Proxy (for the drawdown) | Assumed yield | Illustrative total return |
|---|---|---|---|
| Cash / short T | SHV | 3.9% | 3.9% |
| Treasuries | TLT | 4.5% | 4.4% |
| IG credit | LQD | 5.2% | 5.0% |
| US equity | SPY | 1.4% | 7.0% |
| International | EFA | 3.2% | 6.5% |
| Gold / real | GLD | 0.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
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
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)
| Row | Rate | Events |
|---|---|---|
| Unconditional (any day) | % of days followed by a ≥10% drawdown within 60 trading days | # drawdown days / # days |
| Conditional on fragility ≥ 70 | the 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
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
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):
^VIXand 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'sEQUITY_PROXYsetting (empty by default), otherwise the publicapi.allorigins.winrelay, 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
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
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
- 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
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.