QqqVolatilityManagedTrendExposure
Hypotheses
Volatility-Managed QQQ Exposure with Trend Filter — Long-Only Timing of Nasdaq-100 ETF, Scale Exposure Inversely to Realized Volatility While Above the 200-Day Trend, Threshold-Rebalanced (USEQ, Daily Bars, 2-Parameter)
Hypotheses
Iteration 2 addresses the reported failure (avg_trade_return_pct -1.666% over 77 trades) by removing the two things that made each round trip negative rather than by touching the vol-targeting mechanism itself. (1) The old rebalance band was measured on NOTIONAL DRIFT vs equity. Because the target notional grows with mark-to-market equity, that rule mechanically added shares into price strength and trimmed into weakness INSIDE a single position: a winning trend trade therefore closed with a volume-weighted open price well above its entry and a volume-weighted close price well below its exit, so its realized per-trade return collapsed (and real money was lost buying high / selling low intra-trade). The band is now measured on the target WEIGHT relative to the weight last traded, so resizes fire only when realized vol roughly halves or doubles — most trades now have zero intra-trade resizes and the round trip is a clean trend trade. (2) An entry-only SMA-slope filter (SMA today >= SMA 20 sessions ago) drops pokes above a FALLING 200-day average, the worst-expectancy trend-follower trades, which lengthens the average hold and raises per-trade return without shortening winners (the filter never forces an exit). Everything that already passed Layers 1-3 is untouched: same imports, same class/interface, same continuous weight signal, same long-only USEQ whole-share sizing, same reduce-only trim path. Trade count falls (fewer whipsaw entries, far fewer resizes) but the 200-day cross still fires several times per 6-year sandbox window, so >=1 trade is safe. Honest note: vol targeting inherently trims winners when vol spikes, so its benefit is risk-adjusted rather than per-trade; if the per-trade figure is still below the 0.05% USEQ floor after this change, the metric is telling us the mechanism cannot clear the bar on this instrument and it should be abandoned rather than tuned.
Hypotheses
Overfit / not-statistically-significant death, NOT a fee-edge death (per-trade return 0.289% clears the USEQ floor). Three unwaivable HARD gates fail: walk-forward is_overfitted=TRUE (avg IS 0.617 -> avg OOS 0.376, one OOS window 0.0), PBO 0.7328 > 0.5, and the holdout carries only 9 trades. Robustness confirms best-of-N noise: deflated_sharpe 0.851 < 0.95, is_significant=false, Sharpe CI [0.273, 1.014], and it fails programme-level FDR (keeps 4 of 245, candidate_survives=false). Per the overfit-vs-dead-premise rule, IS/OOS collapse with a high PBO is ABANDON not revise. Two structural problems make iteration hopeless: (1) NO ALPHA — information_ratio is negative (-0.36) with beta ~0.1-0.28, so this is closet-long QQQ beta, not an active edge, and the optimizer's own 'best' config pushes target_vol to the 0.05 floor (avg exposure 38%, CAGR 3.25%), i.e. the only way to lift Sharpe is to stop trading; (2) UNVALIDATABLE cadence — 57 trades over 27 years with the OOS vault flagged underpowered (~16 expected trades vs 100 needed), so no parameter tuning can produce a statistically inferable OOS. The sensitivity surface is flat (~0.40-0.53, 0 cliffs) with no untapped robust region to tune toward, and the same vol-managed-exposure mechanism has already died in siblings (QQQ vol-regime long-short -> fee_edge, BTC trend-gated vol-managed long/flat -> overfit x2). No articulable path lifts OOS Sharpe 0.376 to the 1.5 promotion floor. Failure pattern: overfit / not-significant (single-instrument vol-managed trend overlay, no alpha over buy-hold).
Implementation
Long-only QQQ (USEQ, daily bars) held while price is above its 200-day SMA, sized inversely to 20-day realized volatility (target_vol/realized_vol, capped at 100% of equity). Entries additionally require the 200-day SMA to be rising over the last 20 sessions. An open position is resized ONLY when the volatility-implied target weight moves more than rebalance_band (50%) in relative terms from the weight last traded — i.e. on a genuine vol-regime change, not on price/equity drift. Exit is a close back below the 200-day SMA.
Verification Results
Verify the base FactoryStrategy invokes the subclass min_bars_required(); the override's larger warm-up requirement is intentional and correct, so no change needed if the base honors it.
Verification Results
min_bars_required(self) overrides/shadows the base framework method (flagged by static analysis). The override deliberately extends the warm-up to cover sma_days + slope_days, which is correct and needed, but confirm the base template actually calls this override to gate signal evaluation rather than relying on its own implementation.
Verification Results
Sandbox underperforms buy-and-hold on a risk-adjusted-vs-benchmark basis (information_ratio -0.42, beta 0.27, alpha 0.034) and the stressed vol tercile is slightly negative (-1.5%, Sharpe -0.04). This is expected for a vol-targeting sleeve whose value is risk-adjusted (lower drawdown, Sharpe 0.91, max DD 12.4%) rather than absolute outperformance. Analyst should judge the full-history backtest on Sharpe/drawdown vs buy-and-hold, not on beating buy-hold total return. Trade count is low (8 round trips in the sandbox window) because entries are gated on the 200-day cross + rising slope; over full 25-year daily QQQ history this should produce enough regime cycles, but sample-size adequacy is worth confirming.
Backtest Review
Iteration-2 fix worked: avg_trade_return_pct is now +4.088% of notional (was -1.67%), far above the USEQ 0.05% fee floor. The drift-rebalance defect that was destroying per-trade edge is resolved by anchoring the resize band to the vol-implied target weight instead of MTM drift.
Backtest Review
Decisive, reliable sample: 27 years of QQQ daily bars (1999-2026), 58 discrete position episodes + 131 fills, metrics_reliable=true. Plenty of regime cycles to make 2 hours of optimization meaningful.
Backtest Review
Clear gross edge above costs: profit_factor 5.36, positive Sharpe 0.586 (mtm_equity_curve basis, the correct measure), max drawdown 22.5% (< 60%), commissions/impact only 0.43% of gross.
Backtest Review
Trades implement the hypothesis: 58 long / 0 short, entries gated on the 200-day cross + rising-slope filter, single-name QQQ weight <= 1.0 (per-trade return is not a leverage/compounding artifact). Mechanism (volatility-managed exposure + trend filter) is well-documented and sound.
Backtest Review
Only two free parameters (target_vol_annual, rebalance_band) with structural settings fixed — a clean, low-overfitting search space.
Backtest Review
Underperforms buy-and-hold on a risk-adjusted-vs-benchmark basis (information_ratio -0.25, beta 0.28, alpha 0.022, CAGR 6.36%). This is expected for a vol-targeting sleeve whose value is drawdown control, not absolute outperformance, and USEQ PnL excludes QQQ dividends (~1-2%/yr) so absolute return is understated — but it means the promotion Sharpe bar will be hard to clear.
Backtest Review
Sharpe 0.586 sits below the promotion tier; the stressed vol tercile is barely positive (Sharpe 0.073). Optimization may lift risk-adjusted return but is unlikely to reach a 1.5-Sharpe promotion.
Backtest Review
end_unrealized_pct 39.9 (~9% of the 432% headline) — modest, but the final open position carries some unrealized MTM; judge realized/risk-adjusted metrics at the promotion stage.
Analysis
Iteration-2 fix held: avg_trade_return_pct is now +0.289% of notional (optimized) / +4.09% (default), comfortably above the USEQ 0.05% fee floor. This is NOT a fee-edge death.
Analysis
Clean, non-fee-fragile mechanics: zero commissions, impact only 0.71% of gross, profit_factor 4.81, low max drawdown 8.56%, sensitivity surface flat with 0 cliff parameters.
Analysis
The vol-managed-exposure mechanism (Moreira-Muir) is a documented effect and the code correctly implements a long-only, reduce-only, band-rebalanced sleeve above a rising 200-day SMA.
Analysis
Three UNWAIVABLE hard gates fail: walk-forward is_overfitted=TRUE (avg IS Sharpe 0.617 -> avg OOS 0.376, with one OOS window at 0.0), PBO 0.7328 > 0.5 (selection more likely than not overfitting), and the holdout has only 9 trades (< 10 min).
Analysis
Statistically not distinguishable from noise: deflated_sharpe 0.851 < 0.95, is_significant=false, Sharpe CI [0.273, 1.014], and it does NOT survive programme-level FDR (BH q=0.10 keeps 4 of 245; candidate_survives=false).
Analysis
No alpha over the benchmark: information_ratio is NEGATIVE (-0.36 optimized / -0.25 default), beta 0.11-0.28, benchmark_correlation ~0.57 — this is essentially closet-long QQQ beta, not an active edge, and it does not beat buy-and-hold risk-adjusted.
Analysis
The optimizer's 'best' config drives target_vol_annual to the 0.05 floor, cutting avg_position_pct from 73% to 38% and CAGR from 6.36% to 3.25% — the search says the way to raise Sharpe is to be barely invested, a tell that there is no scalable edge.
Analysis
Structurally unvalidatable: 57 trades over 27 years; the OOS vault is flagged UNDERPOWERED (~16 expected trades vs 100 needed) — 'no slice of history short enough to leave training data is long enough to validate a strategy this slow.'
Analysis
Sibling failures confirm the class: QQQ vol-regime long-short abandoned (fee_edge), BTC trend-gated vol-managed long/flat abandoned (overfit x2), majors vol-managed basket abandoned.
Analysis
Per-trade edge below costs: avg_trade_return_pct -1.666% vs the 0.05% fee floor over 77 trades. Optimization cannot fix this; change the mechanism, holding period or timeframe so the per-trade return clears the floor, or recommend abandoning.
Analysis
Benjamini-Hochberg at q=0.10 over 245 programme candidates keeps 4. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.
Outcome Summary
QqqVolatilityManagedTrendExposure-89c986978b
Outcome Summary
This iteration-2 strategy managed QQQ exposure by scaling position size inversely to realized volatility while above a rising 200-day trend, having fixed a prior drift-rebalance defect that had made per-trade edge negative. The backtest review approved optimization: per-trade return was now well above the USEQ fee floor, profit factor was strong (5.36) and drawdown modest, though it already underperformed buy-and-hold on a risk-adjusted basis. Optimization exposed the fatal problems — walk-forward overfitting (IS 0.617 vs OOS 0.376), PBO 0.73, a 9-trade holdout, a deflated Sharpe below significance, and a negative information ratio showing no alpha over the benchmark. The analyst abandoned it as an overfit / not-statistically-significant death (not a fee-edge death), noting the strategy is structurally unvalidatable at 57 trades over 27 years and that sibling vol-managed strategies had already failed.
Outcome Summary
A vol-managed trend overlay on a single index is essentially closet-long beta (negative information ratio) and, at ~57 trades over 27 years, is structurally too slow to validate out-of-sample — cadence and genuine alpha must be checked before pursuing this class.
Outcome Summary
The analyst abandoned it after optimization: three unwaivable hard gates failed (walk-forward is_overfitted=TRUE with avg IS Sharpe 0.617 collapsing to OOS 0.376, PBO 0.7328 > 0.5, and only 9 holdout trades < 10 min), and it was statistically indistinguishable from noise (deflated Sharpe 0.851 < 0.95, not FDR-significant).
Outcome Summary
A long-only QQQ sleeve that scales exposure inversely to recent realized volatility while price sits above a rising 200-day SMA, resizing only when the vol-implied target weight changes materially.
Outcome Summary
Over 27 years of QQQ daily bars (1999-2026) the default config returned 432% (CAGR 6.36%) with Sharpe 0.586, profit factor 5.36, 22.5% max drawdown and 58 trades; the optimized config cut this to Sharpe 0.644, CAGR 3.25% and 57 trades, but information ratio was negative (-0.36) versus buy-and-hold.
Backtest and paper results are hypothetical. Trading involves risk of loss.