XrpVolumeClimaxVwapReversionLS15m
Hypotheses
XRP Intraday Volume-Climax Reversion, Long-Short (Single-Instrument BINANCE Perp, 15m Bars, Fade ONLY Climactic Exhaustion Spikes — Deviation Beyond kxATR from Rolling VWAP CONFIRMED by a >3x Volume Blowoff with a Reversal Close, Enter-at-Extreme / Target-the-Anchor / Tight-Stop-Beyond-the-Extreme, 3-Parameter)
Hypotheses
A LONG-SHORT, single-instrument intraday mean-reversion on XRPUSDT.BINANCE (USD-M perpetual, 15m bars). It shares the DNA of the factory's one proven intraday winner (SOL VWAP-reversion, now in paper) — fade deviations from a continuously-updating volume-weighted fair-value anchor — but adds a decisive, fee-motivated SELECTIVITY twist that distinguishes it mechanically: it fires ONLY on CLIMACTIC EXHAUSTION events, not on every moderate wobble. A signal requires three things to coincide on one bar: (1) price has deviated more than k x ATR from the rolling VWAP, (2) that bar's volume is > 3x its rolling average (a blow-off/capitulation print, i.e. forced or panic flow, not a slow drift), and (3) the bar closes back TOWARD the anchor (a reversal wick confirming the extreme was rejected). This selectivity is the whole point: the deployed VWAP-reversion fades frequent moderate deviations that barely clear the 0.10% round-trip, whereas climactic-exhaustion reversions are rarer but revert FAR harder and faster (retail-driven XRP overshoots on volume spikes are among the sharpest-reverting in crypto), delivering large per-trade moves (~0.4-0.8%) well above the fee floor while keeping trade count modest to minimize fee drag — the exact failure mode (fee_edge, 24% commissions of gross) that killed the pivot-fade and OI-fade. The trade geometry is deliberately built to AVOID the inverted-RR death of the trade-flow strategy: enter AT the extreme, target the anchor (far), stop just BEYOND the extreme (near) → structurally favorable reward:risk, winners larger than losers. It fills three under-represented buckets: short horizon (6.0% vs 10% target), long_short direction (14.6%), and a fresh single-name (XRP) not used for reversion.
Hypotheses
Fixes the reported Layer-3 failure (should_enter returned a side 0 times over 19,646 bars) with one targeted change: the iteration-3 DIRECTIONAL regime gate is the cause. It required a LONG's setup to have close 2.5 ATR BELOW the 1-day VWAP while simultaneously ABOVE the 2-day SMA (and the mirror for shorts) — two conditions that are almost mutually exclusive, since a large negative VWAP deviation drags price below the slower mean as well. That gate turned a firing conjunction (iteration 2 produced trades) into an empty one. It is replaced by a symmetric, direction-agnostic runaway-trend veto: skip the fade only when |close - 2-day SMA| exceeds trend_tol x ATR (default 6.0, generous), which still removes the extreme breakout/continuation tail that lost money without being anti-correlated with the deviation condition itself. Everything that already passed Layers 1-2 is untouched: imports, class structure, the continuous per-bar (close - VWAP)/ATR signal, the blow-off and reversal-close computations, single-position enforcement, cooldown, exit geometry, and capped path-independent sizing. dev_k (2.5) and vol_mult (3.0) are left at the values that produced trades in iteration 2, so entry frequency returns to a known-nonzero rate; trend_tol is exposed as a parameter for the optimizer to tighten if the continuation tail is worth cutting harder. No clamps are applied in code, so no _param_bounds are declared.
Hypotheses
Negative expectancy on a reliable 648-trade / 6.6-year sample: profit_factor 0.786, total_return -66.4%, expectancy -$98/trade, Sharpe -0.0086. avg_trade_return_pct is 0.0278% — roughly 5x below the 0.15% Binance USD-M fee floor and ~15-30x below the 0.4-0.8% climactic reversion the hypothesis promised, so the selectivity premise (climax spikes revert harder) is falsified on full history: the fade signal has no positive gross edge for the fee advantage to rescue. Losing in every full year and the 'normal' vol regime liquidates to -100%, i.e. pervasive absence of edge, not a parameter cliff. Optimization of dev_k/vol_mult/stop_atr cannot manufacture positive expectancy from a PF-0.786 signal that is below trading costs. QA's fee-marginality edge concern is confirmed on full history. abandon_class=negative_expectancy.
Implementation
Long-short intraday mean-reversion on XRPUSDT.BINANCE 15m bars, pure OHLCV. Fades only climactic exhaustion events: the bar must (1) close more than dev_k x ATR away from a 1-day rolling VWAP anchor, (2) print more than vol_mult x its 96-bar average volume (blow-off/capitulation), (3) close back toward the anchor (rejection of the extreme), and (4) not be in a runaway-trend regime (|close - 2-day SMA| within trend_tol x ATR). Trade geometry is enter-at-the-extreme, target the VWAP anchor (far), stop stop_atr x ATR beyond the extreme (near), plus an 8h time stop. calculate_signal() returns the continuous (close - VWAP)/ATR deviation every bar. Single position at a time, 1h post-exit cooldown, path-independent capped sizing at min(base_capital, equity) x 0.5.
Verification Results
Verification failed (Layer 3 — sandbox backtest): No trades produced
Bar type used: XRPUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL, Bars processed: 19838
Diagnostics: should_enter() returned a side 0 times over 19646 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
Confirm the base template's warm-up gate honors the overridden value (it does here); otherwise rename to a private helper to avoid shadowing.
Verification Results
min_bars_required() overrides a framework method the base on_bar dispatch also uses for warm-up. Here the override raises the warm-up requirement (max of the windows), which is internally consistent and used by calculate_signal's own guard, so behavior is correct — but it shadows the base method.
Verification Results
Sandbox is weak but this is a smoke test, not an edge verdict. (a) Sharpe -0.77 disagrees in sign with total_return +0.42% (metrics_reliable=false; judge on equity curve). (b) impact_cost_pct is 83.7% and capacity ~$143K on a 50%-of-base_capital notional — market-impact modeling eats most of the gross at the sandbox size; position_frac (0.50) is frozen, not in the 3-knob search, so the analyst should verify per-trade edge survives impact at realistic size and consider whether frac should be reduced. (c) 41 trades over 205 days (~0.2/day) scales to a measurable sample over full history, but confirm the climax gate keeps clearing the ~0.10% round-trip after impact. avg_trade_return_pct 0.227% currently clears the 0.15% floor.
Backtest Review
Faithful implementation of the climax-fade hypothesis with favorable trade geometry (enter-at-extreme / target-anchor / tight-stop) and single-position + cooldown discipline.
Backtest Review
Adequate, measurable sample: 648 trades over 6.6 years (233,439 bars).
Backtest Review
Negative expectancy on a reliable sample: total_return -66.4%, profit_factor 0.786 (<1.0), expectancy -$98/trade, Sharpe -0.0086 (CI [-0.947, 0.648] straddles zero).
Backtest Review
avg_trade_return_pct is 0.0278% — an order of magnitude below both the 0.15% Binance USD-M fee floor AND the hypothesis's own promised 0.4-0.8% climactic-reversion moves. The 'selectivity' premise (rarer but harder-reverting spikes) did NOT materialize; the edge the hypothesis is built on is absent on full history.
Backtest Review
Losing across every year except 2026 partial (-2.3%, -10.2%, -19.0%, -7.3%, -8.5%, -41.6%), and the 'normal' vol regime liquidates to -100% — not a tunable cliff but a pervasive absence of edge.
Backtest Review
max_drawdown 71.7%, impact_cost total $44K + commission $30K consume the gross — win rate 38% with avg_win/avg_loss ~1.28 cannot overcome it.
Backtest Review
QA's sandbox avg_trade_return_pct 0.227% was a small-window artifact; the full-history figure (0.028%, PF 0.786) confirms the edge concern — the climax gate does not clear the round-trip after costs.
Analysis
Backtest gate:
- metrics unreliable: 1016 trades / 1769 data days is too little evidence (need >=5 trades over >=10 days) — increase signal frequency or widen the window
Iteration History
Verification failed (Layer 4 — QA review):
- POSITION STACKING -> LIQUIDATION. The sandbox liquidated (total_return -100.0, liquidated=true 2023-03-22) with avg_position_pct 4474.54% (~44x equity), despite an intended position_frac of 0.5. position_size() is correct in isolation (50% of CURRENT equity), and with a 1-ATR stop a correctly-managed 50% position CANNOT liquidate — as equity shrinks the position shrinks with it, and no single 15m 1-ATR XRP move wipes the account. Therefore positions must be STACKING: should_enter fills on repeated climax bars while a position is already open, accumulating to tens of x notional until liquidation. Code/position-management defect (L17-adjacent), NOT fee/edge. The long-only OI sibling using the same base hooks did NOT stack, so the trigger is likely the long-short flip path (holding LONG while a SELL climax fires, adding rather than netting).
- Even aside from liquidation, the realized edge is negative: PF 0.73, win_rate 0.36, avg_trade_return_pct -0.0408%. Favorable RR did materialize (avg_win $571 > avg_loss $440, ~1.3:1) but 36% at 1.3:1 is negative expectancy. The climactic fade doesn't revert hard/often enough to beat fees on XRP 15m.
- Selectivity weaker than claimed: 1866 trades, commission 12.4% of gross ($47.7k), vs the promised 'rare' gate (dry-run '12 entries in 14 days'). Closer to the churn the design meant to avoid.
- Pure-OHLCV VWAP-deviation reversion is an L7 repeatedly-abandoned class. The volume-climax + reversal-close selectivity differentiates it, but the base rate is very low. Not the blocker.
Iteration History
Verification failed (Layer 4 — QA review):
- FEE/EDGE FAILURE on a now-CLEAN, trustworthy backtest -> recommend ABANDON, not iterate. With the liquidation defect fixed, the sandbox is a full diagnostic run (881 trades over 735 days, metrics_reliable=true, liquidated=false) and the climactic-fade edge is decisively NEGATIVE: total_return -89.08%, Sharpe -1.79 (PSR 0.0024, CI [-3.06, -0.67] ENTIRELY negative), profit_factor 0.77, win_rate 0.36, avg_trade_return_pct -0.00996% (below the futures fee floor), commission 11.59% of gross ($34.2k). The favorable RR materialized (avg_win $923 > avg_loss $685, ~1.35:1) but a 36% win rate at 1.35:1 is negative expectancy (0.36*1.35 - 0.64 = -0.15). The volume-climax + reversal-close selectivity does not make XRP 15m overshoots revert hard/often enough to beat fees — the same fee/edge death as the pivot-fade and OI-fade siblings. No code fix remains, so this is a definitive abandonment, not a further iteration.
- RESIDUAL (doesn't change the verdict): avg_position_pct is 97%, ~2x the intended position_frac 0.5. The cap min(base_capital, equity)*0.5 should give ~50%; 97% is most likely drawdown-averaging inflation (equity fell 89%). It doesn't affect the negative-edge conclusion — avg_trade_return_pct is per-notional and negative regardless of size.
- Pure-OHLCV VWAP-deviation reversion is an L7 repeatedly-abandoned class (0% survival). The volume-climax selectivity didn't rescue it — 881 trades / 11.59% commission is closer to churn than the 'rare, hard-reverting' profile promised (dry-run claimed ~12 entries/14 days).
Backtest and paper results are hypothetical. Trading involves risk of loss.