Skip to content
All strategies

Strategies

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)

Outcome: Abandoned

EtcBreadthConfirmedTimeSeriesMomentumLS

Outcome Summary

EtcBreadthConfirmedTimeSeriesMomentumLS traded ETC perp momentum only when breadth across six major perps agreed with ETC's trend direction. The first backtest cleared fees easily at 1.79% per trade, but it had Sharpe 0.29 and depended heavily on one 2021 trade. Backtest review still sent it to optimization. The 3-phase optimization flagged walk-forward overfitting (IS 0.93 vs OOS 0.48) and produced a negative holdout Sharpe of -0.16, and the analyst abandoned it after one iteration as no_edge that decayed after 2022. The analyst also flagged the optimized daily mark-to-market series for engine review because of paired -X/+X days on consecutive dates.

Hypothesis

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……Show moreShow less

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.

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,……Show moreShow less

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.

Failure code: no_edge, coded from the first measured report per L159 (Sharpe 0.29, PF 1.20, Sharpe CI -0.44 to 0.99, 2023 -16.5%, 2024 -13.3%). Not fee_edge: avg_trade_return_pct was 1.79% against the 0.15% floor. Three hard floors failed: holdout Sharpe -0.16 on 32 trades, walk-forward overfit (in-sample 0.93 vs out-of-sample 0.48), and out-of-sample Sharpe 0.48 below the 0.5 floor. Deflated Sharpe is 0.665 against an expected best-of-trials Sharpe of 0.19, and the result fails the programme-level false-discovery test. The edge decayed after the 2021-2022 trend years and lost money in 2024-2026. It is not market exposure: the book is balanced long and short. This is the fifth market-regime-gated single-name momentum variant to die, and L126 rules out re-optimizing it. Unverified: the optimized daily mark-to-market series shows paired -X/+X days on consecutive dates; send it to engine review.

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……Show moreShow less

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.

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).

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.

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.

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.

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.

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……Show moreShow less

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

Sharpe
0.29
Total return
61.54%
Max drawdown
32.31%
Trades
269
Win rate
37.2%
Profit factor
1.20

269 trades / 6.6 years, metrics_reliable, no sizing or min-notional drops.

avg_trade_return_pct 1.785% vs the 0.15% BINANCE floor; commissions only 3.89% of gross; PF 1.205; expectancy +$174/trade.

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.

Trend-follower-correct regime attribution (stressed +51.9%, calm +10.1%, normal -10.6%) and positive stress windows (LUNA, 2022 rate shock, COVID).

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%.

2021 alone exceeds lifetime PnL; 2023/2024/2026 negative; positive-years share 4/7 = 57% (just under the 60% validity floor).

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%.

Impact already consumes 20.5% of gross PnL; capacity ~$2.4M.

Family prior (single-name OHLCV momentum clone, PF ~1.2, Sharpe <1) usually dies in the 3-phase deflation — advisory, not a gate.

Outcome Summary

The fee margin was comfortable, but the edge was concentrated in the 2021-2022 trend years and a few outlier trades. It was the fifth market-regime-gated single-name momentum variant to die, and the abandon reason says L126 rules out re-optimizing it.

Backtest review sent it on to optimization. The analyst then abandoned it as no_edge because three hard floors failed: a negative holdout Sharpe, the walk-forward overfit flag, and an out-of-sample Sharpe below 0.5. It also failed the programme-level FDR test (p=0.335).

Long-short, volatility-normalised time-series momentum on ETCUSDT.BINANCE 4H bars. It entered only when a signal-only breadth measure agreed with the direction of ETC's own trend. Breadth was built from the daily trends of six major perps (BTC, ETH, BNB, XRP, ADA, LTC). Exits used an ATR chandelier stop.

The initial backtest (2020-01 to 2026-09) returned 61.5% over 269 trades, with Sharpe 0.29, PF 1.20, max drawdown 32.3% and avg_trade_return_pct 1.79%. One 2021 ETC long produced 79% of realized PnL. After optimization, the full-period Sharpe was 0.36 and return 75.8% over 253 trades. Walk-forward out-of-sample Sharpe was 0.48 against 0.93 in-sample, and the holdout Sharpe was -0.16 on 32 trades.

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