Skip to content

View original

EthWeeklyTimeSeriesMomentumLS

Hypotheses

ETH USD-M Weekly-Bar Time-Series Momentum, Long-Short (Single-Instrument ETHUSDT.BINANCE, 1-WEEK Primary Bars, Single-Timeframe Sign-of-Trend, ATR-Trailing Exit, 2-Parameter)

Hypotheses

A LONG-SHORT, single-instrument, pure-OHLCV time-series momentum strategy on ETHUSDT.BINANCE USD-M perpetual expressed on 1-WEEK bars at a MACRO holding horizon. Fills the factory's single most under-represented horizon bucket (macro_1w_plus = 0.6%). NO confluence gate, NO regime/vol filter (L92), NO basket (L77/L88), NO second timeframe — the simplest possible expression: sign of a single weekly trend statistic, long or short, ATR-trailing stop, 2 parameters. Core bet: ETH shows multi-week directional persistence, and a macro cadence makes fees structurally irrelevant.

Hypotheses

Implements the hypothesis literally and minimally. (1) Single instrument, single timeframe: ETHUSDT.BINANCE with 1-WEEK primary bars and no extra legs - it fills the macro_1w_plus bucket end to end (a prior weekly attempt in the corpus died by shipping a 1-DAY config, so the bar_type is weekly everywhere). (2) Sign-of-trend, long-short, no filters: should_enter is a pure sign test on the trend statistic, with no threshold, regime gate or confluence condition, so the entry conjunction cannot be over-selective (the well-known zero-trade failure mode) - the only precondition is that the deques are warm. (3) Two tuned parameters: momentum_lookback and atr_trail_mult; vol_lookback, atr_period, target_vol and max_notional_frac are warm-up/sizing machinery, and every hard clamp in __init__ is mirrored in _param_bounds so the optimizer never searches values the code silently rewrites. (4) Continuous signal: the t-statistic is recomputed on EVERY bar and returned in its natural (z-score-like) units - there is no gated 'return 0.0' path except genuine warm-up, so the signal varies bar to bar. (5) Futures venue: long+short requires a MARGIN account, so BINANCE USD-M, but leverage stays 1.0 because the volatility target already caps notional at or below equity - I deliberately did NOT set leverage > 1 that the sizing would not consume. (6) min_bars_required() returns 2 so the base class starts calling calculate_signal immediately and the internal windows warm from the first bars; the premature-entry guard lives in should_enter (windows full, ATR and realised vol positive), which avoids paying warm-up twice - the exact defect that starved an earlier weekly strategy of trades. With ~333 weekly bars available for ETHUSDT.BINANCE and a ~27-bar warm-up, well over 250 bars are tradeable in the sandbox window. (7) The ATR trail is evaluated on the weekly close rather than as a venue order: the bracket helper only supports fixed stop/TP percentages (not a ratcheting level) and a standalone resting reduce-only stop is a non-contingent working order that would mute should_exit for the position's whole life. One honest caveat: at weekly granularity the trail can only react at the close, so an intra-week spike through the level is not captured - that is inherent to a macro-cadence trailing exit, not a coding shortcut.

Hypotheses

