Strategies
LTC 1H Inside Bar Breakout Long in Uptrend
Outcome: Abandoned
LtcOneHourInsideBarBreakoutLong
Outcome Summary
This was a deliberately minimal inside-bar breakout long on LTC 1H, entering on a compression breakout above the mother-bar high while above the 100-EMA, built simple to avoid verification timeouts. It suffered two simultaneous failures: a catastrophic over-leverage bug where a per-entry-only notional cap and a missing open-position guard let breakouts stack to 713% of equity, producing impossible daily swings that drove the account to zero (-99.9%, 100.68% drawdown), and beneath that no real edge at all — profit factor 0.67, 27.7% win rate, losses every single year. The analyst abandoned it at the backtest-review gate on its second iteration, distinguishing it from sibling trend-continuation strategies whose stacking bug merely distorted a positive edge: here the leverage-invariant PF 0.67 means even correct ≤1x sizing leaves a fee-churning net loser on a known dead pattern, so it never advanced to optimization or risk review.
Hypothesis
A minimalist long-only single-instrument strategy on LTCUSDT perpetual futures using 1-hour bars. The strategy waits for a classic inside-bar consolidation pattern (current bar's high < previous bar's high AND current bar's low > previous bar's low) and enters long on a breakout above the prior bar's high — but ONLY when the broader trend is up (price above the 100-bar EMA). LTC has been overlooked while BTC/ETH dominate flows, but it remains a top-15 liquidity pair on Binance with clean 1H structure and frequent breakout-from-compression patterns. The strategy uses ONLY OHLCV data — no funding rates, no L/S ratios, no liquidations, no pairs — to keep verification fast and deterministic. Total parameters: 4 (ema_period, take_profit_pct, stop_loss_pct, risk_per_trade_pct). No multi-timeframe, no supplementary feeds, no extra instruments. Built to be intentionally simple to avoid the verification-timeout failure mode that has plagued recent hypotheses.
Iteration 2 fix for the Layer-2 'frozen signal (value=0.0)' failure (steady_uptrend/downtrend/flat_ranging). Root cause was the gated-signal anti-pattern: calculate_signal returned 1.0 only when the binary inside-bar+breakout+trend pattern fired and 0.0 otherwise, which on smooth synthetic data is every bar -> all 396 signals identical at 0.0. Fix: calculate_signal now ALWAYS returns a continuous, bar-varying score (tanh of a weighted blend of EMA distance, breakout distance, and inside-bar compression) after warmup, so the monitoring signal varies. The exact binary entry decision is computed in the same place and stored in self._long_trigger, which should_enter and position_size consume, so Layer-3 trade behavior and the exit/sizing logic that already passed Layer 1 are byte-identical. No imports changed (numpy only), preserving the Layer-1 pass. Venue/leverage unchanged: BINANCE futures at leverage 1.0 (long-only, no amplification; risk-based sizing already keeps notional <= 1x equity, so leverage is correctly left at 1.0 and not referenced in sizing).
Implementation
Long-only inside-bar breakout on LTCUSDT.BINANCE USD-M perp, 1H bars, pure OHLCV. Detects an inside-bar consolidation (bar[-1] contained within mother bar[-2]) and enters long when the current bar closes above the mother bar's high, but only when price is above the EMA(100) uptrend filter. Exits on take-profit (3%), stop-loss (1.5%), or a close below the EMA. calculate_signal() returns a continuous tanh score (EMA distance + breakout distance + inside-bar compression) so the signal varies every bar; the binary inside+breakout+trend entry is stored in self._long_trigger and consumed by should_enter/position_size. Risk-based sizing (1% equity at the stop), notional capped at 1x equity, leverage 1.0.
Verification Results
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['ema_period', 'min_notional', 'stop_loss_pct', 'take_profit_pct', 'max_notional_frac', 'risk_per_trade_pct'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: Frozen signal: all 396 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - steady_downtrend: Frozen signal: all 396 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies. - flat_ranging: Frozen signal: all 396 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
Backtest Review
- Sharpe
- 0.76
- Total return
- -100.00%
- Max drawdown
- 100.00%
- Trades
- 668
- Win rate
- 27.4%
- Profit factor
- 0.67
Minimal, clean verification surface as intended (OHLCV-only, 4 params); inside-bar/breakout/EMA logic and risk-based sizing intent are coherent.
CATASTROPHIC over-leverage despite a 1x notional cap: avg_position_pct 713% because the max_notional_frac cap is per-entry and should_enter has no open-position guard, so inside-bar breakouts stack ~0.67x tranches to ~7x equity.
Account destroyed: impossible daily returns (+2238.7%, -500.1%, -698.0%), annualized_volatility 1360%, kurtosis 652, max_drawdown 100.68%, total_return -99.9% (equity hit zero).
No underlying edge: profit_factor 0.67, win_rate 27.7%, expectancy -$164/trade, losing in every year (2020 -39% → 2024 -189%); headline Sharpe 0.43 is a blown-up-curve artifact.
Known dead pattern: the inside-bar breakout fires in chop and gets chopped — already documented as a no-edge failure on LTC; PF 0.67 is near-leverage-invariant, so correct sizing still loses.
Outcome Summary
A per-entry notional cap is not a substitute for an open-position guard — without a flat-check, stacking entries blow notional far past the intended 1x — and an inside-bar breakout fires in chop and gets chopped, a leverage-invariant no-edge pattern on LTC that correct sizing cannot rescue.
The backtest-review analyst issued an 'abandon' verdict for two disqualifying failures at once: a fatal missing open-position guard (the max_notional_frac cap is applied per-entry, so successive breakouts stacked ~0.67x tranches to ~7x equity and wiped the account), and — independently — no edge, since the leverage-invariant profit factor of 0.67 means the chop-fired inside-bar breakout (a documented no-edge pattern on LTC) loses every year even at correct sizing.
A minimalist, long-only, single-instrument strategy on LTCUSDT 1H Binance futures (intended ≤1x notional, leverage 1.0) that entered long on a breakout above an inside-bar consolidation's mother-bar high, but only when price was above the 100-bar EMA, exiting on take-profit, stop-loss, or a trend break below the EMA.
Across 661 trades it lost -99.9% (the account hit zero) with profit factor 0.67, win rate 27.7%, expectancy -$164/trade, a 100.68% max drawdown and losses in every year (2020 -39% to 2024 -189%); a catastrophic over-leverage bug drove avg position to 713% of equity, producing impossible daily returns (+2238.7%, -500.1%, -698.0%), 1360% annualized volatility, and a meaningless positive headline Sharpe (0.43) that was just a blown-up-curve artifact.
Backtest and paper results are hypothetical. Trading involves risk of loss.