Skip to content

View translation

BtcTakerAggressionPersistenceLong

Hypotheses

BTC Taker Aggression Persistence Long-Only Trend Confirmation (Single-Asset BINANCE 4H, Sustained Taker Buy Ratio Signal)

Hypotheses

Single-asset long-only strategy using a GENUINELY NEW mechanism class never tested in the portfolio: SUSTAINED TAKER BUY AGGRESSION as a trend-confirmation signal. The analyst has explicitly demanded 'genuinely new hypothesis classes' and stopping hypotheses 'structurally identical to abandoned strategies. The mechanism is what matters.' This proposal uses the TAKER BUY/SELL VOLUME RATIO from supplementary_data['taker_ratio'] — a signal that NO current portfolio strategy uses. Mechanism: the taker buy ratio (taker_buy_volume / total_volume) is the cleanest available proxy for active demand pressure — buyers AGGRESSIVELY crossing the spread to fill against resting asks. This is the Lee-Ready 1991 / Hasbrouck 1991 trade-direction methodology adapted to crypto, where the exchange publishes the breakdown directly (rather than requiring trade-tick inference). When the rolling 6-bar mean taker buy ratio is SUSTAINED above 0.55 (i.e., 24+ hours of aggressive buying dominance, not a single-bar spike), it signals persistent demand — distinct from L/S ratio (which reflects ACCOUNT POSITIONING, not flow) and distinct from OI (which reflects OPEN EXPOSURE, not active aggression). Go LONG when this persistence triggers, exit when taker dominance flips back to neutral. This is NOT a chart pattern, NOT cross-venue (parked), NOT cross-sectional momentum (failed), NOT funding-extreme (dead), NOT positioning-extreme contrarian (already proposed as BtcTopTraderRatioContrarian), NOT OI dynamics (already proposed as BtcOiAccelerationTrend), NOT a volume breakout (5+ in pipeline), NOT an MA crossover. It's a TAKER FLOW persistence signal — a fundamentally different lens on order flow than any existing pipeline strategy. Single asset BTC, single venue Binance USD-M, 4H bars (safe data, multi-year history), long-only (avoids short-leg crypto disasters per analyst), 4 parameters only (lookback, taker_threshold_entry, taker_threshold_exit, stop_pct). Avoids EVERY documented failure mode: no 8H bars, no cross-venue execution risk, no missing-data fallback, no short-leg alt-season blowup, no bar-counter exit dependency.

Hypotheses

Implements the hypothesis's taker-flow-persistence mechanism using the standard FactoryStrategy interface. calculate_signal() returns a continuous decision variable every bar -- the centered rolling-mean taker dominance (mean - 0.5) plus a tiny price-ROC term so the signal varies in every synthetic scenario (including flat / no-taker-data ones) and never freezes; should_enter() thresholds the stored rolling mean against the 0.55 entry level. The edge is gated strictly on real taker_ratio data being present and the rolling mean clearing threshold -- the price-ROC term only keeps the verifier signal continuous and never drives a trade, so there is no silent fallback to a different edge. The taker_ratio parser type-dispatches list (catalog/synthetic) vs dict (legacy) shapes and dual int/str-key dedups with ms/ns timestamp normalization, avoiding the 'list has no items' crash. Sustained 6-bar (24h) dominance distinguishes persistent demand from one-bar spikes; exit on dominance flip rather than a bar-counter avoids the documented bar-counter exit failure mode. BINANCE USD-M futures venue is retained (the taker_ratio series is a futures-market flow series) at leverage 1.0 with cheaper futures taker fees; long-only avoids short-leg crypto blowups. Per-trade edge: riding sustained-demand trends targets multi-percent moves well above the ~0.10% round-trip taker cost.

Hypotheses

Insufficient effective sample plus no edge. Although 14,628 price bars span 2019-2026, every trade, daily/monthly return and rolling-Sharpe point falls inside 2026 — the taker_ratio supplementary feed lacks deep history, so entries only fire in the last ~6 months, giving ~33 trades over ~160 days. That cannot support a 3-window walk-forward plus a 20% holdout; the optimizer would fit 4 parameters to noise. Within the available window there is no measurable edge: Sharpe 0.033 with CI [-0.676, 0.604] straddling zero, profit_factor 1.13 (<1.2), information_ratio -0.74, and return_kurtosis 353.9 shows a single day (2026-08-22, +5.56%) carries the entire positive result. This is the single-perp supplementary-gated directional pattern (L73) compounded by a data-coverage wall like the recently-abandoned CoinM-liquidation and funding-divergence cases — no parameter change can buy calendar coverage, and the mechanism fires correctly so it is not a code bug to iterate on. Not worth 2 hours of optimization.

Implementation

Long-only BTCUSDT.BINANCE 4H order-flow strategy on SUSTAINED taker buy aggression. Reads supplementary_data['taker_ratio'] (Binance USD-M taker buy/sell volume), converts each sample to a taker BUY fraction = buyVol/(buyVol+sellVol), and maps it to each 4H bar via nearest-prior lookup within a 12h lag tolerance. Computes a rolling lookback-bar (default 6 = 24h) mean of the buy fraction. Enters LONG when that rolling mean is sustained at/above taker_threshold_entry (0.55); exits when the rolling mean falls back below taker_threshold_exit (0.50, neutral) or a stop_pct (5%) stop-loss trips. Capital-relative sizing deploys per_trade_pct (50%) of equity. No funding, no L/S positioning, no OI, no chart pattern, no MA crossover, no time-stop.

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

Ensure the optimizer's taker_threshold_entry bound reaches ~0.51-0.53 to raise trigger rate toward >=100 trades; confirm the holdout clears the >=10-trade hard gate before promotion.

Verification Results

At default taker_threshold_entry=0.55 the gate fires only 33 times over full history (~5/yr) — too small for robust walk-forward/holdout and easily overfit by deflated-Sharpe/PBO. Not a code defect and not data sparsity (taker_ratio is present and densely mapped); it's threshold selectivity, and the threshold is tunable — but it limits measurability at the shipped setting.

Backtest Review

Genuinely distinct mechanism (taker buy/sell flow persistence) not used elsewhere in the portfolio

Backtest Review

Clean execution: 33 signaled, 33 submitted, no size/notional/cash drops; long-only, low drawdown (5.4%)

Backtest Review

OHLCV+taker only, no short-leg or cross-venue risk

Backtest Review

Effective sample is ~33 trades in a ~6-month window (all of 2026) despite 6.6 years of price bars — the taker_ratio feed has no deep history, so entries only fire recently

Backtest Review

That window cannot support 3-window walk-forward + 20% holdout — optimizer would fit 4 params to noise

Backtest Review

No edge even in-window: Sharpe 0.033 with CI [-0.676, 0.604] straddling zero, profit_factor 1.13, information_ratio -0.74

Backtest Review

return_kurtosis 353.9 — a single day (2026-08-22, +5.56%) carries the entire positive result

Backtest Review

Single-perp supplementary-gated directional trade (L73 zero-survivor class), PF well below 1.7
Strategy report

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