Negative expectancy on a reliable 28-trade / 6.3-year sample: profit_factor 0.9488 (<1) and realized USD expectancy -$1037/trade. The +197.8% headline is an artifact — end_unrealized_pct 226.81% means the realized closed-trade track record is NEGATIVE (~-29%); the paper gain lives entirely in an un-exited final position. Compounded by an 80% max drawdown and a Sharpe CI [-0.42, 0.95] straddling zero. The single-name weekly sign-of-trend edge loses in the calm regime and is entirely right-tail-dependent (QA's concern confirmed). Optimization cannot lift a PF<1, realized-negative signal above zero — 2 hours of compute would only curve-fit the handful of lucky windows. abandon_class = negative_expectancy.

Implementation

Long-short time-series momentum on the ETHUSDT.BINANCE USD-M perpetual, expressed on 1-WEEK bars at a macro holding horizon. Every week the strategy computes ONE trend statistic - the sum of the last N weekly log returns divided by (weekly realised sigma * sqrt(N)), i.e. the N-week cumulative return as a t-statistic - and takes the bare SIGN of it: long above zero, short below zero. There is no confluence gate, no regime or volatility filter, no second timeframe, no basket and no supplementary data. Positions exit on either a sign flip of the statistic or an ATR trailing stop (close beyond atr_trail_mult * weekly ATR from the highest high / lowest low since entry), then re-establish on the other side, so the book is effectively always in the market. Size is volatility-targeted: notional = equity * min(target_vol / realised annualised vol, max_notional_frac), capped at 1x equity with leverage 1.0, so exposure contracts when ETH volatility expands instead of compounding into a blow-up. Turnover is a handful of round trips a year against per-trade moves measured in tens of percent, which is what makes the ~0.10% round-trip taker cost structurally irrelevant at this cadence.

Verification Results

Reset self._entry_side = None on position close / when _position_side() returns None, so the fallback never carries a stale side.

Verification Results

should_exit() falls back to self._entry_side when _position_side() reports flat. This stale side is only a Layer-2-proxy convenience; in a real backtest should_exit is gated behind an open position so it cannot fire a phantom exit, but _entry_side is never cleared on close and could mislead future maintenance.

Verification Results

Single-name weekly TSMOM is a marginal, high-variance class: the sandbox loses in the calm-vol tercile (-25.8%, Sharpe -0.60) and the whole edge is concentrated in normal/stressed regimes; Sharpe CI [-0.33, 1.23] straddles zero and only 28 trades over the window, so the sign-of-trend edge is fragile and may not clear deflation. Worth watching per-trade USD expectancy (avg_win $48k vs avg_loss $18k, win_rate 32%) on full history — the payoff is right-tail-dependent.

Backtest Review

Clean, minimal 2-parameter mechanism; trades implement the stated sign-of-weekly-trend TSMOM (28 entries, 17 long / 11 short, balanced long-short as hypothesized).

Backtest Review

Weekly macro cadence makes fees negligible (commission only 1.12% of gross), so this is NOT a fee-edge death.

Backtest Review

Negative expectancy: profit_factor 0.9488 (<1) and avg_trade_pnl_usd -$1037/trade over a reliable 28-trade / 6.3-year sample — gross losses exceed gross wins.

Backtest Review

Headline +197.8% total_return is a mark-to-market illusion: end_unrealized_pct 226.81% means the realized closed-trade record is NEGATIVE (~-29%); the entire paper gain sits in an un-exited end position that can fully reverse.

Backtest Review

max_drawdown 80.05% (CI 45.8–93.9%) — far above any deployable risk tolerance (L19: DD>50% has never survived).

Backtest Review

win_rate 32%, Sharpe 0.40 with CI [-0.42, 0.95] straddling zero, information_ratio -0.55, recovery_factor -1, CAGR -100%.

Backtest Review

Loses in the calm-vol tercile (-17.8%, Sharpe -0.20) with the whole edge concentrated in normal/stressed regimes — QA's right-tail-dependence concern is borne out; annual returns are catastrophic in 2023 (-89%) and 2024 (-237%).

Backtest Review

The tiny per-trade USD expectancy is negative even though avg_trade_return_pct reads 25% (pct_notional) — losers carry larger vol-targeted notional, confirming edge-absent, not fee-fragility.

Outcome Summary

EthWeeklyTimeSeriesMomentumLS-37e5f8cadf

Outcome Summary

EthWeeklyTimeSeriesMomentumLS tested the simplest possible expression of weekly time-series momentum on ETH perpetuals — the sign of one trend statistic, long or short, with an ATR trailing stop and volatility-targeted sizing — to fill the factory's under-represented macro weekly horizon. The backtest ran cleanly over 6.3 years and 28 trades, and fees were negligible as hypothesized (commission only 1.12% of gross), so this was not a fee death. But the realized track record was negative: profit factor 0.9488, -$1037 realized expectancy per trade, and an eye-catching +197.8% headline that was entirely an un-exited final position with realized closed trades around -29%, all atop an 80% drawdown and a Sharpe indistinguishable from zero. The analyst abandoned it at backtest-review as negative_expectancy before optimization, judging that curve-fitting a handful of lucky right-tail windows could not lift a realized-negative, calm-regime-losing signal above zero.

Outcome Summary

A large positive total return can be a mark-to-market illusion sitting in an un-exited final position; judge viability on realized closed-trade expectancy and profit factor, not the headline equity mark.

Outcome Summary

The backtest-review gate returned 'abandon' before optimization: negative expectancy (PF<1, realized USD expectancy negative) on a reliable 28-trade sample, compounded by an 80% drawdown and a Sharpe CI straddling zero, with the edge losing in the calm regime and being entirely right-tail-dependent.

Outcome Summary

A long-short, single-instrument time-series momentum strategy on ETHUSDT.BINANCE USD-M perpetual using 1-week bars, taking the bare sign of one weekly trend t-statistic with an ATR trailing stop, betting that ETH's multi-week directional persistence at a macro cadence makes fees structurally irrelevant.

Outcome Summary

Over a 6.3-year, 333-week backtest it took 28 trades (17 long / 11 short) with a 32% win rate, Sharpe 0.40 (CI [-0.42, 0.95]), profit factor 0.9488, and 80% max drawdown. The +197.8% headline total return was a mark-to-market artifact: end_unrealized_pct of 226.8% means the realized closed-trade record was negative (~-29%) at a realized expectancy of -$1037/trade.
Strategy report

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