Skip to content

View original

XrpSpotMultiDayDrawdownAccumulationLong

Hypotheses

XRP Spot Multi-Day Drawdown Accumulation Long (BINANCE_SPOT, Daily, OHLCV-Only)

Hypotheses

A long-only, single-instrument, single-venue, OHLCV-ONLY strategy on XRPUSDT.BINANCE_SPOT DAILY bars. Same proven drawdown-accumulation mechanism as the landed BtcSpotDrawdownAccumulationLong and AvaxSpotDrawdownAccumulationLong: buy when XRP has dropped meaningfully from its 30-day high AND is still above its 100-day SMA; sell when XRP recovers to within 5% of the peak, hits a stop, or times out. XRP fills a unique cycle profile: regulatory-driven (SEC lawsuit Jan 2021, partial win July 2023, ETF speculation Q4 2024) with distinct drawdown-bounce timing vs BTC/AVAX. XRPUSDT.BINANCE_SPOT has been listed since 2018 — ~7 years of daily bars. Five parameters total. Hits BINANCE_SPOT venue quota gap (currently 6.6% vs ≥15% target).

Hypotheses

Iteration-4 fix for the Layer-3 'no trades' failure, which was a config-wiring defect, not a signal defect: the diagnostic header shows the backtest ran BTCUSD.HYPERLIQUID-1-MINUTE with parameters={} (the same leaked fixture flagged as a systemic harness issue in the sibling BNB and ADA iterations), and an 18%-drawdown-from-30-bar-high daily accumulator is structurally incapable of triggering on 1-minute BTC data. The strategy code already cleared Layers 1-2 and mirrors the landed BtcSpot/AvaxSpot drawdown accumulators, so it is left byte-identical. The only change is an explicit, fully-populated FactoryStrategyConfig: instrument_id='XRPUSDT.BINANCE_SPOT', bar_type='XRPUSDT.BINANCE_SPOT-1-DAY-LAST-EXTERNAL', and every parameter enumerated in config.parameters (the 5 core signal params plus stop_pct/notional_pct/min_notional) so nothing falls back to a leaked default. On XRP's ~7-year daily history the 18% dip + 100-SMA gate fires on each major regulatory-cycle correction, producing trades. Venue stays BINANCE_SPOT (long-only, no leverage, no funding edge) per the routing rule; leverage 1.0 is not used to amplify sizing, so there is no leverage_set_but_unused risk.

Hypotheses

The drawdown-accumulation mechanism that landed on BTC and AVAX does NOT translate to XRP — this is a structurally wrong target, not a tunable-parameter problem. Over a full 7-year, 30-trade sample the result is catastrophic: total_return -85.3%, CAGR -26.7%, Sharpe -4.03 (CI low -11.0), profit_factor 0.31, win_rate 23%, max_drawdown 89.7%, losing in 5 of 7 years (2020 -71%, 2023 -34%, 2024 -21%). Root cause: BTC/AVAX dips occur inside a secular uptrend that recovers, so buying corrections works; XRP spent 2018-2023 in a deep regulatory-driven decline where 'buy the dip while close > 100-SMA' repeatedly caught falling knives — XRP bounced just above the 100-SMA, tripped the entry, then continued down, so exits hit the regime break or the 30% stop instead of the 5%-of-high recovery (win rate 23%, PF 0.31). The hypothesis frames XRP's 'distinct drawdown-bounce timing' as an edge, but the backtest shows the opposite — XRP drawdowns do not reliably bounce. Aggressive sizing (90% notional, 30% stop, avg position 91%) amplifies the loss but is not the driver; the signal's edge is deeply negative on this asset. Not optimize/iterate: a -85%/Sharpe -4/PF 0.31 result cannot be rescued by tuning 5 parameters and would waste the 2-hour optimization. The proven mechanism belongs on assets with recovering uptrends (its landed BTC/AVAX instances); porting it to XRP is a dead target and should be abandoned.

Implementation

Long-only OHLCV-only accumulation on XRPUSDT.BINANCE_SPOT daily bars. Buys when XRP is >=18% below its 30-day high while still above its 100-day SMA (dip within a persistent uptrend), and sells on recovery to within 5% of the rolling high, a regime break below the 100-SMA, a loose 30% protective stop, or a 120-bar time cap. Same proven drawdown-accumulation mechanism as the landed BTC and AVAX spot siblings, specialized to XRP's regulatory-driven cycle. Spot CASH venue, leverage 1.0.

Verification Results

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

Backtest Review

Clean implementation and adequate sample: long-only (30 longs, 0 shorts), 30 trades over 7 years, zero plumbing drops; the drawdown-accumulation mechanism itself is proven on the landed BTC/AVAX siblings.

Backtest Review

Catastrophic across the full sample: total_return -85.3%, CAGR -26.7%, Sharpe -4.03 (CI low -11.0), profit_factor 0.31, win_rate 23%, expectancy -2,845, max_drawdown 89.7%, annualized_volatility 282%.

Backtest Review

Wrong target, not a tuning issue: XRP's 2018-2023 regulatory-driven multi-year decline turned 'buy the dip above the 100-SMA' into repeated falling-knife entries — XRP bounced just above the SMA, triggered entry, then crashed (loses 5 of 7 years: 2020 -71%, 2023 -34%, 2024 -21%).

Backtest Review

Design choices amplify the damage (avg_position_pct 91% near all-in, 30% loose stop → single -30,518 loss), but the underlying drawdown-buy signal has deeply negative edge on XRP regardless of sizing.

