Thrasher 2017 — Forecasting a Volatility Tsunami
Author: Andrew Thrasher, CMT · Portfolio Manager, Financial Enhancement Group ·
SSRN ·
2017 Charles H. Dow Award winner · 18 pages
The thesis in one sentence: Contrary to popular belief, "low VIX" or "large VIX decline"
doesn't reliably forecast a VIX spike. What does: low dispersion of the VIX itself, measured as its
20-day rolling standard deviation. When the VIX goes quiet, it's about to get loud.
"Just as the seas become calm and the tide pulls back from the shore before the striking of a violent tsunami,
the movement of the VIX often declines, sending the index's dispersion to extremely low levels prior to the
Index spiking higher." — Thrasher 2017
What This Monitor Tracks
- VIX 20-day rolling standard deviation — the dispersion of the VIX itself over the past 20 trading days. The single primary indicator.
- 15th-percentile threshold — adaptive: recomputed from the full available VIX history each day. Paper's empirical value on the 2006–2016 sample:
0.86.
- Signal trigger — fires when StdDev(20) ≤ threshold and no prior signal in the past 10 trading days (dedup avoids clustering).
- VVIX dispersion (secondary) — same methodology applied to the "VIX of the VIX". Paper's threshold:
3.16. Tracked but the paper shows it does not improve the signal.
- 15-day forward window — Thrasher measures forward max in subsequent 15 trading days (3 weeks).
How a Signal Reads
- OFF — StdDev(20) above the 15th-percentile threshold. Normal dispersion regime.
- COMPRESSED — StdDev(20) at-or-below threshold but within the 10-day dedup window from a prior signal. Vol is still compressed but the model has already fired.
- FIRED — Threshold met, dedup cleared. New volatility-tsunami warning active. Telegram alert sent.
What the Paper Found (Backtest 2006–2016)
Over 10 years of daily data, 70 VIX spikes (defined as ≥30% rise close-to-high within 5 trading days). Thrasher's
signal produced 52 occurrences after dedup. Three-week forward change in VIX, by method:
| Method |
Avg Max |
Median Max |
Avg Min |
Median Min |
| VIX 20d StdDev signal | +34.30% | +23.01% | -8.67% | -8.74% |
| VVIX 20d StdDev signal | +27.21% | +15.93% | -10.71% | -10.06% |
| Combined VIX + VVIX | +27.53% | +14.95% | -10.45% | -9.76% |
| 4-Week Low VIX (popular method) | +24.94% | +20.13% | -9.26% | -7.85% |
| 15%+ VIX decline in 3 days | +22.27% | +16.13% | -17.07% | -15.81% |
| All VIX days (baseline) | +25.76% | +17.71% | -14.07% | -12.87% |
Key result: the pure VIX-dispersion signal beats every alternative on every metric.
+54% greater upside than the popular "large VIX decline" method, with half the downside drawdown.
Adding VVIX hurts the signal — VIX alone is the winner.
What the Author Explicitly Notes
- Parameters are not optimized — the 20-day lookback follows Bollinger's convention, the percentile follows sample-size considerations. Tuning could improve performance.
- Not every signal triggers a spike — "nearly every signal is followed by a spike, but not every spike follows a signal."
- Not a complete trading strategy — Thrasher proposes this as a barometer/risk-management tool, not an entry-exit system.
- Sample-size tradeoff — tighter percentile = fewer signals, higher hit rate. 15th percentile was chosen for a useful sample size.
Operational Details (this implementation)
- Data source: Yahoo Finance
^VIX and ^VVIX daily closes via yfinance.
- Sample window: 10 years rolling (~2,500 trading days).
- Threshold: 15th percentile recomputed daily from the full available StdDev(20) series. Adaptive, not hardcoded.
- Storage: SQLite table
vix_dispersion in finance/research.db.
- Schedule: sentinel task
vix-dispersion-check daily at 4:05 PM ET (weekdays, post-close).
- Alert: Telegram message when signal fires (StdDev ≤ threshold, dedup cleared).
- Log:
/var/lib/jarvis/data/vix-dispersion-log.json — every fired signal recorded with full metric snapshot.
How to Use This Signal
- Monitor the StdDev(20) value on the dashboard card. When it drops near or below the threshold, vol regime is entering the "calm before the storm."
- Treat a fired signal as a 3-week risk-management window. Historically, the VIX has been about 34% higher (avg max) somewhere in the next 15 trading days.
- Cross-check with Vixologist template — when both fire, the conviction is strongest.
- Cross-check with Lakha correlation divergence — implied correlation greatly above realized while dispersion compresses amplifies tail risk.
- Plan exits — Thrasher doesn't prescribe one, but practical exits are: StdDev breaking back above the threshold, or a 30%+ VIX move, whichever comes first.
References
Doc last updated: 2026-05-17. When the script changes (threshold logic, lookback,
forward window), update this page alongside the code.