Skip to content
All strategies

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

Two disqualifying failures at once. (1) Catastrophic over-leverage: avg_position_pct 713% even though the code sets max_notional_frac=1.0, because that cap is applied per-entry and should_enter has no open-position guard — successive inside-bar breakouts in an uptrend stack ~0.67x tranches on top of each other to ~7x equity, producing impossible daily returns (+2238.7% on 2024-07-11, -500.1% on 2024-09-11, -698.0% on 2025-04-20), 1360% annualized vol, kurtosis 652, and max_drawdown 100.68% (the account hit zero,……Show moreShow less

Two disqualifying failures at once. (1) Catastrophic over-leverage: avg_position_pct 713% even though the code sets max_notional_frac=1.0, because that cap is applied per-entry and should_enter has no open-position guard — successive inside-bar breakouts in an uptrend stack ~0.67x tranches on top of each other to ~7x equity, producing impossible daily returns (+2238.7% on 2024-07-11, -500.1% on 2024-09-11, -698.0% on 2025-04-20), 1360% annualized vol, kurtosis 652, and max_drawdown 100.68% (the account hit zero, total_return -99.9%). This is the same missing-flat-check pattern seen across the strategy family, here fatal. (2) No underlying edge: profit_factor 0.67, win_rate 27.7%, expectancy -$164/trade, and losses in every year (2020 -39%, 2021 -40%, 2022 -60%, 2023 -83%, 2024 -189%); the positive headline Sharpe 0.43 is a meaningless artifact of the blown-up high-vol curve. The inside-bar breakout fires in chop and gets chopped — already a documented no-edge pattern on LTC. This is NOT the iterate-the-sizing case used for the BTC/ETH/SOL trend-continuation siblings (which had positive PF/alpha distorted by stacking): here profit_factor 0.67 is near-leverage-invariant, so even correct ≤1x sizing leaves a fee-churning net loser, and the pattern loses every year. No parameter region turns an edgeless, chop-fired breakout into a viable strategy, so optimization is not worth the 2 hours — abandon. (Developer note: the per-entry cap + missing open-position guard that produced 713% exposure must be fixed in future strategies, but it is not the sole reason for abandonment — the edge is absent regardless.)

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.