Strategies
LTC 4H MACD Bullish Momentum Continuation Long
Outcome: Abandoned
LtcFourHourMacdBullishMomentumContinuationLong
Outcome Summary
LtcFourHourMacdBullishMomentumContinuationLong was a deliberately simple, overfitting-resistant attempt to trade with momentum using the textbook MACD(12/26/9) crossover on LTC 4H bars, pure OHLCV to sidestep the prior waves of supplementary-data failures. The implementation was clean — 219 long entries across 6.5 years — but the edge existed only in 2020 (+74%) and then bled money every year through 2026, ending at -37.3% total return, Sharpe -0.23, and an 83.6% max drawdown. The analyst abandoned it at the backtest-review gate, reasoning that a fully-arbitraged canonical crossover with consistent five-year losses offered nothing for the optimizer to sharpen. Retired after 3 iterations without reaching optimization or analyst promotion review.
Hypothesis
Iteration 3 fixes only the reported Layer-2 failure: `_ema_series() takes 2 positional arguments but 3 were given`. Root cause is the verifier's `_Wrapper` cloning (strategy_verifier.py:118-132), which re-binds every callable attribute via `types.MethodType`, injecting a spurious first arg into any static/plain-function helper. The minimal, guaranteed fix is to remove the helper method entirely and compute the EMA with an identical LOCAL nested function (`ema_series`) inside `calculate_signal` — a closure is never copied or rebound by the harness, so the TypeError cannot recur. The EMA math, the MACD line/signal/histogram construction, the bull/bear-cross gating, the continuous non-frozen signal, and all should_enter/should_exit/position_size logic are byte-for-byte unchanged, so the previously-passing Layer-1 static checks and the entry/exit mechanism are preserved. Imports remain clean (numpy only). Leverage is genuinely consumed in sizing (equity*position_pct*leverage).
Fundamentally losing strategy over a large, correctly-implemented 219-trade sample - not a code bug or small-sample artifact. Negative expectancy (-369/trade), profit_factor 0.907, Sharpe -0.23, Sortino -0.48, and an 83.6% max drawdown. The only profitable year was 2020 (+74%); every year since has lost money (2022 -11%, 2023 -30%, 2024 -13%, 2025 -76%, 2026 -16%), showing a decayed/absent edge. Canonical MACD(12/26/9) bullish-crossover continuation, long-only on a single alt perp, is a fully-arbitraged non-edge; optimization varies parameters within the mechanism and cannot create expectancy where a large sample shows consistent losses across 5 years. Not iterate (implementation is correct) and not worth 2 hours of optimization.
Implementation
Long-only MACD(12/26/9) momentum-continuation strategy on LTCUSDT.BINANCE USD-M perpetual futures, 4H bars, pure OHLCV (no supplementary data). Enters long on a bullish MACD-histogram crossover while the MACD line is above zero (trades WITH established bullish momentum); exits on a bearish crossover, a 4% stop-loss, or an 8% take-profit. Leverage 2.0, sizing at 0.60*2.0 = 1.2x equity notional, capital-relative.
Verification Results
Backtest Review
- Sharpe
- -0.23
- Total return
- -37.29%
- Max drawdown
- 83.63%
- Trades
- 219
- Win rate
- 31.1%
- Profit factor
- 0.91
Clean implementation: 219 long-only MACD continuation entries fire as designed, pure OHLCV, adequate sample and 6.5-year coverage.
One genuinely positive year (2020, +74%) shows the signal isn't inverted.
Fundamentally losing over a large sample: total_return -37.3%, Sharpe -0.23, Sortino -0.48, profit_factor 0.907, expectancy -369/trade.
Catastrophic risk: max_drawdown 83.6%, 1833-day drawdown duration, up to 12 consecutive losses.
Edge exists only in 2020, then loses money 5 straight years (2022 -11%, 2023 -30%, 2024 -13%, 2025 -76%, 2026 -16%) - classic decayed/no-edge signal.
Negative alpha (-0.031) and information_ratio (-0.35) vs LTC buy-hold; canonical MACD crossover is fully arbitraged with no residual edge to optimize toward.
Analysis
Do NOT optimize yet — the backtest is invalid due to a position-stacking leverage bug. SPECIFIC FIX: in should_enter(), return None if a position is already open (e.g. `if self.cache.positions_open(instrument_id=self.instrument_id): return None`) before checking self._armed. Currently every fresh bullish MACD crossover during an uptrend submits another 1.2x tranche on top of the existing long, compounding notional to ~6x equity (avg_position_pct 595.6%) and producing impossible >100% daily moves and sub -100% annual returns. After adding the flat-check, re-run and confirm avg_position_pct sits near the intended 120% and daily returns are bounded sanely. Optionally also confirm position_size() recomputes off current equity each entry (it does) so size scales down as equity falls. Once the sizing is correct, the true MACD-continuation edge can actually be judged — note the contaminated run already hints at a weak edge (PF 0.89, 30.6% win rate), so if the clean re-run is still net-negative this should be abandoned rather than optimized.
Outcome Summary
Canonical, universally-known indicators like MACD(12/26/9) crossover on a single major perp are effectively fully arbitraged — a signal that only worked in 2020 and decayed for five straight years has no edge for optimization to recover.
The analyst issued an 'abandon' verdict at the pre-optimization backtest-review gate: a correctly-implemented large-sample signal with negative expectancy and no residual edge to optimize, so optimization and later stages were never reached.
A long-only, pure-OHLCV momentum-continuation strategy on LTCUSDT 4H perps that entered on a canonical MACD(12/26/9) bullish histogram crossover while the MACD line was above zero, exiting on a bearish cross, stop-loss, or take-profit at 2x leverage.
Over ~6.5 years it fired 219 clean long entries but lost money: total return -37.3%, Sharpe -0.23, Sortino -0.48, profit factor 0.907, expectancy -$369/trade, 31% win rate, and an 83.6% max drawdown; only 2020 (+74%) was profitable, with every year 2022–2026 losing (2025 -76%).
Backtest and paper results are hypothetical. Trading involves risk of loss.