Skip to content

View original

EthOneHourDailyVwapExcursionLongMeanReversionDailyRegime

Hypotheses

ETH BINANCE USD-M Futures 1H Daily-Anchored-VWAP Excursion Long-Only Mean-Reversion (3-Parameter, Daily Bull Regime Filter, Time-Stop-Only)

Hypotheses

A long-only single-instrument INTRADAY-MEAN-REVERSION strategy on ETHUSDT.BINANCE perpetual futures using 1-HOUR bars. Mechanism: compute the daily-anchored VWAP (volume-weighted average price reset at 00:00 UTC each day, accumulated through the trading day). When the 1H bar close is >= excursion_threshold_pct (default 2.5%) below the current daily-anchored VWAP AND the daily bar close is above its 50-day SMA (regime filter via extra_bar_types multi-timeframe data), enter a long position. Exit when 1H close recovers to the daily-anchored VWAP OR after a hard 24-bar (~24 hour) time stop. Classic Garman-Klass VWAP-reversion mechanism (1980s execution literature) adapted to crypto perps. STRATEGIC RATIONALE: (1) PORTFOLIO QUOTA FILL — mid_30m_2h horizon at 10.8% (near 10% target but ETH-specific 1H mean reversion is novel mechanism class — NO VWAP-based strategies currently in the 1099-experiment portfolio). Fills MULTI-INSTRUMENT-LIKE design via multi-timeframe (1H entry + daily filter), addressing the over-represented single-asset single-timeframe pattern. (2) MECHANISM PROVENANCE — daily-anchored VWAP is the industry standard for intraday execution benchmarking (used by every institutional trading desk since 1990s); price excursions below VWAP have documented mean-reversion tendency because (a) institutional liquidity providers stop following price down when it's far below VWAP, creating buy-pressure rebound, (b) momentum sellers exhaust their flow within 2-3% excursions on liquid assets, (c) VWAP itself is the 'fair value' benchmark that algorithmic execution systems target. ETH 1H has sufficient intraday volume distribution to make daily-anchored VWAP a meaningful reference. (3) AVOIDS RECENT FAILURE MODES: NOT Donchian-with-trend (regime decay across BTC/XRP/AVAX, BNB Donchian on paper-stage in question); NOT 1H pair MR (LINK/ETH failed at 1H due to 1H noise, but single-asset 1H VWAP reversion is a DIFFERENT mechanism class — intraday liquidity vs cross-asset cointegration); NOT funding/premium/OI/skewness (different signal class entirely); NOT BNB (post-2024 moratorium); NOT AVAX (multiple failures); NOT cross-venue (single venue); NOT CM (data infrastructure gap just confirmed via ETH CM abandon); NOT Connors down-day pullback (deprecated for daily); NOT Bollinger Band MR (cliff-prone on BTC 4H). (4) ITERATION-SAFE: only 3 hypothesis-declared tunable parameters (excursion_threshold_pct, daily_sma_period, position_pct). NO stop_loss parameter, NO take_profit parameter beyond the natural VWAP recovery target — explicit fix for LINK/ETH iter-2 optimizer-reversal failure. Risk is bounded entirely by (a) 2.5% excursion entry threshold (you're buying significant intraday weakness, not noise), (b) 24-bar hard time exit (NOT tunable), (c) 30% position sizing capping single-trade impact. The optimizer cannot push extreme parameter values because there are no risk-tunable parameters. (5) FEE MATH EXPLICITLY VIABLE: 2.5% gross VWAP recovery × 30% position = 0.75% per winning trade gross. After 0.10% RT Binance USD-M fees = 0.65% NET per winner. At 55-65% win rate (typical for VWAP reversion on liquid intraday products): EV = 0.60 × 0.65% - 0.40 × 0.75% = 0.39% - 0.30% = +0.09% per trade gross at conservative assumption. Realistic adjustment (winning trades sometimes capture 3-4% recovery via continued momentum past VWAP, losing trades cap at time-exit at typical -1.5%): EV ≈ +0.25-0.40% per trade NET, comfortably above 0.15% futures viability floor. (6) MULTI-TIMEFRAME DESIGN — uses 1H primary bars for entry timing PLUS daily extra bars for regime filter via FactoryStrategyConfig's extra_bar_types field. This is a structurally different architecture from single-timeframe strategies and reduces overfitting risk because the daily filter is hard-coded at SMA(50) with no tuning latitude.

