Strategies
COIN-M BTC Open-Interest-Confirmed Time-Series Momentum, Long-Short (BTCUSD_PERP.BINANCE_CM Inverse Perp, Daily Bars, Trade the Sign of ~50-Day Trailing Return ONLY When Rising Open Interest Confirms New Positioning, ATR-Trailing Exit, Vol-Scaled Size, 3-Parameter)
Outcome: Abandoned
BtcCoinMOpenInterestConfirmedTsMomLS
Outcome Summary
…full story as written to the file.
Hypothesis
Implementation
Long-short daily time-series momentum on the BTC-margined COIN-M inverse perpetual (BTCUSD_PERP.BINANCE_CM). Direction is the sign of the ~50-day trailing return; a trade is only taken when open interest is RISING over the confirmation window (new positioning entering behind the move) and the strategy stands flat when OI is flat/falling (unwind-driven move) or when no OI reading is available. Exits on a momentum sign flip or an ATR chandelier trailing stop, with a stopped direction blocked until momentum flips. Size is volatility-scaled (constant risk per trade via ATR) with a hard gross-notional cap, expressed in WHOLE inverse contracts via contracts_for_notional(). Three searched parameters only.
Verification Results
Confirm the base template actually consults min_bars_required(); if not, rely on the internal readiness guards (which are already correct) and drop the override, or rename it to avoid the shadow warning.
min_bars_required(self) overrides/shadows a framework method the base template relies on for warm-up. If the base does not dispatch to this override, the intended max(mom_lookback, oi_lookback, atr_period)+2 warm-up is ignored (harmless — the strategy's own deque/counter guards independently prevent premature signals — but the override may be dead code).
This is a single-name directional daily-TSMOM variant, a family that has repeatedly died overfit/negative-expectancy at the analyst stage (LtcCoinMDailyTsMom, SolIntermediateSkipWindowTsmom, several DOGE/DOT/SOL trend clones). The sandbox smoke test is only mildly positive (Sharpe 0.35, CI [-0.38, 1.15] straddling zero, total_return +20% but the calm-vol tercile is -5.1% / Sharpe -0.28). The OI-confirmation gate and the COIN-M fee headroom are the genuine differentiators vs the abandoned USD-M siblings, so it deserves the full backtest, but the analyst should weigh the per-trade edge (~0.35% sandbox) against the well-populated graveyard of BTC/single-name TSMOM before optimizing. Advisory only.
Backtest Review
- Sharpe
- 0.35
- Total return
- 20.26%
- Max drawdown
- 16.61%
- Trades
- 70
- Win rate
- 41.4%
- Profit factor
- 1.19
Mechanism functions and matches the hypothesis: 70 trades over 6.1y (31 long / 39 short), all signaled entries submitted (entry_diag 70->70, zero drops), a sensible cadence for a ~50-day daily TSMOM gated by a rising-OI veto.
Numerically viable on a reliable sample: avg_trade_return_pct 0.19% (pct_notional) is above the COIN-M ~0.10% fee floor, PF 1.19, positive Sharpe 0.35, max DD 16.6% (< pre-registered cap), 70 trades, 6.1y span, metrics_reliable=true. Edge clears costs, so it is optimizable.
Genuine differentiators vs the abandoned USD-M siblings: routed to the lower-fee COIN-M inverse venue for headroom, and an open-interest confirmation gate (a structural signal recently advancing on USD-M OI-confirmed trend variants). Only 3 tunable parameters, limiting the multiple-testing surface.
Marginal significance: Sharpe CI [-0.45, 1.16] straddles zero, calm-vol tercile is negative (-5.1%, Sharpe -0.28), and this is the well-populated single-name daily-TSMOM family that has repeatedly died overfit/negative-expectancy in the 3-phase deflation (LtcCoinMDailyTsMom, SolIntermediateSkipWindowTsMom, several DOGE/DOT/SOL clones).
end_unrealized_pct 15.2 of 20.3 total return means ~75% of the headline is open-position MTM, not realized — a promotion-stage caution to carry into ANALYZING (judge on realized/risk-adjusted metrics there).
Per-trade edge is only marginally above the fee floor; the optimizer must find a genuinely robust region rather than curve-fit the OI/momentum lookbacks.
Analysis
Mechanism functions and matches the hypothesis: 78 optimized trades (38 long / 40 short) over 6.1y, all signaled entries submitted, sensible cadence for a rising-OI-gated ~50-day daily TSMOM.
Per-trade edge clears costs: optimized avg_trade_return_pct 0.839% >> COIN-M 0.10% fee floor; profit_factor 1.67 > 1.3; commission only 5.3% of gross. Fees are NOT the killer here.
Holdout window is nominally positive (Sharpe 1.35 on 10 trades).
HARD gate failure: walk-forward is_overfitted=TRUE with IS 1.95 -> OOS -0.797, and two of three OOS windows are negative (-0.56, -2.96, +1.14). The edge REVERSES out-of-sample, it does not merely decay.
HARD gate failure: avg out-of-sample Sharpe -0.797 <= 0 (validity floor 0.5).
Failed deflated Sharpe: DSR=0.0003, expected-max=1.97 over 225 trials (126 effective) — the selected Sharpe is indistinguishable from best-of-N noise. PSR robust-block 0.906 < 0.95, is_significant=false, does not survive programme-level FDR (Benjamini-Hochberg q=0.10 keeps 4 of 277; candidate_p 0.9997).
Sensitivity: ALL THREE tunable parameters (mom_lookback, oi_lookback, atr_stop_mult) are cliff parameters — the sharpe_grid swings from -0.67 to +0.83 across small neighboring lookbacks. There is no robust parameter region to iterate toward.
Regime attribution: loses money in BOTH the calm (Sharpe -0.07) and stressed (Sharpe -0.22) thirds — all of the return comes from the single 'normal'-vol third (and one +17.6% day on 2024-12-20), i.e. the result is carried by one lucky window, not a persistent edge.
Optimized max_drawdown 26.1% breaches the pre-registered 22% cap; Calmar 0.36 < 0.5.
Pre-registered self-prediction missed 3 of 5 (min_trades 78<120, OOS -0.80<0.9, DD 26.1>22).
Benjamini-Hochberg at q=0.10 over 277 programme candidates keeps 4. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.
Iteration History
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (2400 days of BTCUSD_PERP.BINANCE_CM-1-DAY-LAST-EXTERNAL). 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).
Outcome Summary
Re-routing a well-mined single-name momentum mechanism to a cheaper venue with an OI-confirmation gate buys fee headroom but adds no robustness — the edge still reverses out-of-sample.
Abandoned at post-optimization ANALYZING on hard-gate failures: walk-forward overfit (negative avg OOS Sharpe), deflated Sharpe indistinguishable from noise (fails programme FDR), and all three parameters on cliffs — no robust region to iterate toward.
A long-short daily time-series momentum trend follower on the BTC COIN-M inverse perpetual, trading the sign of the ~50-day trailing return only when rising open interest confirmed fresh positioning, with an ATR chandelier trailing stop and vol-scaled sizing, routed to the lower-fee COIN-M venue.
Initial backtest: 70 trades over 6.1y, avg per-trade 0.19% (above the ~0.10% fee floor), PF 1.19, Sharpe 0.35, 16.6% max DD. After optimization PF rose to 1.67 and per-trade to 0.84%, but walk-forward reversed from IS Sharpe 1.95 to OOS -0.797, DSR 0.0003 over 225 trials, and DD breached the 22% cap at 26.1%.
Backtest and paper results are hypothetical. Trading involves risk of loss.