Backtest Review

Optimizing a -85%/Sharpe-4/PF-0.31 result is wasted compute — no parameter region rescues a mechanism that loses in most years on this asset.

Analysis

The submitted strategy_code does NOT implement this hypothesis — the wrong file was attached (the SAME recurring error class as the UNI-Aroon, ETH/BTC-ratio, and BTC-price-volume-divergence mismatches this session). The hypothesis is 'XRP Spot Multi-Day Drawdown Accumulation Long' (XRPUSDT.BINANCE_SPOT daily: buy when XRP is >= drawdown_threshold below its 30-day high AND above its 100-day SMA; exit on recovery to within 5% of the peak, a stop, or a time stop). But the code is class EthDailyVolatilityCompressionRangeBreakoutLong — the ETH daily NR coil-then-expand volatility-compression breakout (the exact strategy from the previous review). The config confirms it ran that: instrument_id=ETHUSDT.BINANCE, 1-DAY bars, NR coil/expansion parameters — no XRP, no BINANCE_SPOT, no drawdown-accumulation logic, and it produced the same degenerate 2-trade / metrics_reliable=FALSE result. ACTION: resubmit the ACTUAL XRP spot drawdown-accumulation code (single instrument XRPUSDT.BINANCE_SPOT-1-DAY, long-only CASH, the 30-day-high drawdown trigger + 100-day SMA filter, mirroring the landed BtcSpotDrawdownAccumulationLong / AvaxSpotDrawdownAccumulationLong siblings) and re-run the backtest. The hypothesis itself has not been tested — fix the file mismatch first. (Note: do NOT substitute the ETH NR breakout that was attached — it is a separate, degenerate 2-trade strategy.)

Outcome Summary

XrpSpotMultiDayDrawdownAccumulationLong ported the proven BTC/AVAX drawdown-accumulation mechanism to XRP spot, framing XRP's regulatory-driven cycle as a source of distinct drawdown-bounce timing. The 7-year backtest showed the opposite: 30 trades returning -85.3% (CAGR -26.7%, Sharpe -4.03, PF 0.31, 23% win rate, 89.7% max drawdown), losing in five of seven years because XRP's 2018–2023 decline made the 100-SMA-gated dip-buy repeatedly catch falling knives that then hit the regime break or 30% stop instead of the 5%-of-high recovery. Aggressive ~91% sizing amplified the damage but was not the driver — the signal's edge is negative on this asset. On iteration 4 the analyst abandoned it at backtest review as a structurally wrong target, noting the mechanism belongs on assets with recovering uptrends and that no five-parameter sweep could rescue it.

Outcome Summary

This was a target-selection failure, not a tuning problem — the mechanism works where dips sit inside a recovering secular uptrend (BTC/AVAX), but XRP's 2018–2023 regulatory-driven decline turned 'buy the dip above the 100-SMA' into repeated falling-knife entries that bounced just above the SMA, tripped entry, then continued down.

Outcome Summary

The analyst abandoned it at the pre-optimization backtest-review gate: with a -85% / Sharpe -4 / PF 0.31 result, the drawdown-buy signal has deeply negative edge on XRP regardless of parameters, so optimization was judged wasted compute and never run.

Outcome Summary

A long-only XRPUSDT.BINANCE_SPOT daily drawdown-accumulation strategy — buy when XRP is ≥18% below its 30-day high while still above its 100-day SMA, then sell on recovery to within 5% of the peak, a regime break, a loose stop, or a time cap — the same mechanism landed on BTC and AVAX spot siblings.

Outcome Summary

Over a full 7-year, 30-trade sample (30 longs, 0 shorts) the result was catastrophic: total return -85.3%, CAGR -26.7%, Sharpe -4.03 (CI low -11.0), profit factor 0.31, 23% win rate, expectancy -2,845, max drawdown 89.7%, and 282% annualized volatility — losing in 5 of 7 years (2020 -71%, 2023 -34%, 2024 -21%), amplified by ~91% average position sizing and a single -30,518 loss.

Iteration History

EthDailyVolatilityCompressionRangeBreakoutLong

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['tp_pct', 'coil_min', 'coil_pct', 'risk_pct', 'min_notional', 'min_stop_pct', 'close_pos_min', 'dist_lookback', 'exit_lookback', 'hard_stop_pct', 'max_hold_bars', 'per_trade_pct', 'expansion_mult'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: EthDailyVolatilityCompressionRangeBreakoutLong._rng() takes 1 positional argument but 2 were given (bar timestamp: 1735691700000) - steady_downtrend: TypeError: EthDailyVolatilityCompressionRangeBreakoutLong._rng() takes 1 positional argument but 2 were given (bar timestamp: 1735691700000) - flat_ranging: TypeError: EthDailyVolatilityCompressionRangeBreakoutLong._rng() takes 1 positional argument but 2 were given (bar timestamp: 1735691700000) - volatility_spike: TypeError: EthDailyVolatilityCompressionRangeBreakoutLong._rng() takes 1 positional argument but 2 were given (bar timestamp: 1735691700000) - zero_volume: TypeError: EthDailyVolatilityCompressionRangeBreakoutLong._rng() takes 1 positional argument but 2 were given (bar timestamp: 1735691700000) - price_gap: TypeError: EthDailyVolatilityCompressionRangeBreakoutLong._rng() takes 1 positional argument but 2 were given (bar timestamp: 1735691700000)
Strategy report

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