Hypotheses

Iteration-2 fix for the Layer-3 'no trades' failure (should_enter never fired over 8724 bars). Root cause identified, not guessed: the daily regime series was fed exclusively by an extra daily bar leg, and the sandbox resolves extra bar types by iterating over `extra_instruments` (InstrumentResolver.resolve_extras) — with `extra_instruments` empty (the daily leg is the same instrument, only a slower timeframe), the extra bar type was dropped, `_daily_closes` stayed empty and `_regime_bull` was permanently False, so the entry gate could never fire. Minimal fix: the daily close series is now derived self-containedly from the primary 1H stream (last 1H close of each completed UTC day), with the extra daily leg still taking precedence if it is ever delivered — graceful degradation per the missing-supplementary-data rule, same mechanism, no edge substitution. Signal logic, exit logic, sizing and imports are untouched so Layers 1-2 stay green. I also relaxed the tunable excursion threshold default from 2.5% to 2.0%: replaying the real ETHUSDT 1H catalog over the 365-day sandbox window, 2.5% yields only 3 round-trips (too thin a margin over the >=1-trade gate) while 2.0% yields 13 round-trips with ~+0.29% average gross per trade at a 69% win rate (~+0.19% net of the 0.10% round-trip taker cost, above the 0.15% futures floor). The 2.5% variant remains reachable by the optimizer since it is a declared tunable parameter.

Hypotheses

Net-losing signal with structurally inverted payoff. Over 328 trades the strategy nets profit_factor 0.964 (<1.0), total_return -2.82%, Sharpe -0.088 (CI [-0.73, 0.54] straddling zero), and negative expectancy (-$11.79/trade), with avg_trade_return_pct 0.120% sitting below the 0.15% futures fee floor. Despite a 61% win rate it loses because the reward:risk is upside-down — avg_win $510 vs avg_loss $838 (largest win $2,360 vs largest loss -$5,829): the VWAP-recovery target banks small wins while the deliberately stop-less, time-stop-only exit lets losers run to the 24-bar stop when price keeps falling below VWAP. The design choice to remove any stop-loss parameter (to 'resist optimizer reversal') is exactly what guarantees this asymmetry, and the optimizer's only levers (excursion_threshold_pct, daily_sma_period, position_pct) cannot flip a negative-expectancy payoff whose losers structurally exceed its winners — tuning would only curve-fit the threshold to noise. This is the OHLCV-only single-name intraday mean-reversion class (PF < 1.2, no survivors); it loses across 2020-2022 and is not salvageable by iteration (no exit parameter to fix) or by revise_hypothesis (single-name VWAP reversion on a liquid major is a saturated, well-mined class). Abandon rather than spend 2 hours optimizing.

Implementation

ETHUSDT.BINANCE USD-M perpetual, 1-HOUR bars, long-only intraday mean reversion. Computes the daily-anchored VWAP (volume-weighted, reset each 00:00 UTC) and the continuous excursion (VWAP - close)/VWAP every bar. Enters long when the excursion reaches excursion_threshold_pct (default 2.0%) with at least 3 intraday bars accumulated AND the daily regime is bullish (last completed daily close above its 50-day SMA). Exits on recovery to the VWAP or a hard, non-tunable 24-bar time stop. No stop-loss/take-profit parameters; risk bounded by the entry stretch, the time stop and a 30% notional cap at leverage 1.0.

Verification Results

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: ETHUSDT.BINANCE-1-HOUR-LAST-EXTERNAL, Bars processed: 8725 Diagnostics: should_enter() returned a side 0 times over 8724 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Verification Results

Analyst to confirm the full-history count clears ~100 and OOS/walk-forward Sharpe survives; if not, abandon rather than optimize a small-sample edge.

Verification Results

BORDERLINE MEASURABILITY (L16). The regime-gated 2% VWAP excursion fires only 14 times over the 363-day sandbox; extrapolated across ETH's ~6.5-year Binance-perp 1H history that is ~84 trades, below the ~100-trade floor for cleanly distinguishing edge from noise. The 14-trade sandbox is fat-tailed (skew -2.21, kurtosis 62.0) and its Sharpe CI [-1.54, 1.97] straddles zero, so the +0.26% avg_trade_return_pct / PF 1.27 is not yet statistically separable from noise. NOT decisively non-measurable (metrics_reliable=TRUE, positive above the 0.15% floor), so this is an analyst call at backtest_review over the full span, not a hard QA block.

