▶ Full Post Text
I built a two-signal system that detects institutional regime shifts before price impact. I received some great feedback from r/quant and couldn't crosspost, so I'm sharing the backtest and live output here directly instead. Let me know what you think or if you have questions.
# What It Does
Two signals from factor covariance dynamics:
* **Lambda-F:** Detects factor rotation (institutions repositioning between sectors)
* **Correlation:** Detects synchronized selloffs (everything dumps together)
Lambda-F provides 20-60 day lead time. Correlation confirms during the event.
**TL;DR:**
* Inputs: Daily ETF returns, 105-day rolling covariance
* Outputs: ΛF percentile + Corr percentile + regime label
* Tested: 33 pre-specified market-event pairs, episode-level FP counting
* Live: [Dashboard](https://github.com/vonlambda/lambda-f-dashboard)
# Backtest Results (2000-2024)
|Market|Events|Detection|Examples|
|:-|:-|:-|:-|
|US Equity|4|4/4|Dot-Com, GFC (57d lead), Q4 2018, 2022 Bear|
|UK Equity|3|3/3|Eurozone 2011, Mini-budget 2022|
|Germany|3|3/3|Eurozone 2011, Energy Crisis 2022|
|Commodities|4|4/4|Oil Bust 2014-16 (115d elevated)|
|Gold|2|2/2|Q4 2018, $2000 Breakout|
|Crypto|3|3/3|Nov 2021 (31d lead before ATH)|
|Bonds|6|6/6|Taper Tantrum, 2022 Crash, SVB Crisis|
|EM|8|8/8|Taper Tantrum, China Deval, COVID flight|
**Total: 33/33 pre-specified market-event pairs triggered at least one signal under stated rules.**
**False positives:** 0.8 episodes/year vs 4.5/year for rolling volatility > P90. Episodes defined as: first trigger → ignore until both signals reset below threshold for ≥3 days.
**Exogenous shocks excluded by design:** COVID (DM), Terra, 3AC, FTX. Framework targets institutional repositioning, not purely exogenous events with no precursor.
# Signal Behavior Examples
**GFC 2008:** 188-day early warning, 57-day confirmation aligned with BNP Paribas fund freeze.
**Live Signal (90-Day History):** Current regime state with P90/P75 threshold lines visible.
# Live Output (2026-01-07)
|Market|ΛF %ile|Corr %ile|Regime|Rule Met|
|:-|:-|:-|:-|:-|
|Commodities|98%|84%|**CRITICAL**|ΛF ≥ P90|
|Gold|82%|71%|ELEVATED|ΛF ≥ P75|
|Crypto|77%|44%|ELEVATED|ΛF ≥ P75|
|Bonds|39%|65%|Normal|—|
|Germany|22%|13%|Normal|—|
|US Equity|72%|14%|Normal|—|
|UK Equity|59%|6%|Normal|—|
|EM|5%|20%|Normal|—|
**Thresholds:** ELEVATED = ΛF ≥ P75 or Corr ≥ P90. CRITICAL = ΛF ≥ P90 or Corr ≥ P95.
Commodities at 98% CRITICAL. Gold/Crypto ELEVATED. Equities normal (US at 72%, just under threshold).
**Dashboard:** [github.com/vonlambda/lambda-f-dashboard](https://github.com/vonlambda/lambda-f-dashboard)
# Implementation Notes
* Factors: Sector ETFs (not PCA). Benchmarked PCA variants under same episode rules—higher FP/year and missed 2022 Bear entirely (57% peak vs ETF's 95%).
* Tested adding style factors (value/growth/momentum) - diluted the signal, not worth it
* Tested ρ̇ (correlation derivative) for earlier warning - actually triggers 14 days *later*, raw ρ is better
* Thresholds: Lambda ≥ P75 = ELEVATED, ≥ P90 = CRITICAL. Correlation ≥ P90 = ELEVATED, ≥ P95 = CRITICAL.
* *Why asymmetric?* Correlation spikes more frequently in short-lived panics—higher thresholds reduce noise.
* Data: Daily ETF returns, rolling 105-day covariance window
# Stats
* Detection: 33/33 (100%)
* FP rate: 0.8/year (elevated signals cluster around events—avg run 18-24 days vs \~4 days expected under noise)
* Avg lead time: 22 days
* Precision: 79%
# Questions
1. If you want to reproduce: tell me your preferred asset universe (SPDR sectors vs MSCI industry vs futures), and I'll add a config.
2. Most useful critique: leakage/labeling, episode counting, or baselines—happy to share exact rules.
*Not financial advice. Posting to get feedback on methodology.*