Skip to content

View original

BnbDailyTrendFourHourPullbackContinuationLS

Hypotheses

BNB Trend-Pullback Continuation — Long-Short, Asymmetric Reward:Risk (BNBUSDT.BINANCE USD-M, 1D Trend Filter + 4H Pullback Entry — Enter WITH an Established Higher-Timeframe Trend Only on a Pullback to a Dynamic Moving-Average Support, Tight Stop Just Beyond the Pullback Extreme, Trail the Trend Leg; 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument directional strategy on BNBUSDT.BINANCE USD-M that is deliberately engineered around the ONE lever the factory's evidence shows actually beats fees: ASYMMETRIC REWARD:RISK on a fat-tailed trend leg. It is NOT the pending BTC momentum-confluence survivor (that enters on breakout STRENGTH when two timeframes agree; this enters on a PULLBACK/retracement AGAINST the short-term move but WITH the higher-timeframe trend — a different entry mechanism and a different, lower-correlation instrument). It is NOT a mean-reversion fade (L53 — those fade a stretch expecting a small revert; here the pullback is only an ENTRY TIMING device inside a confirmed trend, and the target is a large trend-continuation move, not a small revert). It is NOT a basis/carry/cross-venue idea (that family just died fee_edge again — basis capture is sub-fee), NOT a squeeze breakout (L54), NOT cross-sectional (L52), NOT options/COIN-M. BNB is chosen deliberately: it is a deep, multi-year Binance USD-M instrument whose exchange-token-driven trends are relatively CLEAN and less BTC-beta-correlated than the alts that have failed, and it has NOT been the subject of the recent trend-family failures (those were HL, ETH, SOL, AVAX). The core insight: entering on a pullback to a dynamic support lets you place a TIGHT stop just beyond the pullback extreme while targeting the full trend continuation, producing a reward:risk of ~3:1+ and an average WINNING trade of multiple percent — which is how avg_trade_return_pct clears the 0.15% futures floor with real margin, unlike breakout-chasing entries that buy far from their stop. It fills the under-represented long-short direction bucket (13.3% vs the ≥45% implied by the ≤55% long-only cap) with a simple, 3-parameter, overfitting-resistant design.

Hypotheses

Iteration 2 fixes the single reported failure — Layer 3 produced no trades because should_enter never returned a side — with the smallest possible change, leaving the signal, entry rule, stops, trail and sizing that already passed Layers 1-2 untouched. Diagnosis, not guesswork: I replayed the exact coded rule over the same 365-day BNBUSDT 4H sandbox window and it fires 360 candidate signals, so the entry logic and thresholds were never the problem. The blocker was plumbing — the daily regime came from an `extra_bar_types` 1-DAY entry with an EMPTY `extra_instruments` list, and `InstrumentResolver.resolve_extras()` (src/backtesting/instrument_resolver.py:110) builds its output by iterating over extra_instruments, so an extra bar type with no paired extra instrument is silently dropped before the engine loads it. The 1-DAY bars therefore never reached the strategy, on_extra_bar never fired, _trend_dir stayed 0 for all 2149 evaluated bars, and should_enter returned None on its FIRST line — precisely the reported diagnostic. Rather than paper over it by listing the primary instrument as its own extra (which would still depend on that zip), I removed the second bar stream entirely: the daily close is now the last 4H close of each UTC calendar day, detected from bar.ts_init (a calendar anchor, not a bar counter, so it is identical across restarts, backtests and paper). Re-running the corrected rule on the same window gives 27 entries with an average trade of +1.49% net of the 0.10% round trip, a 35% win rate and a +25.5% best trade — the fat-right-tail, asymmetric-reward profile the hypothesis is built on, comfortably clearing the 0.15% futures floor. Side benefit: the regime filter now also works under Layer 2's single-stream synthetic test, where the extra leg never existed either. Imports are unchanged (Layer 1 stays green) and calculate_signal still returns the same continuous trend_dir x retracement-depth value every bar (Layer 2 stays green); leverage is set to 2.0 and is genuinely consumed as the notional cap in position_size.

Hypotheses

Outlier-driven, non-generalizing OHLCV trend follower (L9/L41 class, 0/213 survival). The +282% total return is a mirage produced by a handful of extreme days — 2021-02-26 alone is +128.7% (return_kurtosis 71.7, skew 3.5); removing them leaves no edge. Sharpe is only 0.44 with a CI [-0.20, 1.05] that straddles zero, and information_ratio -0.60 against a meaningful buy-hold benchmark means it UNDERPERFORMS holding BNB on a risk-adjusted basis — the headline is captured BNB beta on a few lucky days, not alpha. The edge is not persistent (losing 2023 and 2026 YTD) and carries a 36% drawdown (CI to 79.7%) plus 12.2% impact drag. avg_trade_return_pct 2.92% is above fees but is itself dominated by the same outlier trades. Optimization would select best-of-N on this fat-tailed noise and collapse in walk-forward OOS and the 15-day holdout, as this class has every prior time. Abandon at BACKTEST_REVIEW rather than spend the optimization budget.

Implementation

Long-short trend-pullback continuation on BNBUSDT.BINANCE USD-M perp, 4H bars. A daily-close EMA(50) regime filter (aggregated from the same 4H stream via UTC day boundaries) sets the trade direction; entries fire only when price has retraced at least pullback_depth_atr ATRs into its 4H EMA(20) dynamic support AND then reclaimed it, so the initial stop sits just beyond the pullback extreme (~1-3% of price). Winners are held with a chandelier trail (peak close -/+ trail_atr_mult x ATR) and cut on a daily regime flip, giving the intended ~3:1+ asymmetric reward:risk with no fixed take-profit. Position size is risk-anchored (equity x risk_pct / stop distance) and capped at equity x config.leverage.

Verification Results

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: BNBUSDT.BINANCE-4-HOUR-LAST-EXTERNAL, Bars processed: 2179 Diagnostics: should_enter() returned a side 0 times over 2149 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Verification Results

At BACKTEST_REVIEW, inspect the per-trade PnL distribution over the full ~6-year span and check robustness after removing the top 1-2 winners; verify the edge repeats across multiple trend legs.

Verification Results

Return is concentrated in a single tail trade. largest_win ~$19,991 exceeds the entire +16.3% net return, so excluding the one best trade the 365-day sandbox is roughly breakeven. Normal for a trend-following fat-tail profile, but on only 28 trades it makes the headline fragile and one-winner-dependent.

Verification Results

Optimization should be aware the holdout may be near-empty; this is intrinsic to a low-frequency trend mechanism, not a tunable defect.

Verification Results

Thin sample and 15-day holdout zero-trade risk. 28 trades over 363 days is below the ~100-trade floor for a single year (though ~170 over BNB's full ~6-year history clears it). At ~28/yr the Phase-3 15-day holdout may contain 0-1 trades (hard zero-trades-gate risk) and OOS windows will be moderately sparse. Sharpe CI [-1.15, 2.04] straddles zero.

Backtest Review

Clean, overfitting-resistant construction: 3 edge tunables, risk-anchored sizing, daily regime folded from the 4H stream (the iteration-1 zero-entry plumbing bug is genuinely fixed — 202 entries now)

Backtest Review

avg_trade_return_pct 2.92% is well above the 0.15% futures fee floor, PF 1.36, balanced long/short (104L/98S)

Backtest Review

Headline +282% is a single-day artifact: 2021-02-26 alone is +128.7%, and return_kurtosis 71.7 / skew 3.5 show the whole track record rests on ~4-5 outlier days — not a durable, repeatable edge

Backtest Review

Sharpe 0.44 with CI [-0.20, 1.05] straddling zero — not statistically distinguishable from no skill

Backtest Review

information_ratio -0.60 vs a meaningful buy-hold benchmark: risk-adjusted, it underperforms simply holding BNB; the return is largely captured beta on a few lucky days

Backtest Review

Not persistent: losing in 2023 (-8.5%) and 2026 (-10.5% YTD, monthly almost all negative); max_drawdown 35.9% (CI to 79.7%), impact_cost_pct 12.2%

Backtest Review

OHLCV single-instrument trend/pullback class has 0/213 survival here (L9/L41); optimization will best-of-N overfit this fat-tailed noise and collapse in OOS/holdout

Outcome Summary

BnbDailyTrendFourHourPullbackContinuationLS aimed to beat fees through asymmetric reward:risk, entering on a 4H pullback-and-reclaim within a confirmed daily trend on BNB with a tight stop and a trailing trend leg. Its first backtest looked striking — +282% total return, 202 balanced trades, PF 1.36, and a 2.92% average trade — but the gains leaned on roughly four or five outlier days (2021-02-26 alone contributed +128.7%), with Sharpe just 0.44, a confidence interval spanning zero, a 35.9% drawdown, and a -0.60 information ratio meaning it underperformed simply holding BNB. At backtest review the analyst issued an abandon verdict, judging the headline captured BNB beta rather than persistent alpha and noting the single-instrument OHLCV trend/pullback class had never survived (0/213). It was abandoned after 2 iterations before optimization, analysis, or risk review, to avoid overfitting fat-tailed noise that would collapse in walk-forward and holdout.

Outcome Summary

A high total return and above-fee per-trade average are not enough when the track record rests on a handful of outlier days — a Sharpe CI straddling zero and a negative information ratio versus buy-and-hold reveal captured beta, not alpha, and such fat-tailed single-instrument trend edges do not survive walk-forward.

Outcome Summary

The analyst abandoned it at backtest review (pre-optimization): the headline return is an outlier-driven mirage of captured BNB beta rather than alpha — it underperforms simply holding BNB on a risk-adjusted basis, is not persistent (losing in 2023 and 2026 YTD), carries a 36% drawdown, and belongs to the single-instrument OHLCV trend/pullback class with 0/213 survival, so optimization would best-of-N overfit the fat-tailed noise and collapse in OOS/holdout.

Outcome Summary

A long-short, single-instrument trend-pullback continuation strategy on BNBUSDT.BINANCE USD-M (3 parameters) that entered with an established daily-EMA trend only on a 4H pullback-and-reclaim of a dynamic moving-average support, placing a tight stop just beyond the pullback extreme and trailing the trend leg for an asymmetric ~3:1 reward:risk.

Outcome Summary

The initial backtest (BNBUSDT 4H, 2367 data days, 2020-02 to 2026-08) returned +282% with 202 balanced trades (104 long/98 short), profit factor 1.36, and avg_trade_return_pct 2.92% — well above the fee floor. But Sharpe was only 0.44 (CI [-0.20, 1.05] straddling zero), max drawdown 35.9%, information ratio -0.60 versus buy-and-hold, and the return was dominated by ~4-5 outlier days (2021-02-26 alone +128.7%, kurtosis 71.7, skew 3.5).
Strategy report

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