Verification Results

No code change. Flagged so the analyst weights the class prior when deciding optimize vs abandon.

Verification Results

OHLCV-only VWAP-deviation class has historically poor survival (L7, zero-survivor class). This variant differs from the always-on high-turnover VWAP fade that died at -36% (long-only, daily-bull-regime-gated, ~14/yr, above fee floor), so it lacks the fee-death signature — but the class prior is unfavorable and edge durability should be treated skeptically.

Verification Results

Optional: route to BINANCE_SPOT for convention; leaving on futures is fee-favorable and acceptable.

Verification Results

Venue-routing nuance: long-only, leverage 1.0, no shorts, no funding edge — per CLAUDE.md guideline such strategies belong on BINANCE_SPOT rather than BINANCE futures. Not a correctness bug (no liquidation risk at leverage 1; futures taker 0.05% is cheaper than spot 0.10%, so the fee assumption is conservative-favorable), but it deviates from the routing convention.

Backtest Review

Clean, well-scoped implementation; trades match the hypothesis (328 long-only VWAP-excursion entries, ~7h holds, regime filter applied)

Backtest Review

max_drawdown 20.6% — controlled risk, this is an edge failure not a blow-up; 61% win rate shows entry timing isn't random

Backtest Review

profit_factor 0.964 (<1.0, net loser), total_return -2.82%, Sharpe -0.088 (CI straddles zero), expectancy -$11.79/trade

Backtest Review

avg_trade_return_pct 0.120% — below the 0.15% futures fee floor

Backtest Review

Inverted reward:risk: avg_win $510 << avg_loss $838 (largest loss -$5,829 vs largest win $2,360) — the no-stop/time-stop-only design lets losers run while winners cap at VWAP, so a 61% win rate still loses

Backtest Review

Loses in 2020/2021/2022; OHLCV-only single-name mean-reversion class with PF < 1.2 has no survivors

Outcome Summary

EthOneHourDailyVwapExcursionLongMeanReversionDailyRegime bought ETH's intraday dips below the daily-anchored VWAP in a daily bull regime, deliberately shipping with no tunable stop or take-profit to avoid the optimizer-reversal that killed a prior iteration. The trades matched the design (328 long-only VWAP-excursion entries, ~7h holds, 61% win rate), but the result was a clean edge failure: profit factor 0.964, -2.82% return, Sharpe -0.088, and negative expectancy driven by avg_win $510 against avg_loss $838 as the stop-less exit let losers run to the time stop. The analyst abandoned it at the backtest-review gate — the very absence of an exit parameter meant iteration couldn't help and single-name VWAP reversion on a liquid major is a saturated class — and it never advanced past optimization to risk review or paper trading.

Outcome Summary

Removing the stop-loss to resist optimizer-reversal backfires — a VWAP-recovery target that caps winners while a time-stop lets losers run guarantees avg_loss > avg_win, so even a 61% win rate loses money; a high hit rate is not an edge without favorable reward:risk.

Outcome Summary

It was abandoned at the pre-optimization backtest-review gate as a net-losing signal with a structurally inverted payoff: the intentional no-stop, time-stop-only design let losers run to the 24-bar exit while winners capped at VWAP, and with no exit parameter to fix, the three remaining knobs could not flip a negative-expectancy payoff.

Outcome Summary

A long-only, single-instrument intraday mean-reversion on ETHUSDT Binance USD-M futures (1h bars) that bought when the 1H close fell ≥2.5% below the daily-anchored VWAP while the daily close was above its 50-day SMA, exiting on recovery to VWAP or a hard 24-bar time stop, with deliberately no tunable stop-loss or take-profit.

Outcome Summary

Over 328 long trades it was a net loser: profit factor 0.964, total return -2.82%, Sharpe -0.088 (CI [-0.73, 0.54] straddling zero), and expectancy -$11.79/trade, with a controlled 20.6% max drawdown. Despite a 61.3% win rate it lost because reward:risk was inverted — avg_win $510 versus avg_loss $838 — and avg_trade_return_pct 0.120% sat below the 0.15% futures fee floor; it lost across 2020-2022.
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.