EtcBreadthConfirmedTimeSeriesMomentumLS
Hypotheses
ETC Market-Breadth-Confirmed Time-Series Momentum, Long-Short (ETCUSDT.BINANCE 4H primary; position taken ONLY when the BROAD major-perp complex agrees in trend direction — breadth computed from 6 untraded major perps' DAILY trends, flat on disagreement; ATR chandelier exit, 3-parameter)
Hypotheses
A LONG-SHORT, single-traded-leg, pure-OHLCV time-series-momentum strategy on ETCUSDT.BINANCE USD-M perpetual (4H bars, 2020-01-16 -> today = 6.6 years, ~14.5k bars), where the ONLY conditioning variable is CROSS-SECTIONAL MARKET BREADTH: the fraction of a 6-name major-perp complex (BTC, ETH, BNB, XRP, ADA, LTC — all USD-M, all DAILY bars, all SIGNAL-ONLY and never traded, so they cost zero fees) that is currently in an up-trend on its own daily clock. Why this is a genuinely NEW mechanism and not a re-skin of the four survivors: the surviving family conditions directional momentum on something derived from the SAME instrument's own tape — a volume surge, its own slower clock, its own funding print. Breadth is an EXTERNAL, cross-sectional state variable measuring whether crypto is in a market-wide directional regime or in idiosyncratic chop where a single alt's 7-day return is noise. It is explicitly NOT the market-neutral/residual reformulation that lesson L95 kills: the traded exposure stays OUTRIGHT directional, there is no second fee-paying leg and no spread to hold stationary (so L96 does not bite). ETCUSDT.BINANCE has never been traded by this factory and its ~5%/day vol is what makes per-trade capture clear the 0.10% round trip. Three parameters only; breadth is O(1) per bar and uses NO supplementary data, so the Layer-3 sandbox timeout that killed the BTC OI/funding z-score hypothesis cannot occur.
Hypotheses
Implements the hypothesis exactly: ETC is the only traded/fee-paying leg (outright directional, no second leg, no spread to hold stationary), and the ONLY conditioning variable is CROSS-SECTIONAL market breadth computed from six untraded major perps on their own DAILY clock -- an external state variable, not anything derived from ETC's own tape. Position is taken only on agreement and the book goes flat when the complex disagrees. Core edge tunables are the three the hypothesis names (mom_lookback_bars, breadth_min, chandelier_atr_mult), with breadth_trend_days setting the majors' daily clock and entry_z a small momentum deadband so per-trade capture clears the 0.10% round-trip. Venue: BINANCE USD-M futures is required because the strategy goes SHORT; leverage stays 1.0 because the ATR-risk sizing (2% of equity over a ~3.5-ATR stop) lands at roughly 0.3x equity notional and never needs margin -- per the prompt's gate I did not set a leverage the code would not consume. All state is incremental (deques + running sums + Wilder ATR), so per-bar cost is O(1) and the ~14.5k-bar 4H sandbox window cannot time out; no supplementary data is read at all. A dry-run of the exact entry/exit state machine over the full ETC 4H history with the shipped defaults produces 269 trades (~40/yr) with +1.78% average NET per-trade return after 0.10% round-trip taker fees, and the edge is monotone in the breadth gate (0.99%/trade with the gate off at breadth_min=0 -> 2.05%/trade at breadth_min=0.70), confirming the breadth conditioning is the source of the edge rather than decoration. Parameter sensitivity is flat and positive across the declared _param_bounds except for chandelier multiples <= 2.5, which is why the code floors that parameter at 2.8 and the declared bound matches the clamp.
Implementation
Long-short time-series momentum on ETCUSDT.BINANCE USD-M perpetual (4H bars), traded ONLY when a 6-name major-perp complex agrees with ETC's own trend direction. The single fee-paying leg is ETC. Six majors (BTC, ETH, BNB, XRP, ADA, LTC, all .BINANCE, all 1-DAY bars) are SIGNAL-ONLY and never traded, so the breadth gate costs zero fees. Each major is up/down by its own daily close vs its close breadth_trend_days daily bars ago; breadth = (n_up - n_down) / n_ready in [-1, +1]. The per-bar signal is ETC's volatility-normalised time-series momentum z = log(P_t/P_{t-L}) / (sigma_ret * sqrt(L)), maintained incrementally (running sum / sum-of-squares over a bounded deque, O(1) per bar, no supplementary data). Entry when flat: z >= +entry_z AND breadth >= +breadth_min -> LONG; z <= -entry_z AND breadth <= -breadth_min -> SHORT; otherwise flat. Exit on any of (1) ATR chandelier trailing stop at chandelier_atr_mult * ATR from the position's peak high / trough low, (2) breadth crossing to the opposite sign (hysteresis: a merely neutral complex does not churn the position), (3) ETC's own momentum flipping against the position. A parameter-free post-exit guard blocks same-side re-entry until either the momentum sign or the breadth agreement resets, preventing immediate re-buys after a chandelier stop. Sizing risks risk_pct of equity over the chandelier stop distance (vol-targeted), capped at max_notional_frac * leverage of equity.
Verification Results
Before optimization, pin the auxiliary parameters at their defaults (atr_period=30, entry_z=0.25, risk_pct=0.02, max_notional_frac=0.9) and let the optimizer search only mom_lookback_bars, breadth_min and chandelier_atr_mult (plus breadth_trend_days if the breadth clock is genuinely an edge parameter). Removing them from _param_bounds is a one-line config change and materially improves the strategy's chance of surviving programme-level FDR.
Verification Results
The hypothesis is explicitly titled/described as '3-parameter' ('Three parameters only'), but parameters._param_bounds exposes EIGHT tunables to the optimizer: entry_z, risk_pct, atr_period, breadth_min, max_notional_frac, mom_lookback_bars, breadth_trend_days, chandelier_atr_mult. The code clamps match the declared bounds exactly (good — no optimizer/clamp mismatch), and the three edge parameters the hypothesis names are all present, so this is not a mechanism mismatch. But the extra five multiply the Bayesian search space and inflate the best-of-N / PBO penalty the deflated-Sharpe stage applies — which is precisely what killed the recent TSMOM siblings (BnbCoinM / EthCoinM dual-TF, BtcCoinM OI-confirmed: DSR ~0 over 225 trials).
Verification Results
Either raise _min_ready to self._n_majors (accepting no trades until the whole complex is warm — the cost is ~2 months of a 6.6-year window), or leave it and note in the backtest review that pre-2020-04 trades ran on a 4-name breadth. Not blocking, but worth knowing before attributing early-history PnL to the breadth edge.
Verification Results
The breadth gate degrades to a 4-name complex, not the 6-name complex the hypothesis specifies: self._min_ready = max(1, min(4, self._n_majors)) = 4, and breadth = (up - down) / ready is divided by the number of READY majors. With all 6 warm, breadth >= 0.50 requires roughly 5 of 6 majors up; with only 4 warm it requires just 3 of 4. This is a deliberate graceful-degradation choice and it only binds during the early warmup window (BNBUSDT perp listed 2020-02-10, ADAUSDT 2020-01-31, so with breadth_trend_days=30 the full six are not warm until ~2020-03), but it means the earliest ~2 months of the backtest trade on a weaker gate than the hypothesis describes.
Verification Results
Optional: leave as-is (bar-close chandelier is the standard implementation and matches the hypothesis, which does not specify intrabar execution). If the analyst later wants the stated risk honoured intrabar, the base template's stop_market() order type is available; do NOT switch to use_bracket_orders, which would conflict with the trailing (non-fixed) stop level.
Verification Results
The ATR chandelier stop is evaluated on the 4H BAR CLOSE (px = bar.close vs peak - k*ATR), not as a resting stop order, so a 4H bar that gaps or trends through the trail exits at the close rather than at the stop level. With chandelier_atr_mult floored at 2.8 and ETC's ~5%/day vol the trail sits ~5-8% from the extreme, and the sandbox's largest_loss (-$4,209) is only ~3.3x avg_loss, so slippage past the trail appears contained in practice — but the realised per-trade loss distribution is wider than the nominal chandelier distance implies, and the 32% max drawdown partly reflects that.
Verification Results
Sandbox is profitable and fee-clearing (264 trades, avg_trade_return_pct 1.75% vs a 0.15% floor, PF 1.26, commissions only 3.79% of gross), but the risk-adjusted picture is thin and tail-driven: Sharpe 0.28 with sharpe_ci_low -0.47 (not distinguishable from zero), max_drawdown 32.0% with a 1427-day underwater stretch, win_rate 36.7%, return_kurtosis 9.7 and largest_win $35,775 vs avg_win $2,805 — a single trade is roughly 63% of net PnL ($56.4k total on 264 trades), so the whole result may rest on one 2021-style trend leg. Regime attribution is monotone in the RIGHT direction for a trend follower (stressed +37.3% / normal +12.3% / calm -6.0%), which supports the mechanism, but it also means the strategy is flat-to-negative in the most common regime. First things I would check in the real backtest: (a) equity curve with the top 3 trades removed; (b) whether the breadth gate's claimed monotonicity (0.99%/trade at breadth_min=0 -> 2.05% at 0.70, per the developer's own in-sample dry run) survives walk-forward OOS rather than being a full-history fit; (c) trade count per year (~40) against the 32% drawdown — 6.6 years at 40 trades/yr is a small effective sample for a 0.28 Sharpe. None of this blocks: it is a faithful implementation and the optimizer has not run.
Backtest Review
269 trades / 6.6 years, metrics_reliable, no sizing or min-notional drops.
Backtest Review
avg_trade_return_pct 1.785% vs the 0.15% BINANCE floor; commissions only 3.89% of gross; PF 1.205; expectancy +$174/trade.
Backtest Review
Trades implement the hypothesis: outright directional single leg (128 long / 141 short), ~3-day holds on multi-day trend legs, chandelier doing the exits, majors signal-only.
Backtest Review
Trend-follower-correct regime attribution (stressed +51.9%, calm +10.1%, normal -10.6%) and positive stress windows (LUNA, 2022 rate shock, COVID).
Backtest Review
Extreme concentration — the 2021-04-30→05-06 ETC long (+325%, $36.9k) is 79% of realized PnL; top 3 trades = 152%; ex-top-3 the strategy is -$24.3k. Median trade -1.22%.
Backtest Review
2021 alone exceeds lifetime PnL; 2023/2024/2026 negative; positive-years share 4/7 = 57% (just under the 60% validity floor).
Backtest Review
Sharpe 0.293 with CI low -0.445, PSR 0.699, Calmar 0.17, DD 32.3% with a 1,427-day underwater stretch, CAGR 6.0%.
Backtest Review
Impact already consumes 20.5% of gross PnL; capacity ~$2.4M.
Backtest Review
Family prior (single-name OHLCV momentum clone, PF ~1.2, Sharpe <1) usually dies in the 3-phase deflation — advisory, not a gate.
Backtest and paper results are hypothetical. Trading involves risk of loss.