EthDailyVolTargetedTSMomentumLS
Hypotheses
ETH USD-M Daily Volatility-Targeted Time-Series Momentum, Long-Short (Single-Instrument BINANCE Perp, Trend Signal with Inverse-Realized-Volatility Exposure Scaling for Drawdown Control, Pure OHLCV, Tail-Safe, Low-Parameter)
Hypotheses
A LONG-SHORT, SINGLE-INSTRUMENT, DAILY time-series momentum strategy on ETHUSDT.BINANCE (USD-M perpetual) whose distinguishing feature is a VOLATILITY-TARGETING overlay: it takes the factory's validated daily trend signal but scales position EXPOSURE INVERSELY to recent realized volatility (Moreira-Muir volatility-managed momentum), de-risking when volatility is high and re-risking when calm. The explicit objective is NOT another trend re-skin but DRAWDOWN CONTROL: every prior trend run in this factory — even the validated ones — carried 50-70% max drawdowns, and volatility-managed momentum is the single most-documented method to raise the Sharpe/Calmar of a trend signal by cutting exposure precisely when high-volatility regimes deliver poor risk-adjusted trend returns. It is the only remaining modification that changes the validated edge's RETURN PROFILE rather than merely relocating it, after the design space collapsed to a single viable point: signals restricted to OHLCV+funding (all census feeds — liquidations/OI/account-ratio/taker — confirmed multi-year data-walled); contrarian/fades all closed out; single-name PRICE trend clones add no edge/diversification beyond the promoted BTC/ETH/SOL TS-momentum; spot overlays artifact-prone; multi-instrument (incl. single-position rotation) engine-broken. It is engineered strictly inside proven-safe ground: ETH (a validated core trender — its TS-momentum sibling is at paper_stage); OHLCV-ONLY (deepest wall-free data); MOMENTUM/with-trend (not a fade); DAILY (adequate trade sample — avoiding the thin-sample trap); USD-M PERP (vol-scaling via leverage/qty, NOT spot — avoiding the spot equity-marking/position-stacking artifact that inflated the prior vol-managed and capitulation spot runs); SINGLE-INSTRUMENT/SINGLE-VENUE/SINGLE-ACCOUNT (no multi-instrument aggregation bug); and TAIL-SAFE caps (exposure hard-capped at leverage <=1.5, hard ATR stop, per-position notional cap) to prevent the LINK-style blowup. CRITICAL sizing guard: exposure must be BOUNDED (target_vol/realized_vol clamped to <=1.5x and verified to never stack beyond the cap), directly addressing the recurring avg_position_pct-over-target over-exposure flagged across recent perp runs. Low parameter count to resist overfitting.
Hypotheses
Iteration 7 addresses ONLY the reported Layer-3 wall-clock timeout without touching any logic that already passed Layers 1-2. The per-bar state was already O(1) (deque ring buffers with running sum / sum-of-squares; base class caps self._bars at 500 so nothing scales with history), but every bar still crossed into NumPy for scalar log/sqrt/isfinite, which carry heavy per-call ufunc-dispatch/boxing overhead versus C-level stdlib math. The hot path (_push_logret, calculate_signal) now uses math.log / math.sqrt / math.isfinite exclusively — identical IEEE-754 results, so signal, ATR, realized vol, entries, exits and sizing are byte-for-byte unchanged (Layer 2 stays green). NumPy remains imported and used in position_size()'s finiteness guard (entry-only, not per bar), so no import changed (Layer 1 stays green). The config is pinned to the hypothesis's intended 1-DAY timeframe (lowest bar count → smallest wall-clock under sandbox node contention). Purely a cost reduction; the validated volatility-managed momentum edge is untouched.
Hypotheses
failed deflated Sharpe: DSR=0.0, expected-max=1.0869 over 225 trials — the selected optimized Sharpe (0.46) sits FAR below the best-of-N luck bar and is statistically indistinguishable from noise (is_significant=false, sharpe_ci_low=-0.0193 straddling 0, PBO=0.6508>0.5; probabilistic_sharpe 0.9984 vs DSR 0.0 is the textbook PSR-vs-DSR selection-inflation trap). The walk-forward is is_overfitted=TRUE: avg IS 0.769 collapses to avg OOS 0.192 with windows [-0.464, +1.389, -0.349], two of three negative and the average carried by one lucky window. The holdout 'pass' (ratio 2.603) is SPURIOUS — measured against that degenerate 0.192 WF-OOS baseline, so a modest holdout Sharpe (0.50) mechanically produces a large ratio without demonstrating generalization. Sensitivity is clean (0 cliffs) but the ENTIRE grid (~0.25-0.41 Sharpe) sits uniformly below the 1.0869 luck bar, so there is no robust region above significance to tune toward. Fundamentally the strategy adds no risk-adjusted value: NEGATIVE information_ratio in both base (-0.48) and optimized (-0.36) forms with benchmark_meaningful=true, so it loses to simply holding ETH despite low beta (0.18). The differentiating vol-targeting overlay DID reduce drawdown (59.4% -> 42.9%, duration 1069d -> 256d) but did not raise Sharpe/Calmar to significance; the 881% headline is 85% unrealized and outlier-carried (kurtosis 1733, skew 39.9, tail_ratio 0.20 — one multi-month winner dominates, the +178.8% 'day' being its exit-day marking). Not iterate (attempt 1 of 2): the binding failures are structural — an optimized Sharpe below the luck bar, DSR 0.0, PBO 0.65, and an overfit walk-forward with two negative OOS windows — and the flat sub-significant sensitivity surface means a second best-of-225 sweep re-selects noise. The optimizer's flattering refit (Sharpe 0.33 -> 0.46, PF 1.84 -> 3.15) was bought partly by cutting exposure (avg_position_pct 58.3 -> 42.9), which shrinks drawdown without creating an edge. Not revise_hypothesis: ETHUSDT.BINANCE Daily is a valid, data-rich instrument and the hypothesis itself concedes single-name price-trend clones add no edge/diversification beyond the promoted BTC/ETH/SOL TS-momentum — this is overfitting-to-search on a fine target, not a proven mechanism stranded on a dead one, so per the overfit->abandon rule it is abandoned. FAILURE PATTERN: bolting a Moreira-Muir inverse-realized-vol targeting overlay onto a single-asset ETH daily TS-momentum signal does NOT manufacture a promotable edge — vol-targeting genuinely improves the drawdown/Calmar cosmetics (max_dd 59% -> 43%, PF 1.84 -> 3.15) but cannot lift the underlying trend Sharpe above its 225-trial best-of-N luck bar (optimized Sharpe 0.46 < 1.09, DSR 0.0, PBO 0.65, is_overfitted with avg OOS 0.192 across [-0.46, +1.39, -0.35]), and the strategy still posts a negative information ratio vs its own ETH buy-hold. A clean 0-cliff sensitivity surface, a high probabilistic_sharpe (0.9984), a passing holdout ratio computed against a near-zero WF-OOS baseline, and a reduced drawdown measure consistency and cosmetics, NOT statistical significance or forward-generalization.
Implementation
Long-short daily time-series momentum on ETHUSDT USD-M perpetual with a Moreira-Muir inverse-realized-volatility exposure overlay for drawdown control. Signal is the continuous trailing 90-day return; entries fire only when flat (BUY/SELL past a symmetric threshold). Position exposure = target_vol / realized_vol, clamped to [0.10, leverage=1.5], so the book de-risks in high-vol regimes and re-risks when calm. Tail-safe: hard ATR stop, momentum-flip exit, and a per-entry notional guard that caps a single order at equity*leverage with no path to stack past 1.5x. Single-instrument, single-venue, OHLCV-only, daily.
Verification Results
Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit. This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Backtest Review
Strategy functions correctly: 51 trades over 6 years, clean entry diagnostics (51 signaled -> 51 submitted, 0 dropped), balanced long/short (29L/22S)
Backtest Review
Trades faithfully implement the long-short TS-momentum hypothesis: longs held through bull legs (417->2105, 1892->3813), shorts through bear legs (2691->1717, 3285->2315)
Backtest Review
Suspected sizing artifact resolved on inspection: the +158%/+82% 'daily returns' are exit-day markings of legitimate multi-month trend trades, not over-exposure; per-entry notional stays ~0.3-0.5x equity, consistent with the bounded vol-targeting overlay
Backtest Review
Adequate trade sample for a daily strategy, so optimization will not be fitting to noise; profit_factor 1.84 and positive alpha (0.107) indicate a real, if modest, trend edge
Backtest Review
The distinguishing feature (target_vol / vol_lookback / atr_stop_mult) is exactly what the 3-phase optimizer can tune
Backtest Review
Base Sharpe is only 0.33 with sharpe_ci_low -0.90 (straddles 0) — a lot must be delivered by optimization to reach promotable levels, and best-of-225 selection on a single-name trend clone overfits easily
Backtest Review
Returns are outlier-carried (a few multi-month winners dominate; skew 34.6, kurtosis 1310) — trend-typical but fragile
Backtest Review
Negative information ratio (-0.48) vs its own ETH buy-hold with benchmark_meaningful=true — currently adds no risk-adjusted value over just holding ETH
Backtest Review
Core objective NOT yet met: the vol-targeting overlay was meant to control drawdown, yet base max_drawdown is 59.4% — no better than the plain trend runs it was meant to improve on
Analysis
Clean sensitivity surface (0 cliffs) — parameters are individually stable
Analysis
Optimization did improve the stated objective somewhat: max_drawdown 59.4% -> 42.9% and max_drawdown_duration 1069d -> 256d, and profit_factor 1.84 -> 3.15
Analysis
Strategy functions correctly and trades match the long-short TS-momentum mechanism (32L/27S, adequate 59-trade sample)
Analysis
Failed deflated Sharpe: DSR=0.0 with the optimized Sharpe 0.46 FAR below the 225-trial expected-max luck bar of 1.0869 — statistically indistinguishable from best-of-N noise (is_significant=false, sharpe_ci_low=-0.0193 straddles 0, PBO=0.6508)
Analysis
probabilistic_sharpe 0.9984 vs deflated_sharpe 0.0 is the classic PSR-vs-DSR selection-inflation trap
Analysis
Walk-forward is_overfitted=TRUE: avg IS 0.769 -> avg OOS 0.192 with OOS windows [-0.464, +1.389, -0.349], two of three negative and the average carried by one window
Analysis
Holdout 'pass' (ratio 2.603) is spurious — measured against a degenerate 0.192 WF-OOS baseline, not a real forward validation
Analysis
Negative information_ratio (-0.36) vs its own ETH buy-hold (benchmark_meaningful=true) — adds no risk-adjusted value over holding ETH; the vol-targeting overlay did not deliver a promotable Sharpe/Calmar
Analysis
881% headline return is 85% unrealized (end_unrealized_pct=85.1) and outlier-carried (kurtosis 1733, skew 39.9, tail_ratio 0.20) — one multi-month winner dominates
Analysis
Entire sensitivity grid (~0.25-0.41 Sharpe) sits uniformly below the 1.09 luck bar — no robust region above significance to tune toward
Analysis
Do NOT optimize this build — the sweep would tune target_vol_annual and min_exposure, which are near-inert knobs given single-shot entry sizing, silently degrading into a plain mom_lookback/entry_threshold trend optimization on 51 trades across 7 parameters. That is 2 hours spent overfitting a re-skin of the already-promoted TS-momentum sibling. Required changes: (1) REBALANCE IN POSITION — on every primary bar with an open position, recompute scale = target_vol_annual / rv_annual clamped to [min_exposure, leverage], and if it deviates from the position's current effective scale by more than a rebalance band (~20% relative, a band not every-bar, to control fee drag), submit an increment/decrement order returning notional to equity * scale. Keep the should_enter() flat-only guard for new DIRECTIONAL entries; route the rebalance through a separate path that still enforces qty*price <= equity*leverage so the anti-stacking invariant survives. Without this the hypothesis is literally untested. (2) ACCEPTANCE TEST IS NOT SHARPE — after the fix, annualized_volatility must land near target_vol_annual (roughly 20-35%) and max_drawdown must fall well below the 50-70% sibling band. If the rebalanced build still prints ~78% vol and ~59% DD, the premise is dead and we abandon rather than optimize. (3) FIX OR DROP THE ATR STOP — atr_stop_mult=3.0 off a static entry price never triggers over 90-238 day holds (observed mae_pct of -22.0% and -11.3% with no stop-out). Make it a trailing ATR stop from the running peak/trough, or remove it and let the vol overlay carry the risk budget. (4) CUT PARAMETERS from 7 to ~4 before the sweep: freeze atr_period=14 and min_exposure=0.10 as constants; expose only mom_lookback, vol_lookback, target_vol_annual, and the rebalance band. (5) Leave position_size()'s notional guard and the funding accounting alone — both are verified correct. Detailed feedback written to workspace/discussions/111a19dd-04d5-41eb-a5a4-125ca8e85e74/iteration_7_feedback.md
Outcome Summary
This ETH daily long-short momentum strategy aimed to fix the deep drawdowns of prior trend runs by scaling exposure inversely to realized volatility, hard-capped at 1.5x leverage. It traded cleanly through 7 iterations (the last several resolving a recurring Layer-3 wall-clock timeout) and passed the pre-optimization gate with an 'optimize' verdict despite a weak 0.33 base Sharpe. Optimization did improve the stated objective — max drawdown fell from 59.4% to 42.9% and profit factor rose to 3.15 — but the underlying Sharpe (0.46) stayed far below the 225-trial luck bar of 1.09, with a deflated Sharpe of 0.0, PBO of 0.65, an overfit walk-forward, and a negative information ratio versus buy-and-hold ETH. The analyst abandoned it as overfitting-to-search on a fine target rather than a genuine mechanism, since the vol-targeting overlay delivered risk cosmetics but no forward-generalizing edge.
Outcome Summary
Bolting an inverse-realized-vol targeting overlay onto a single-asset daily TS-momentum signal improves drawdown and Calmar cosmetics but cannot manufacture a statistically significant, promotable edge above the search's best-of-N luck bar.
Outcome Summary
The analyst abandoned it at the post-optimization ANALYZING stage: the optimized Sharpe of 0.46 fell far below the 225-trial best-of-N luck bar of 1.0869 with a deflated Sharpe of 0.0, PBO 0.65, an overfit walk-forward (avg IS 0.769 collapsing to avg OOS 0.192 with two of three OOS windows negative), and a negative information ratio (-0.36) versus simply holding ETH.
Outcome Summary
A long-short daily time-series momentum strategy on ETHUSDT.BINANCE perpetuals that scaled position exposure inversely to recent realized volatility (Moreira-Muir vol-targeting) with the explicit aim of controlling the 50-70% drawdowns that plague plain trend runs, capped at leverage <=1.5x.
Outcome Summary
The base backtest returned 316.8% over ~6 years across 51 trades but with only a 0.33 Sharpe and a 59.4% max drawdown; optimization lifted it to 881% return, 0.46 Sharpe, 42.9% max drawdown and profit factor 3.15 across 59 trades, though 85% of the headline return was unrealized and outlier-carried.
Backtest and paper results are hypothetical. Trading involves risk of loss.