Skip to content

View original

TrxDailyLadderedMomentumLongRegimeFilter

Hypotheses

TRX Daily Laddered Long-Term Momentum Long with Regime Filter

Hypotheses

A long-only single-instrument long-term momentum strategy on TRXUSDT perpetual futures using daily bars and OHLCV-only data. TRX (Tron) is structurally unique among the available crypto majors — its price action is dominated by stablecoin issuance flows on the Tron chain (USDT-Tron is the largest stablecoin venue by transfers globally), which makes its volatility profile materially lower than other L1s and its correlation to BTC noticeably weaker. This delivers genuine portfolio diversification: existing pipeline strategies cover BTC (negative-funding carry + spot drawdown DCA), ETH (golden cross), BNB (volume breakout + weekend reversion), SOL (EMA trend continuation), LINK (multi-week trend), DOT (EMA pullback), AVAX (calm-regime hold) — all symbols with high BTC-beta. TRX's lower-vol smoother uptrend character produces qualitatively different return distributions. The strategy uses LADDERED momentum confirmation (price above its 30-day-ago AND 60-day-ago levels, plus 30-day return > 8%) rather than channel breakouts — explicitly avoiding the channel-position failure pattern that has killed ~6 strategies — and pairs this with the proven daily / long-only / regime-filter / ATR-trailing-stop architecture that has produced Sharpe 4.04 (ETH Golden Cross), 3.33 (BTC Spot Drawdown), and 2.03 (BNB Volume Breakout) successes. Few signals per year (~5-12 entries), keeping fee drag minimal.

Hypotheses

Iteration-2 minimal fix for the Layer-2 TypeError (_sma() takes 2 positional arguments but 3 were given). Root cause: _sma was a @staticmethod, but the Layer-2 _StrategyProxy rebinds class callables onto a stand-in instance, which discards the staticmethod descriptor and passes the proxy instance as an injected first positional argument, so the 2-param helper is called with 3 args. The fix moves _sma out of the class to a module-level function (_sma_of); module functions are never bound to an instance, so no self can be injected, and calculate_signal now calls _sma_of(self._close, self.regime_sma) directly. Nothing else changed: imports stay clean (Layer 1 green), and the laddered-momentum / regime / ATR-trailing-stop logic the harness exercised is byte-identical, so no earlier-layer regression. Venue remains BINANCE USD-M futures, leverage 1.0 (no amplification used, so the leverage_set_but_unused gate does not trigger).

Hypotheses

TRX laddered momentum has NO realized edge: profit_factor 0.952 (<1), negative expectancy (-$196.7/trade), win_rate 35.5%, Sharpe 0.148 with a CI straddling 0. The +26.6% headline is illusory — end_unrealized_pct 32.7 exceeds total_return 26.6, so the realized closed-trade record is negative (~-6%); the headline is an un-exited open position marked-to-market on the last bar. What little positive return exists is carried by a single +66.8% day (2024-12-04, kurtosis 269, skew 13.6), alongside a catastrophic 61.7% max drawdown and 12 consecutive losses. The strategy is implemented correctly and trades as specified (31 entries, 0 dropped), so this is a premise failure, not a code bug — TRX laddered momentum produces a negative realized expectancy that optimization cannot fix, and the sparse 31-trade sample would only let the optimizer fit to the lone 2024 outlier and fail the holdout. Not worth 2 hours. FAILURE PATTERN: single-asset long-term laddered momentum on a lower-vol crypto major produces a negative realized track record (PF 0.95, negative expectancy) whose positive headline is entirely open-position unrealized MTM plus one +66.8% outlier day — an outlier-and-paper-gain artifact with a 61.7% drawdown, not a validatable edge.

Implementation

