Research campaign · Iteration 1 · unassessed
GARCH bottoming signals — what actually held up?
Can a documented GARCH-family volatility forecast identify useful S&P 500 bottom buy entries, or is it better used for exposure sizing?
- Expressions
- 5
- Logged trials
- Not recorded
- Independent events
- Not assessed
- Evidence
- unassessed
What the research found
GARCH-family volatility is useful as a risk state, not a standalone precise bottom oracle.
On the common ^GSPC holdout, inverse-volatility sizing reduced drawdown and improved gross/net Sharpe but gave up CAGR versus buy-and-hold.
Binary high-and-declining volatility entries produced positive forward event averages yet did not beat buy-and-hold portfolio metrics.
Results depend strongly on regime, lag, and fees; no production indicator is promoted.
Mechanism and falsifiers
Not recorded in this iteration.
Not recorded in this iteration.
Confidence and limitations
GARCH forecasts conditional variance, not expected return direction or exact trough date.
Binary bottom thresholds, 20% drawdown, 21-session holding, and ratio threshold are inferred exploratory choices.
State-space uses ^GSPC and a single 2000 calibration cutoff; diagnostics do not constitute a full walk-forward refit matrix.
Close-only repository storage prevents faithful intraday Realized-GARCH and VIX-futures replication.
EGARCH Student-t did not converge in the declared optimizer budget and remains a retained failure.
SPY investable sensitivity and source-faithful open-entry high-volatility rule remain follow-up questions.
No indicator or strategy is promoted from this campaign.
Not recorded in this iteration.
Compare expressions
Download evidenceExploratory results. Check each period, proxy and cost assumption before comparing. — means not recorded.
| Expression / family | CAGR | Sharpe | Max drawdown | Test period | Assessment |
|---|---|---|---|---|---|
| garch-normal-highdecline-dd20symmetric garch exhaustion | — | — | — | Not recorded |
exploratory |
| garch-studentt-ratioforecast current stabilization | — | — | — | Not recorded |
exploratory |
| gjr-studentt-ratioforecast current stabilization | — | — | — | Not recorded |
exploratory |
| egarch-normal-ratiogjr egarch asymmetry | — | — | — | Not recorded |
exploratory |
| garch-normal-inverse-volinverse forecast volatility | — | — | — | Not recorded |
exploratory |
Open an expression to inspect its rules and request confirmation. The request must be submitted by a trusted repository collaborator.
garch-normal-highdecline-dd20
- variant id
garch-normal-highdecline-dd20
- family id
symmetric_garch_exhaustion
- parameters
- family
garch
- distribution
normal
- percentile
0.8
- drawdown
0.2
- holding period
21
- created by
source_expansion
- reason tested
sparse panic-exhaustion entry
- status
exploratory
garch-studentt-ratio
- variant id
garch-studentt-ratio
- family id
forecast_current_stabilization
- parameters
- family
garch
- distribution
student_t
- ratio threshold
1.0
- holding period
21
- created by
source_expansion
- reason tested
relative stabilization entry
- status
exploratory
gjr-studentt-ratio
- variant id
gjr-studentt-ratio
- family id
forecast_current_stabilization
- parameters
- family
gjr
- distribution
student_t
- ratio threshold
1.0
- holding period
21
- created by
source_expansion
- reason tested
negative-shock asymmetry sensitivity
- status
exploratory
egarch-normal-ratio
- variant id
egarch-normal-ratio
- family id
gjr_egarch_asymmetry
- parameters
- family
egarch
- distribution
normal
- ratio threshold
1.0
- holding period
21
- created by
source_expansion
- reason tested
log-variance asymmetry sensitivity
- status
exploratory
garch-normal-inverse-vol
- variant id
garch-normal-inverse-vol
- family id
inverse_forecast_volatility
- parameters
- family
garch
- distribution
normal
- target volatility
0.1
- min weight
0.0
- max weight
1.0
- created by
source_expansion
- reason tested
risk-control overlay
- status
exploratory
Interactive lab
6427 observationsLoading available evidence…
Research record
Source claims, inferred rules, experiments and the evidence behind the assessment.
Source
- papers
Engle 1982 ARCH — https://doi.org/10.2307/1912773
Bollerslev 1986 GARCH — https://doi.org/10.1016/0304-4076(86)90063-1
Nelson 1991 EGARCH — https://doi.org/10.2307/2938260
Glosten/Jagannathan/Runkle 1993 GJR — https://doi.org/10.1111/j.1540-6261.1993.tb05128.x
Fleming/Kirby/Ostdiek 2001 volatility timing — https://doi.org/10.1111/0022-1082.00327
Fuertes/Kalotychou/Todorovic 2015 high-volatility buys — https://doi.org/10.1007/s11156-014-0436-6
- rule
Only the model equations are documented source rules. Every equity entry/exit overlay is labeled inferred.
What the source claims
GARCH-family models forecast conditional variance and can support exposure timing. Asymmetric variants model the larger volatility response to negative shocks. The literature does not say that the highest forecast is the exact market bottom.
Rules actually disclosed
GARCH(1,1): h_t = omega + alpha*epsilon_(t-1)^2 + beta*h_(t-1). GJR adds gamma*I(epsilon<0)*epsilon^2. EGARCH models log variance with signed standardized shocks.
What had to be inferred
A bottom proxy, high-volatility percentile, forecast-decline rule, 20% drawdown gate, forecast/current threshold, 21-session holding period, target exposure, and next-close mapping were all declared exploratory choices.
Research questions
Can a documented GARCH-family volatility forecast identify useful S&P 500 bottom buy entries, or is it better used for exposure sizing?
Data
- target
^GSPC close, 1927-12-30 through 2026-07-24
- tradable sensitivity
SPY, 1993-01-29 through 2026-07-24
- cash
__IRX_TBILL_TR__ derived from ^IRX
- storage
market.sqlite is close-only; Realized-GARCH and VIX-futures branches are data-limited
- execution
Signal at close t, trade next close.
Baseline implementation
- code
research/garch_bottoming.py
- fit
Deterministic bounded scipy L-BFGS-B with Normal or Student-t innovations
- runner
research/garch_bottoming_experiment.py
- diagnostics
research/garch_bottoming_diagnostics.py
What to try interactively
Adjust forecast/current threshold from 0.5 to 1.5.
Change active holding window from 10 to 40 sessions.
Compare trigger count and forward outcome table against the fixed 1.0/21 baseline.
Suggested next research
Run source-faithful Fuertes et al. high-volatility percentile entries, point-in-time rolling refits, SPY investable sensitivity, overlap-aware event inference, and a legal realized-volatility feasibility review.
Trial ledger
- iteration number
1
- objective
Map source rules, implement GARCH/GJR/EGARCH, run common-window state space, diagnose costs/regimes, synthesize and publish.
- status
completed
What the signal looks like
The interactive lab uses the real ^GSPC-derived GARCH-normal forecast-volatility and rolling current-volatility fixture. Change the forecast/current threshold and holding period to recompute the displayed trigger events and overlay grid.
Historical events
GARCH-normal 20%-drawdown entries had 0.765%/1.369%/5.024% mean forward 21/63/126-session returns and positive rates 63.39%/66.14%/72.44% in the gross holdout event study. These are event averages, not a guaranteed trade outcome.
State-space exploration
Eight rows were retained: five converged GARCH-family fits, one EGARCH Student-t optimizer failure, and two data-limited extensions. Every row remains visible in the trial ledger.
Parameter sensitivity
Models: GARCH, GJR-GARCH, EGARCH. Innovations: Normal and Student-t. Horizons: 1/5/21 sessions. Signals: high-and-declining, forecast/current ratio, drawdown confirmation, and bounded inverse-volatility sizing.
What worked
Inverse-volatility sizing had gross Sharpe 0.582, CAGR 5.32%, and max drawdown -26.67%, versus buy-and-hold 0.449/7.00%/-56.78%. At 10 bps the sizing profile remained 0.522/4.70%/-27.43%.
What did not work
No binary bottom overlay beat buy-and-hold on common-window Sharpe/CAGR. GJR and EGARCH did not establish stable superiority. EGARCH Student-t did not converge in-budget.
Why the failures appear to happen
Volatility can remain high during a prolonged selloff. Sparse entries miss the equity risk premium, while ratio/no-drawdown variants remain exposed to large losses. Model differences are smaller than regime and execution effects.
Regime behavior
Inverse-volatility sizing was negative in 2001-2003 and 2007-2009, then positive in later windows. Drawdown-gated entries were especially weak in the GFC window. Recent strength is not a promotion argument.
Timing and cost sensitivity
Increasing one-way cost from 10 to 20 bps reduced inverse-volatility Sharpe for GARCH-normal from 0.522 to 0.462; adding a second session of lag reduced its 10 bps Sharpe to 0.516.
Combinations
The best exploratory combination is a risk-sizing overlay, not a buy trigger. Price confirmation reduces exposure and drawdown but does not solve the missing directional forecast problem.
Agent assessment
The evidence supports recreating GARCH accurately and backtesting its risk-state overlays. It does not support claiming that GARCH alone calls market bottoms.
Next questions
Reproduce Fuertes et al. 2015's rolling high-volatility percentile buy rule under an explicit close/next-close adaptation.
Run point-in-time expanding and rolling refits with a frozen calibration/untouched protocol.
Repeat the strongest sizing and stabilization candidates on SPY with adjusted-return and turnover semantics.
Apply overlap-aware event statistics and block-bootstrap uncertainty intervals.
Resolve EGARCH Student-t convergence through a documented initialization or optimizer change, or retain insufficient evidence.
Assess a legal public realized-volatility source before attempting Realized-GARCH.
Compare GARCH-derived signals with simple EWMA/rolling volatility and implied-volatility percentile baselines.
Review status
awaiting research feedback. Research publication does not imply official admission.
Return to pending research