BtcCmInverseDailyCapitulationConfirmedRecoveryLong
Hypotheses
BTC COIN-M Inverse Perp Capitulation Drawdown Accumulation + Confirmed-Recovery Long (BTCUSD_PERP.BINANCE_CM, Daily, 4-Parameter, Sat-Stacking Convexity)
Hypotheses
A LONG-ONLY, single-instrument daily strategy on the BTC-margined inverse perpetual BTCUSD_PERP.BINANCE_CM. It applies the factory's PROVEN drawdown-accumulation/dip-recovery mechanism (already endorsed by the analyst and surviving on BTC/ETH/BNB spot) to a deliberately UNDER-REPRESENTED, reliable-data venue: COIN-M inverse futures are only 1.5% of the portfolio vs a 5% target, and they trade on pure OHLCV (no funding/OI/premium-index supplementary data, which the analyst confirmed is the data-engineering blocker that killed every funding-carry and premium-index hypothesis this session). The mechanism: buy deep, confirmed capitulation dips on BTC and ride the recovery. NOVELTY vs the existing spot drawdown siblings: the inverse (COIN-M) contract has a convex BTC-denominated payoff — buying the dip at low USD prices accumulates disproportionately MORE BTC per contract, so the edge is framed as BTC-denominated 'sat-stacking' return, a structurally different objective from the USD-denominated spot siblings. CRITICAL DIFFERENTIATION FROM THE 0-for-7 VWAP-EXCURSION-MR FAILURES: those faded dips immediately (buying falling knives, producing the inverted avg_win<avg_loss payoff that sank SOL/XRP/AVAX). This strategy does NOT fade the dip — it waits for a CONFIRMED upturn (a green close back above the short SMA AFTER the drawdown threshold is hit), so it buys the recovery turn, not the knife, and pairs a wide structural stop with a much larger recovery target so avg_win > avg_loss by construction. Kept to 4 core parameters to resist overfitting per the session's recurring-overfit lesson.
Hypotheses
Iteration 3 changes ONE thing — the timing defect that starved the trade sample. Entry previously required the drawdown threshold to still be breached on the same bar that confirmed the upturn, but the confirming bar is by construction a rally bar closing back above the short SMA, which usually lifts the drawdown back under the threshold: the two conditions were near mutually exclusive, so most genuine capitulation-then-recovery episodes were skipped (18 trades in 5.8 years). The hypothesis explicitly says the upturn is bought AFTER the drawdown threshold is hit, so the capitulation state is now latched for arm_bars bars and the first confirmed upturn within that window is the entry. Everything that already passed the earlier layers is untouched: same imports, same class, same continuous drawdown signal returned every bar, same COIN-M contract sizing through contracts_for_notional, same bracket exits, same four tunable parameters with clamps mirrored in _param_bounds, leverage left at 1.0 and therefore not claimed in sizing beyond the gross cap.
Hypotheses
Negative expectancy on a reliable 81-trade / 6-year sample: profit_factor 0.9997 (gross-flat, below 1), avg_trade_return_pct -0.0016% (BELOW ZERO — the +0.37% from the truncated smoke test did not hold), avg_trade_pnl_usd -0.46, expectancy -0.46/trade, CAGR -0.69%. The +8.56% total_return is entirely end_unrealized (end_unrealized_pct 8.59) — an un-exited open position marked to market, not realized edge. There is no positive gross edge for the COIN-M fee advantage to rescue, and the strategy risk-adjusted-UNDERPERFORMS holding BTC (alpha -0.052, information_ratio -0.96, Sharpe 0.165 with CI straddling zero). QA's edge concern is borne out on full history: the confirmed-recovery timing adds no directional persistence beyond a losing long-BTC tilt (flat regime spread 0.27/0.14/0.12). Optimizing lookback/drawdown/sma/stop cannot lift a PF<1, negative-expectancy signal into positive territory. Not worth 2 hours of optimization.
Implementation
Long-only daily strategy on the BTC-margined inverse perpetual BTCUSD_PERP.BINANCE_CM. The continuous signal is the drawdown fraction of the close below the highest close of the prior lookback_days bars. Breaching drawdown_pct LATCHES a capitulation state for arm_bars bars; the strategy then buys the first CONFIRMED upturn inside that window (close back above its sma_period SMA and above the previous close) rather than fading the falling knife. Exits are venue-managed bracket legs (STOP_MARKET at stop_loss_pct, LIMIT take-profit at ~3x that distance, firing intra-bar) plus a max_hold_bars signal exit for trades that go nowhere. Sizing risks risk_pct of equity against the stop distance, capped at max_gross_frac of equity, floored to whole $100 inverse contracts via contracts_for_notional.
Verification Results
Leave as-is if the base honors the override; otherwise rename to a private warmup helper.
Verification Results
min_bars_required() overrides a base framework method (Layer-1 base_shadow warning). Confirmed intentional — it correctly returns lookback_days + sma_period + 5 as the warmup budget and does not break dispatch. No action required beyond awareness.
Verification Results
Smoke-test economics are thin: PF 1.076, Sharpe 0.165 (CI [-0.64, 0.95] straddles zero), information_ratio -0.96 vs buy-hold, and 30.9% win-rate carried entirely by the avg_win/avg_loss asymmetry (4876 vs 2022, ~2.4x) that the 3R bracket is designed to produce. avg_trade_return_pct 0.37% clears the 0.10% low-fee COIN-M floor, so it is fee-viable, but the edge over simply holding BTC is unproven and the drawdown-recovery mechanism looks correlated to the underlying (beta 0.15, corr 0.67). Analyst should confirm on full history that the confirmed-recovery timing adds directional persistence beyond a long-BTC tilt rather than just harvesting the 2020-2025 uptrend.
Backtest Review
Reliable 81-trade / 6-year sample (metrics_reliable=true); avg_win 4696 > avg_loss 2097 (~2.2x) as the 3R bracket intends
Backtest Review
Fee-viable at the mechanical level and drawdown (23.5%) is within bounds
Backtest Review
Negative realized expectancy on full history: profit_factor 0.9997 (<1), avg_trade_return_pct -0.0016% (BELOW zero, not the +0.37% seen in the smoke test), avg_trade_pnl_usd -0.46, expectancy -0.46/trade
Backtest Review
The entire +8.56% headline total_return is end_unrealized_pct 8.59 — a paper gain on an un-exited open position, not a realized edge; CAGR is -0.69% and recovery_factor is negative
Backtest Review
No edge over simply holding BTC: alpha -0.052, information_ratio -0.96, Sharpe 0.165 with CI [-0.57, 0.96] straddling zero; QA's edge concern is confirmed on full history
Backtest Review
Regime spread is flat and weak (calm/normal/stressed Sharpe 0.27/0.14/0.12) — the confirmed-recovery timing adds no directional persistence beyond a losing long-BTC tilt
Analysis
Backtest gate:
- metrics unreliable: Incoherent: Sharpe 0.02 disagrees in sign with total_return -1.49% — the Sharpe is computed from the mtm_equity_curve series while the return comes from the equity curve. Judge on the equity curve.
Iteration History
Verification failed (Layer 4 — QA review) [class=no_edge]:
- UNMEASURABLE + NET LOSER at the specified single-instrument daily frequency. Only 18 trades over 5.8 years (developer estimated 40-60; a 20% drawdown-then-confirmed-recovery on one BTC instrument is rare). 18 trades is far below the ~100-trade bar to distinguish edge from noise (L16), and Sharpe CI [-0.92, 0.42] straddling zero confirms it. The hard holdout gate needs >=10 trades in the last-20% holdout with Sharpe > 0; at 18 total the holdout carries ~3-4, so it cannot pass by construction and optimization would die there. On this sample it is a net loser: total_return -14.25%, Sharpe -0.252, alpha -0.0069, information_ratio -0.73, end_unrealized -22.1%. PF 1.324 and avg_win $5,317 > avg_loss $2,008 show the 3R bracket works mechanically, but a gross-positive PF cannot rescue a negative, unmeasurable book.
- Developer dry-run (~40-60 trades) does not reproduce in the engine (18 trades). Not a bug (the gate is correctly restrictive), but the private trade-count estimate is unreliable; trust the sandbox.
Iteration History
Verification failed (Layer 4 — QA review) [class=no_edge]:
- Faithful iter-2 implementation shows no measurable edge: Sharpe 0.014 (CI [-0.645, 0.666] centered on zero), PF 1.095 (break-even), total_return -1.49%, IR -0.79, alpha -0.0325. avg_trade_return_pct 0.467% clears the CM fee floor and avg_win $5,079 > avg_loss $2,022 as designed — so not a fee failure and not a payoff-inversion bug, just absent risk-adjusted edge with a 30% hit rate. The 'proven on spot' mechanism did not transfer to the COIN-M inverse contract.
- 56 trades over 5.8 years → only ~11 in the holdout; with in-sample Sharpe ~0 the holdout gate (Sharpe > 0, ≥10 trades) fails by construction. The developer already applied the obvious lever (loosen 20%/120d → 10%/60d, faster recycle) between iterations, lifting 18 → 56 trades but revealing PF ~1.09 / Sharpe ~0. Further tuning is noise selection.
- _entry_bar is stamped one bar late (set in _sync_position_state during calculate_signal before the entry order fills), shifting the max_hold time stop by ~1 bar. Immaterial to the result; not the failure cause.
Backtest and paper results are hypothetical. Trading involves risk of loss.