Long-only laddered long-term momentum on TRXUSDT.BINANCE USD-M futures, DAILY bars, pure OHLCV single feed. Enters long when price exceeds both its 30-day-ago and 60-day-ago closes, the 30-day return exceeds 8%, and price is above its 200-day SMA (regime filter). Exits on an ATR trailing stop (3x ATR), a regime break (close below the 200-SMA), or a 20% hard-stop floor. The signal is the continuous 30-day return recomputed every bar; the laddered entry conditions are the discrete gate. Sized at 60% equity notional. leverage 1.0.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['ladder1', 'ladder2', 'atr_mult', 'atr_period', 'regime_sma', 'min_notional', 'mom_lookback', 'position_pct', 'mom_threshold', 'stop_loss_pct', 'size_precision'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: TrxDailyLadderedMomentumLongRegimeFilter._sma() takes 2 positional arguments but 3 were given (bar timestamp: 1735701660000) - steady_downtrend: TypeError: TrxDailyLadderedMomentumLongRegimeFilter._sma() takes 2 positional arguments but 3 were given (bar timestamp: 1735701660000) - flat_ranging: TypeError: TrxDailyLadderedMomentumLongRegimeFilter._sma() takes 2 positional arguments but 3 were given (bar timestamp: 1735701660000) - volatility_spike: TypeError: TrxDailyLadderedMomentumLongRegimeFilter._sma() takes 2 positional arguments but 3 were given (bar timestamp: 1735701660000) - zero_volume: TypeError: TrxDailyLadderedMomentumLongRegimeFilter._sma() takes 2 positional arguments but 3 were given (bar timestamp: 1735701660000) - price_gap: TypeError: TrxDailyLadderedMomentumLongRegimeFilter._sma() takes 2 positional arguments but 3 were given (bar timestamp: 1735701660000)

Backtest Review

Implemented correctly and trades as specified: 31 laddered-momentum entries, 0 dropped, all long — no code bug; diversification rationale (lower-beta TRX) is reasonable

Backtest Review

Headline is not real: end_unrealized_pct 32.7 EXCEEDS total_return 26.6, so realized closed-trade return is NEGATIVE (~-6%) — the +26.6% is an un-exited open-position mark-to-market that can fully reverse

Backtest Review

No realized edge: profit_factor 0.952 (<1), expectancy -$196.7/trade (negative), win_rate 35.5%, Sharpe 0.148 (CI -1.44 to 0.91 straddles 0)

Backtest Review

Entirely outlier-driven: 2024 +65.5% is carried by a single +66.8% day (2024-12-04); return_kurtosis 269, skew 13.6, tail_ratio 0.23 (losses dominate)

Backtest Review

Catastrophic risk: max_drawdown 61.7% (CI up to 83%), annualized_vol 52%, max_consecutive_losses 12, 2022 -37.6%; avg_position_pct 85.7%

Backtest Review

Sparse (31 trades / ~5/yr) — too few to validate, and the optimizer would fit to the lone 2024 outlier

Outcome Summary

This strategy sought genuine diversification by trading laddered long-term momentum on lower-volatility TRX daily — requiring price above its 30- and 60-day-ago levels, a >8% monthly return, and a 200-SMA uptrend, with an ATR trailing stop. It was implemented correctly over 31 trades, but the +26.6% headline was an illusion: unrealized open-position MTM (32.7%) exceeded the total, leaving a roughly -6% realized record with profit factor 0.952, negative expectancy, a 61.7% drawdown, and a positive year carried entirely by one +66.8% day. The analyst abandoned it at the backtest-review gate on its second iteration as a premise failure — an outlier-and-paper-gain artifact with no realized edge and too sparse to validate — so it never advanced to optimization or risk review.

Outcome Summary

A reasonable diversification rationale (lower-beta TRX) does not create an edge — when the headline total return is exceeded by end-of-test unrealized MTM, the realized record is actually negative, and a positive figure carried by a single +66.8% day with a 61.7% drawdown is an outlier-and-paper-gain artifact, not a validatable signal.

Outcome Summary

The backtest-review analyst issued an 'abandon' verdict: the code was correct and traded as specified, so this is a premise failure — TRX laddered momentum produces a negative realized expectancy whose positive headline is just an un-exited open position marked-to-market plus one outlier day, atop catastrophic risk, and the sparse 31-trade sample would only let optimization fit the lone 2024 outlier and fail the holdout.

Outcome Summary

A long-only laddered long-term momentum strategy on TRXUSDT daily Binance futures (1.0x leverage, 0.60 position) — entering long when price was above both its 30-day and 60-day-ago closes AND its 30-day return exceeded 8% AND it sat above the 200-SMA, with an ATR trailing stop — pitched as portfolio diversification via TRX's lower-volatility, weaker-BTC-beta, stablecoin-flow-driven character.

Outcome Summary

Across 31 trades it had no realized edge: profit factor 0.952, expectancy -$196.7/trade, win rate 35.5%, Sharpe 0.148 (CI straddling zero), a 61.7% max drawdown and 12 consecutive losses; the +26.6% headline was illusory because end-of-test unrealized MTM (32.7%) exceeded the total return — the realized closed-trade record was about -6% — and what little gain existed came from a single +66.8% day (2024-12-04, kurtosis 269, skew 13.6).
Strategy report

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