BtcTakerFlowExhaustionReversalLS1H
Гипотезы
BTC Taker-Flow Exhaustion Reversal, Long-Short (Single-Instrument BINANCE USD-M Perp, 1h Bars, Fade Extreme Aggressor Imbalance — Short Late-Stage FOMO Buying / Buy Panic Selling — Range-Regime Gated, Novel Taker-Ratio Signal, 3-Parameter)
Гипотезы
A LONG-SHORT, single-instrument mean-reversion on BTCUSDT.BINANCE (USD-M perp, 1h bars) driven by ORDER FLOW, not price — a signal input no deployed strategy uses. Per bar it computes the taker buy/sell aggressor imbalance (taker-buy volume fraction) from Binance futures taker-ratio supplementary data (fallback: aggressor-classified trade_ticks), smoothed over a short window. Thesis: when aggressor buying becomes extreme and sustained (e.g. taker-buy fraction ≥ 0.68 over the smoothing window), the marginal market-buyer is late-stage FOMO / forced covering with no fresh limit demand behind it — aggressor exhaustion that reliably precedes a short-term pullback, so FADE it SHORT. Symmetrically, extreme sustained taker-SELL aggression (fraction ≤ 0.32) is panic/capitulation market-selling into thinning offers — go LONG. This is deliberately a DIFFERENT family from everything dying in this factory: it is NOT trend-following (the 209-death single-regime graveyard — it is contrarian and regime-distributed, paying in every direction flow over-extends), NOT funding carry (the saturated fee-dying basket family — its edge is a 0.4–0.6% reversal move, not a sub-basis-point cash flow), NOT an N-leg basket (it is single-instrument, 2 fills per round-trip, so it sidesteps L12's 2N×10bps fee wall), and NOT options (no trade-count wall — extreme-flow events fire dozens of times per year, yielding hundreds of trades for reliable edge measurement). It is gated to NON-TRENDING regimes (fade only when a slow trend filter is flat/ranging) to avoid the one real failure mode — extreme flow that is INFORMED continuation rather than exhaustion. 3 low parameters (flow smoothing window, imbalance threshold, exit) keep it overfit-resistant.
Гипотезы
Iteration 3 addresses the sole Layer-4 QA failure: trade starvation (6 trades/363d) from an over-tight compound gate. No mechanism, import, or signal-logic change (those passed Layers 1-3); only the three entry/exit throttles are loosened so the strategy clears the ~100-trade measurability floor. entry_z 1.2->0.8 fires on more flow extremes while staying beyond noise and above the 0.10% round-trip taker cost (the thesis reversal is 0.4-0.6%). regime_threshold 0.55->0.65 admits more ranging bars so the ranging-AND-extreme-z conjunction stops compounding rarity, while still excluding strong trends (the informed-continuation failure mode). exit_z 0.3->0.25 and max_hold_bars 24->10 speed turnover, returning the strategy to flat sooner and multiplying the number of entry windows per year. The rolling-z scale-invariant signal (L5) and the contrarian, regime-distributed, single-instrument design that differentiate this from the trend/carry/basket/options graveyard are unchanged.
Гипотезы
Negative-expectancy single-perp taker-flow exhaustion fade with no edge and a supplementary data wall (L73/L55). profit_factor 0.62, total_return -5.29%, Sharpe -0.71 (CI [-1.35, 0.02]), expectancy -$62.6/trade, avg_trade_return_pct 0.0146% (~zero, net loser); avg_loss > avg_win with win_rate 0.447, so the fade is on the wrong side of the flow. Critically, despite 58,512 bars over 2019-2026, ALL 85 trades and 100% of returns fall in a single ~6-month 2026 window because the taker_ratio supplementary feed only covers a recent slice — annual_returns={2026:-5.32}, monthly 2026-03..08 — so a 3-window walk-forward plus 20% holdout cannot be built. This is the same order-flow-gated single-perp signature already abandoned three times this batch (BtcTakerAggressionPersistence, AvaxTakerAggressorDominance, EthTakerFlowBreakout). No parameter tuning flips a negative per-trade edge positive, and the optimizer cannot buy calendar coverage the feed lacks. Not worth 2 hours of optimization. Failure pattern: fee_edge/no_edge single-perp order-flow-gated fade with recent-only supplementary window.
Реализация
Long-short order-flow mean-reversion on BTCUSDT.BINANCE USD-M perp (1h bars). Computes a rolling z-score of the smoothed taker-buy aggressor fraction from Binance taker_ratio supplementary data; fades extreme sustained aggressor buying SHORT (late-stage FOMO exhaustion) and extreme aggressor selling LONG (panic capitulation), only in a ranging (low Kaufman efficiency ratio) regime. Exits on flow normalization, a 1% hard stop, or a time cap. Single-instrument, leverage 1.0, 3 core tunables.
Результаты верификации
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.
Результаты верификации
Reduce taker_lag_seconds default to ~7200-14400s so stale feeds suppress entries.
Результаты верификации
taker_lag_seconds defaults to 90000 (25 hours), so _current_fraction accepts a taker_ratio observation up to ~25h stale before returning None. Not a look-ahead (bisect bound is one-sided at bar ts_event <= ts_init), but on feed gaps the strategy trades on a day-old flow reading.
Результаты верификации
Append to _frac_buf only when self._tk_ts[idx] advances.
Результаты верификации
_current_fraction returns the latest observation regardless of novelty, so the same fraction is re-appended to _frac_buf each bar until the feed advances, mildly compressing the rolling-z baseline std. Not a correctness break at 1h cadence.
Обзор бэктеста
Clean single-instrument implementation (2 fills/round-trip, no basket fee wall), regime-gated, only 3 core tunables — overfit-resistant by construction
Обзор бэктеста
Order-flow signal input is genuinely differentiated from the trend/carry/basket graveyards
Обзор бэктеста
Net loser with no edge: profit_factor 0.62, total_return -5.29%, Sharpe -0.71 (CI [-1.35, 0.02]), expectancy -$62.6/trade, avg_trade_return_pct 0.0146% (~zero and negative sign)
Обзор бэктеста
avg_loss ($301) exceeds avg_win ($232) with win_rate 0.447 — the exhaustion-fade is systematically on the wrong side of the flow move
Обзор бэктеста
Supplementary data wall (L73): all 85 trades and 100% of returns fall in a single ~6-month 2026 window (annual_returns={2026:-5.32}, monthly 2026-03..08) because the taker_ratio feed only covers a recent slice of the 2019-2026 OHLCV history — the effective sample cannot support a 3-window walk-forward + 20% holdout
Обзор бэктеста
commission_pct_of_gross 47% — fees plus impact already consume half of gross even before the negative-sign edge
Обзор бэктеста
Matches the zero-survivor single-perp order-flow-gated class (BtcTakerAggressionPersistence, AvaxTakerAggressorDominance, EthTakerFlowBreakout all abandoned) and the L55 sub-1.15-PF single-name fade class
Обзор бэктеста
6mo (2026 only)
Обзор бэктеста
multi-year
Iteration History
Verification failed (Layer 3 — sandbox backtest): No trades produced
Bar type used: BTCUSDT.BINANCE-1-HOUR-LAST-EXTERNAL, Bars processed: 8729
Diagnostics: should_enter() returned a side 0 times over 8679 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds.
Ensure your strategy produces trades with the given data and parameters.
Iteration History
Verification failed (Layer 4 — QA review):
- The entry gate fires far too rarely to produce a measurable result. The sandbox generated only 6 trades over 363 days (~6 trades/year). The compound gate requires, simultaneously, (a) a RANGING regime (Kaufman efficiency ratio < regime_threshold), (b) an extreme rolling z of the taker-buy fraction (|z| >= entry_z=1.2), and (c) the strategy to be FLAT, then holds up to 24 bars -- so genuine entries are rare even though z crosses the band often. This is the exact L16 failure mode ('BTC 4H aggressor imbalance 16 trades', 'BTC taker-ratio 16 trades'), and it is WORSE here (6 trades). Even a multi-year backtest at this rate stays far below the ~100-trade measurability floor. The hypothesis's own justification ('dozens of times per year, hundreds of trades for reliable edge measurement') is directly contradicted by the 6-trade result.
- Because the result rests on 6 trades, every headline metric is non-diagnostic: Sharpe 0.84 but sharpe_ci_low -1.08 (CI straddles zero), profit_factor 10.26 and win_rate 0.667 on 6 samples, return_skew 7.23 / kurtosis 94.8, and avg_win $300 vs avg_loss $58 -- a single largest_win $662 carries the entire positive return (+1.08%). None of these can be trusted as evidence of edge. This is a direct consequence of the trade-count issue above, not an independent defect.
Iteration History
Verification failed (Layer 4 — QA review):
- The core edge is negative and below fees, falsifying the hypothesis's central claim. The hypothesis states the fade captures a '0.4-0.6% reversal move'; the sandbox measures avg_trade_return_pct -0.025% -- negative, and an order of magnitude below both the claim and the 0.15% futures fee floor. Corroborating a genuine no-edge (not just noise): profit_factor 0.518, Sharpe -1.53 (CI [-2.73, +0.07]), win_rate 0.50 with an INVERTED reward/risk (avg_loss $338 ~= 2x avg_win $175), omega_ratio 0.35. Critically, this emerged BECAUSE the iter-3 loosening (entry_z 1.2->0.8, regime_threshold 0.55->0.65) added trades: the extra entries fired on weaker flow extremes that did NOT revert, dragging the average edge negative. That is direct evidence the taker-flow-exhaustion signal has no reversal alpha that clears costs -- extreme aggressor-imbalance bars do not systematically mean-revert at these thresholds.
- Trade count is still below the measurability floor. iter-3 raised trades from 6 to 26 over 363 days (~26/yr), but that remains well under the ~100-trade floor needed to distinguish edge from noise (L16; the sibling BTC aggressor-imbalance/taker-ratio attempts died at 16 trades). With 26 trades and skew -4.83 / kurtosis 43 (a single -$945 loss dominates), the metrics are still noise-dominated -- the Sharpe CI spans -2.73 to +0.07. The developer is stuck between two failing regimes: tighter gate -> unmeasurable (6 trades), looser gate -> measurable-ish but negative edge (26 trades, -0.025%/trade). Both fail.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.