Skip to content

View translation

CoinMBtcUsSessionOpenMomentumLS

Hypotheses

COIN-M BTC US-Equity-Open Session Momentum, Long-Short (BINANCE_CM Inverse Perp BTCUSD_PERP, 15m Bars, Trade the Direction of the First 45min After the 13:30 UTC US Cash Open and Ride It Into the US Session, Time-Boxed Exit, Single-Leg OHLCV, 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument intraday SESSION-MOMENTUM strategy on BTCUSD_PERP.BINANCE_CM (COIN-M inverse perpetual, BTC-margined, 15-minute bars) that trades the directional impulse crypto inherits from the US equity cash open at 13:30 UTC. It is deliberately routed to the UNDER-represented, LOW-FEE COIN-M venue (2.9% of the book vs a >=5% target; ~0.06% round-trip taker vs 0.10% on USD-M) so the fee floor the analyst enforces drops from 0.15% to 0.10% — directly attacking the #2 killer (fee_edge, 158x). It is a genuinely fresh cell across every axis: a NEW venue (BINANCE_CM), a NEW mechanism (macro-time / US-session momentum, not seen in the bar-reversion, VWAP, pivot, cross-sectional, or carry strategies that fill the book), LONG-SHORT (14.8% vs an 85% long-only book), and intraday (which sidesteps the compute_daily_returns close-date-grouping engine artifact that produced NON-DIAGNOSTIC backtests and killed both 200-SMA daily-spot siblings at Layer 4). It is L20-compliant (single-leg, BTC, pure OHLCV — no coin-margined funding/mark history needed) and avoids all graveyards: no funding-level signal (L13), no liquidations feed (L3), no options (L23), no basket/rotation (L12/L24), no cross-venue delta-neutral carry (L1), no Hyperliquid (L11). Only 3 parameters to hold down overfitting (the #1 killer, 202x).

Hypotheses

Implements the hypothesis exactly at its stated scope: single-instrument, single-venue, pure-OHLCV, long-short, three tunable knobs (open_window_bars, entry_threshold, atr_stop_mult) with clamps mirrored in _param_bounds, and no funding, liquidation, options, basket or cross-venue component. Every schedule boundary is derived from bar.ts_init as CALENDAR minute-of-day, never a process-relative bar counter, so the session grid is identical across restarts, backtests and paper replay; because Binance klines are stamped at OPEN time, the code maps 'the bar closing at minute M' to timestamp minute M minus the bar interval (verified against the catalog's timestamp convention). calculate_signal returns a CONTINUOUS running return since the latched reference every bar in natural fractional units, never a gated constant, with a first-bar bootstrap reference that is flagged not-a-session reference so it can never trigger an entry. I measured the impulse distribution on the real BTCUSD_PERP COIN-M history (2,167 US-open sessions, using the 5-minute series as the finest available proxy for the same 13:30-to-14:15 window): the median absolute 45-minute post-open move is 0.29% and the 0.4% default threshold fires on 38.7% of days, roughly 840 entries across the history and ~80 inside a Layer-3 window - frequent enough to evaluate and selective enough to be a real impulse rather than noise. Inverse sizing uses contracts_for_notional (whole $100-face contracts), never the linear equity/price formula that mis-sizes inverse contracts; the ~$80k capped notional is ~800 contracts, far above min notional. leverage=2.0 is genuinely consumed in position_size via the gross cap (equity x 0.4 x leverage = 0.8x equity ceiling) while per-trade risk stays capped at 1% against the ATR stop, so there is no compounding blow-up path. State is fully incremental (Wilder ATR plus scalar session bookkeeping), so per-bar cost is O(1) at 15m granularity. Two honest caveats: BTCUSD_PERP 15-MINUTE bars are not yet in the catalog and will be collected on demand from the Vision COIN-M path on first run (other CM timeframes for this symbol are already there, and the on-demand router handles futures-cm explicitly); and 13:30 UTC is the US cash open only during EDT - in EST it is 14:30 UTC, so roughly four months a year the window sits 60 minutes early, which the hypothesis's fixed-UTC framing accepts.

Hypotheses

data_unavailable: backtest data for BTCUSD_PERP.BINANCE_CM could not be collected after 5 retries: - bars (bar_type=BTCUSD_PERP.BINANCE_CM-15-MINUTE-LAST-EXTERNAL): got 0, needed 200, or 14+ days span The data layer (not the strategy) is the blocker — re-evaluate this hypothesis once collection is fixed / the symbol is backfilled.

Implementation

Long-short intraday session-momentum strategy on the BTC COIN-M inverse perpetual (BTCUSD_PERP.BINANCE_CM, 15-minute bars, single leg, pure OHLCV). Each UTC day it latches the close at 13:30 UTC - the US equity cash open - as that day's reference, then 45 minutes later (three 15m bars, the bar ending 14:15 UTC) measures the post-open impulse as close/reference - 1. If the impulse magnitude clears 0.4% it takes the position in the SAME direction (momentum, not a fade) and rides it into the US session, exiting time-boxed at the 20:00 UTC session close, or earlier on a 2.0x ATR stop fixed at the entry price, or at a 40-bar safety cap if the session-close bar is missing. Exactly one opportunity per day and one position at a time. Sizing risks 1% of equity against the ATR stop, capped at 0.4x equity x leverage of gross notional, floored to WHOLE $100-face inverse contracts via contracts_for_notional (BTC-margined/settled).

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.
Strategy report

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