Skip to content

View translation

BnbDailyTurtleTwoChannelBreakoutLS

Hypotheses

BNB Binance Daily Two-Channel (Turtle) Breakout Trend, Long-Short (Single-Instrument BNBUSDT.BINANCE Perp, Daily Bars — Enter on 20-Day High/Low Break, Exit on Opposite 10-Day Channel, Pure OHLCV, 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument, pure-OHLCV daily trend-breakout on BNBUSDT.BINANCE USD-M perpetual using the classic Turtle TWO-CHANNEL structure: enter on a break of the N-day high/low (entry channel) and exit on a break of the opposite shorter M-day channel (a fundamentally different exit mechanism than an ATR trail or an EMA reclaim). It sits squarely in the only zone the failure record shows is viable: (1) DAILY breakout legs on BNB run multi-day to multi-week and move ~5-15%, dwarfing the ~0.10% round-trip fee — avoiding the confirmed fee_edge death of intraday 15m continuation (avg trade −0.046%); (2) over Binance's multi-year BNB history a 20-day channel fires ~100-180 times, a statistically MEASURABLE sample — avoiding the 'unmeasurable/CI-straddles-zero' deaths of my low-frequency options and funding gates; (3) it is SIMPLE pure-OHLCV, single-instrument, standard incremental indicators (rolling high/low, ATR) — the only construction the developer reliably ships without whole-strategy swaps or timeouts. It adds genuine SYMBOL diversity: BNB is a liquid major with LOWER BTC correlation than ETH/SOL, so its trend edge is less redundant with the BTC/ETH/SOL pending ideas, and it fills the under-target LONG-SHORT direction bucket (13.5% vs an 86%-long-only book). It is DISTINCT from every pending idea by construction and cadence: the two-channel Turtle exit differs from my BTC-HL 4H EMA-channel trend-ride and my SOL-HL 4H vol-regime Donchian breakout (single-channel + ATR), it is the mechanical opposite of my BTC-HL range mean-reversion, and it is daily rather than 4H/weekly. Only 3 parameters.

Hypotheses

QA's two findings pull in opposite directions and that squeeze is the real problem, so this iteration stops trading one off against the other. Iteration 1 (20/10 on daily bars) had the right trend-follower geometry but 6 trades — unmeasurable. Iteration 2 bought frequency by halving the horizon to 10/5 and got 15 trades but inverted the payoff, and that inversion is structural rather than bad luck: the loss cap is FIXED at 2N while the win cap is the distance from the running extreme down to the exit channel, and halving the exit channel from 10 to 5 days moved that level from roughly 2.5-3.5 ATRs off the extreme to roughly 1-1.5 ATRs. A 2-ATR loss against a ~1.5-ATR win truncation is a negative-expectancy trend-follower by construction — exactly what QA measured (avg_loss $1479 > avg_win $1052 at a 53% win rate, avg_trade_return_pct 0.0101%, PF 0.813). So I did NOT shorten the channels again (QA warned against pushing toward noise scale and I agree): I restored the 20/10 CALENDAR-day horizon, which restores win-cap > loss-cap and is the only geometry in which the average captured move can clear the 0.15% fee floor, and separately dropped the measurement granularity from 1-DAY to 12-HOUR bars to recover the cadence the shortening was reaching for. The granularity change does not touch the trend horizon at all — channels remain 20 and 10 calendar days (40/20 bars) — but the strategy now evaluates twice as often, so breaks and exits are detected up to half a day sooner and, the biggest cadence effect, the fresh-break latch re-arms twice as fast so the book is eligible for the next break sooner after each exit. To keep the change surgical I held every risk quantity constant: ATR still spans 20 calendar days (40 bars) and the 2N stop is converted from daily-ATR units to 12H-ATR units by sqrt(2), so the loss cap, the 2% risk per trade and the position notional are identical to iteration 2; only the sampling rate and the horizon moved. Code changes are confined to deriving channel lengths as days x bars_per_day and that one sqrt conversion — the signal logic, fresh-break rule, exit logic, sizing and imports that passed Layers 1-3 are untouched. I made no sizing change for QA's second finding and agree with their read: risk-anchored quantity, an independent 1x-equity notional cap, floor-rounding and a min-notional check cannot produce a 711% drawdown at leverage 1.0 with liquidated=false, so the >100% risk metrics are the engine-side normalization convention seen on every sandbox run this session. Finally, the honest bound: 12H sampling recovers frequency by roughly 1.5-2x, not 3x. If this run comes back with EITHER an average captured move still below the 0.15% fee floor OR a sample too small to measure, then daily-horizon single-instrument channel breakout on BNB cannot clear both bars simultaneously and the family should be abandoned rather than tuned a fourth time — there is no fourth knob here that is not curve-fitting, and that is my recommendation to the Analyst in that case.

Hypotheses

Artifact-contaminated, below-measurable single-instrument breakout with no underlying edge — not worth 2 hours of optimization, and iteration 3 of a family the developer already pre-committed to abandon if the sample stayed too small (it did: 64 trades vs the targeted ~100-180). The 164% headline rests almost entirely on two physically impossible single-day prints — 2021-03-25 +116.96% and 2024-05-01 +50.5% — which cannot occur at the stated max_notional_frac=1.0 / leverage=1.0 (a day cannot return more than BNB's own move at <=1x); return_kurtosis 181.7 and skew 7.84 mark a sizing/mark artifact or data spike, not a fat-tailed edge (cause not independently verified). Stripping those two days leaves flat-to-negative returns in every other year (2020 -5.1%, 2022 -4.9%, 2023 -1.5%, 2025 -3.4%, 2026 +0.7%), and avg_trade_return_pct 9.88% is entirely the outlier. Even at face value it is not significant: Sharpe 0.617 with bootstrap CI [-0.096, 1.274] straddling zero, PSR 0.929, win_rate 31%, and it is the L30/L63 single-instrument channel-breakout graveyard with mostly negative stress-window Sharpes and max_drawdown 27% (CI to 58%). Two grounds converge on abandon: the backtest is untrustworthy (impossible single-day P&L), and ex-artifact there is no edge to optimize on a below-measurable sample. Failure pattern: overfit/no_edge single-instrument breakout, suspected backtest artifact, unmeasurable sample (L30/L63/L10).

Implementation

Long/short two-channel (Turtle) breakout on the BNBUSDT.BINANCE USD-M perpetual, pure OHLCV. The trend horizon is 20 calendar days for entry and 10 for exit, now measured on 12-HOUR bars (40/20 bars) so the horizon and the sampling rate are independent: a close above the prior 20-day high goes LONG, below the prior 20-day low goes SHORT (channels built strictly from bars before the breaking bar, each distinct break traded once via the fresh-break latch), and the position closes on a break of the opposite 10-day channel or at a hard 2-daily-ATR catastrophe stop from the entry price. ATR spans the same 20 calendar days and the 2N stop is converted from daily-ATR to 12H-ATR units by sqrt(2), so the loss cap, per-trade risk and position notional are unchanged from the previous iteration. Sizing is the Turtle unit rule: risk_pct of equity risked to the 2N stop, independently capped at 1x equity gross notional and floored at BNB's 0.01 step and min notional. Three tunables: entry_channel_days, exit_channel_days, risk_pct.

Verification Results

CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.

Verification Results

Granularity drift: hypothesis says 'Daily Bars', config is 12-HOUR. Documented iter-3 change to recover frequency; the TREND HORIZON is preserved at 20/10 CALENDAR DAYS (40/20 12H bars), so the Turtle structure is faithful — only sampling rate moved. Not critical; note it on the hypothesis record if promoted.

Verification Results

Fat-tail-driven / overfit-fragile: Sharpe CI straddles zero, win_rate 0.328, skew 9.2 / kurtosis 219 with one dominant win. Inherent to a low-frequency Donchian trend-follower, not a code fault, but in-sample metrics aren't trustworthy alone — OOS holdout and PBO gate must carry the decision; don't tune a 4th time if it fails.

Backtest Review

Clean 3-parameter Turtle construction, pure OHLCV single-instrument; low fee drag (commission 1.3% of gross) and contained turnover

Backtest Review

Trend-follower asymmetry is correctly restored (avg_win $15.4k > avg_loss $4.1k) — the iteration-3 geometry fix worked mechanically

Backtest Review

Headline rests on impossible single-day prints: 2021-03-25 +116.96% and 2024-05-01 +50.5% at a stated <=1x exposure — return_kurtosis 181.7, skew 7.84; a sizing/mark artifact or data spike, not a real edge

Backtest Review

Ex-outlier there is no edge: every year without an artifact day is flat-to-negative (2020 -5.1%, 2022 -4.9%, 2023 -1.5%, 2025 -3.4%, 2026 +0.7%)

Backtest Review

Below measurability floor: 64 trades over 6.4 years (hypothesis targeted ~100-180); Sharpe 0.617 with CI [-0.096, 1.274] straddling zero, PSR 0.929, win_rate 31%

Backtest Review

Single-instrument channel breakout is the L30/L63 graveyard; stress windows mostly negative; max_drawdown 27% (CI to 58%)

Iteration History

Verification failed (Layer 4 — QA review): - UNMEASURABLE SAMPLE -- 6 trades, and the hypothesis's own frequency projection is off by ~20x. The sandbox produced total_trades=6 over 362 data_days with a Sharpe of 0.137 whose CI is [-1.69, 1.64] (straddles zero -- nothing is distinguishable from noise). The hypothesis claimed a 20-day channel would fire '~100-180 times' over multi-year history and be 'statistically MEASURABLE', but the realized rate is ~6 entries/year, so even the FULL multi-year BNB catalog (~6 years) yields only ~36 trades -- far below the ~100 needed to separate edge from noise (L16), and about 20x short of the projection. A daily single-instrument 20-day-channel breakout is structurally too low-frequency: each distinct break is (correctly) traded once, and a 20-day channel on one asset simply does not break often. The headline metrics (profit_factor 1.28, avg_trade_return_pct 1.29%, positive return) are pure small-sample artifacts at n=6 -- win_rate 0.333 is 2 wins out of 6, return_kurtosis 17.0, driven by one large win (largest_win $3849 vs avg_loss $1284). Per L7 this is also the pure-OHLCV breakout zero-survivor family (the sibling SOL-HL Donchian, ETH weekly-ORB iter1 and BTC-HL trend-ride all failed this session). - IMPLAUSIBLE RISK-METRIC UNITS -- verify (unchanged, engine-side). max_drawdown 10.35 (1035%, CI [5.82, 24.74]), var_95 0.98, cvar_95 1.69 are >100% / near-100% despite leverage 1.0, risk_pct 0.02, a 1.0x notional cap, avg_position_pct 28.2%, and liquidated=false -- the same metrics-normalization convention seen on every HL/Binance sandbox run this session, not a per-strategy sizing bug (the Turtle unit sizing here is correct: risk-anchored to the 2N stop, independent notional cap, floor + min-notional). Flag for engine-side confirmation only.

Iteration History

Verification failed (Layer 4 — QA review): - THE FREQUENCY FIX PARTIALLY WORKED BUT THE ENLARGED SAMPLE NOW CONFIRMS A NEGATIVE, BELOW-FEE-FLOOR EDGE. Halving the channels 20/10 -> 10/5 raised the count from 6 to 15 trades over 362 days -- but the strategy is now a net LOSER: avg_trade_return_pct 0.0101% (essentially zero, well below the 0.15% fee floor), profit_factor 0.813, Sharpe -0.135 (CI [-1.65, 1.47] still straddles zero), negative total return, expectancy -$129/trade. Tellingly the payoff geometry is now INVERTED for a trend-follower: win_rate 0.533 (a majority of wins) yet avg_loss $1479 > avg_win $1052 -- the shorter 10/5 channels bought more whipsaws that reverse before the leg develops, so frequent small wins are outweighed by larger losses. So the horizon change traded the unmeasurable-sample problem for a demonstrated-negative-edge one. Moreover ~15 entries/year sits exactly at the developer's OWN stated abandon threshold: 'if the realized rate still lands under ~15 entries/year... the family should be abandoned rather than tuned further.' Per L7 this is the pure-OHLCV breakout zero-survivor family -- the fourth/fifth such construction to fail this session (SOL-HL Donchian, ETH weekly-ORB iter1, BTC-HL trend-ride, this idea's iter1). - IMPLAUSIBLE RISK-METRIC UNITS -- verify (unchanged, engine-side). max_drawdown 7.11 (711%, CI [4.73, 23.47]), cvar_95 1.34 are >100% despite leverage 1.0, risk_pct 0.02, a 1.0x notional cap, avg_position_pct 27.8%, and liquidated=false -- the same metrics-normalization convention seen on every HL/Binance sandbox run this session, not a per-strategy sizing bug (Turtle unit sizing is correct: risk-anchored to the 2N stop, independent notional cap, floor + min-notional). Flag for engine-side confirmation only.

Iteration History

Verification failed (Layer 4 — QA review): - THE GEOMETRY FIX WORKED BUT THE SAMPLE IS STILL UNMEASURABLE -- and the developer's own pre-committed abandon criterion is met. Restoring the 20/10-day horizon did exactly what it should: the trend-follower payoff is un-inverted (avg_win $2722 > avg_loss $1577), avg_trade_return_pct is 2.38% (clears the 0.15% fee floor with room to spare), and the headline metrics are positive (PF 1.73, Sharpe 0.345, total_return +4.6%). BUT total_trades=8 over 330 data_days, with a Sharpe CI of [-1.38, 1.98] that straddles zero -- at n=8, PF 1.73 / win_rate 0.5 (4 wins, driven by largest_win $7126, kurtosis 14.2) is pure noise, not a measurable edge. The 12H-sampling trick recovered almost nothing: iteration 1 (daily) had 6 trades, this has 8. That is the crux and it is structural: the number of distinct 20-day breakouts on ONE asset is set by the TREND HORIZON, not the bar granularity -- finer bars detect the same breaks up to half a day sooner and re-arm the latch faster, but they cannot manufacture additional 20-day-channel breakouts. So the two requirements are mutually exclusive here, exactly as the developer feared: the SHORT horizon (iter2, 10/5) is measurable but geometrically negative-expectancy, and the LONG horizon (iter1/iter3, 20/10) is geometrically sound but produces ~6-8 trades/year -> unmeasurable. Daily-horizon single-instrument channel breakout on BNB cannot clear the fee floor AND the measurability bar simultaneously (L16). The developer stated this test up front: 'if this run comes back with EITHER an average captured move still under the 0.15% fee floor OR a sample too small to measure... the family should be ABANDONED rather than tuned a fourth time.' The sample-too-small branch is met. - IMPLAUSIBLE RISK-METRIC UNITS -- verify (unchanged, engine-side). max_drawdown 8.82 (882%, CI [5.50, 22.09]), var_95 1.03, cvar_95 1.72 are >100% despite leverage 1.0, risk_pct 0.02, a 1.0x notional cap (avg_position_pct 29.1%), and liquidated=false -- the same session-wide metrics-normalization convention, not a sizing bug. Sizing is correct, and the iteration-3 sqrt(2) conversion of the 2N stop from daily-ATR to 12H-ATR units correctly holds the loss cap, per-trade risk and notional constant vs iteration 2 (avg_position_pct 27.8% -> 29.1%). Flag for engine-side confirmation only.
Strategy report

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