Case study · Backtest
🗓 Backtest period: 2020-01-01..2024-07-01
Spec ID: spec-correlation-geometry-volatility-regime-overlay-us-stocks-1787304647 · Generated: 2026-08-21 09:47 UTC
Cluster: Risk Overlay · Sub Cluster: Correlation Eigenspace Spy-To-Cash Volatility Control
A monthly risk overlay measures persistent rotation in the subdominant correlation eigenspace of a point-in-time large-cap stock universe. When REC improves completed out-of-sample SPY variance forecasts, positive REC readings reduce SPY exposure in favor of cash.
Large changes in the cross-sectional correlation structure may reveal latent market reorganization before that risk is fully reflected in index-level realized volatility. The signal focuses on modes two through four rather than the dominant market mode, seeking information about changing sector and stock relationships that conventional SPY volatility measures can miss.
The economic claim is deliberately conditional: REC is used only after its one-month variance forecasts achieve lower historical QLIKE than a baseline containing VIX and lagged SPY realized variance. This gate recognizes the paper-consistent null that correlation geometry may add no useful information for SPY or may fail to improve portfolio performance.
[code omitted from public view]
| Param | Value | Notes |
|---|---|---|
| Signal universe | Point-in-time top 500 US stocks | Ranked by capitalization; re-screened using aiquant_screening_table |
| Tradable asset | SPY | Long-only overlay; VIX is a nontradable control |
| Defensive asset | Cash | Configured return is 0% |
| Sampling | Monthly signals from daily data | Monthly prices are last available adjusted closes |
| Correlation lookback | 12 months | Stocks with any missing return in a window are dropped |
| Eigenspace | Modes 2-4; K = 3 | Leading market mode is excluded |
| REC persistence | 3-month trailing mean | Raw REC is the mean squared sine of three principal angles |
| Portfolio standardization | Expanding; 36-month burn-in | Portfolio z-score clipped to [-2, 2] |
| Forecast standardization | Expanding; no fixed burn-in | No clipping; uses observations available through each forecast origin |
| Forecast horizons | 1-9 months | Activation gate uses the one-month horizon |
| Forecast gate | At least 12 completed pairs | Activate only when augmented-model mean QLIKE is below baseline QLIKE |
| Active SPY weight | clip(1 - 0.5 × max(z_REC, 0), 0, 1) |
Negative REC z-scores do not increase exposure above 100% |
| Inactive SPY weight | 100% | Residual allocation is cash |
| Exposure bounds | 0%-100% SPY | Executable position cap is 100%; no overlay leverage |
| Framework leverage ceiling | 4× | Nonbinding for the specified 0%-100% SPY overlay |
| Rebalance | First available SPY close after month-end | New weight applies only after execution |
| Explicit overlay cost | 1 bp per one-way notional | Charged on absolute changes in SPY weight |
| Platform costs | $0.004/share; $1 minimum; 1% maximum commission | Slippage is configured at 0 bps |
| Backtest window | 2020-01-01 to 2024-07-01 | Daily source bars with monthly signal construction |
| Reported trades | 55 | Trade accounting is platform-defined |
| # | Concern | Status |
|---|---|---|
| 1 | Point-in-time universe membership | Specified: each window uses the capitalization-ranked universe applicable at its endpoint rather than a final-date constituent list. |
| 2 | Signal and execution timing | Specified: the month-end signal uses data through that close and executes at the first available subsequent SPY close; returns before execution are excluded. |
| 3 | Forecast-gate outcome availability | Specified: QLIKE uses only forecast outcomes fully completed by the evaluation month-end. |
| 4 | Standardization leakage | Specified: both portfolio and forecast regressors use expanding statistics available through the forecast origin; forecast-null simulations receive the same transformation. |
| 5 | Missing-data and price imputation | Specified: no return or execution-price imputation is permitted, and incomplete stocks are dropped within each estimation window. |
| 6 | Fundamental release timing | Not applicable: the strategy uses prices, capitalization screens, VIX, and realized variance rather than earnings or filing data. |
position_sizing.max_position_size_pct is 1.0 (100%), while constant provenance assigns the same parameter 0.1 (10%). The implemented fixed-SPY and inactive weights require 100%, so a 10% interpretation would materially change the strategy; the paper's portfolio and timing results do not describe either version of this SPY overlay.clip(1 - 0.5 max(z_REC,0),0,1) exposure rule are prospective adaptations rather than paper rules. They invalidate comparison with the paper's short-variance Sharpe ratios, equal-volatility timing tests, capture rates, payoff shares, loss frequencies, and worst-month results.The backtest produced a positive 68.15% total return with a 0.73 Sharpe ratio and 0.91 Sortino ratio, but volatility remained 20.70% and maximum drawdown reached -36.47%. Beta versus SPY was 0.91, indicating that the portfolio retained substantial equity-market exposure. The 94.12% win rate and 52.58 profit factor are based on only 55 platform-defined trades and should not be interpreted as independent monthly observations. Because no fixed-SPY, volatility-target, QLIKE, or transaction-cost-drag results are supplied here, the run does not establish incremental forecasting value or superior risk-adjusted performance.
Recomputed here from the run's stored daily returns, because every annualized figure in the table above is derived from the LENGTH of that array (years = n / 252). Only total return and max drawdown do not depend on the row count, so when the recomputed and stored values differ by a common factor, those two are the numbers to trust.
| Check | From the run's own returns | Note |
|---|---|---|
| Daily-return rows | 1,131 | 1.00x the 1,134 trading days in 2020-01-01..2024-07-01 |
| Distinct dates | 1,131 | one row per date |
| Date span | 2020-01-02 .. 2024-07-01 | |
| Sum of daily returns | 68.15% | matches the reported total return |
| Sharpe from these rows | 0.73 | stored 0.73 |
| Volatility from these rows | 20.70% | stored 20.70% |
| Max drawdown from these rows | -36.47% | stored -36.47% |
| CAGR from these rows | 12.28% | stored 12.28% |
| Metric | Value |
|---|---|
| Total Return | 68.15% |
| Sharpe | 0.73 |
| Sortino | 0.91 |
| Calmar | 0.34 |
| Max Drawdown | -36.47% |
| Volatility | 20.70% |
| Beta vs SPY | 0.91 |
| Win Rate | 94.12% |
| Profit Factor | 52.58 |
| Total Trades | 55 |
| Symbols | 500 (A, AAPL, ABBV, ABNB, ABT, ACGL, ACN, ADBE, ADI, ADM, +490 more) |