Strategies
DOGE USD-M Taker-Flow Imbalance Continuation, Long-Short (Single-Instrument BINANCE Perp, 15m Bars + Multi-Year TAKER BUY/SELL Aggressor-Volume Feed, Enter in the Direction of a Top/Bottom-Decile Aggressor-Flow Burst That Price Has NOT Yet Repriced, Flow-Leads-Price Continuation, 3-Parameter)
Outcome: Abandoned
DogeTakerFlowImbalanceContinuationLS15m
Multi-year taker feed coverage (trades span 2021-2022, not a recent-only data wall); genuine non-price signal; timeout-safe O(log n) lookups
Hypothesis
Iteration-3 fix targets ONLY the reported Layer-2 failure and nothing else. Layer 2 raised `TypeError: _num() takes 2 positional arguments but 3 were given` across all six synthetic scenarios: `_num` was a @staticmethod but is called as `self._num(...)`, and the Layer-2 verifier proxy rebinds callable attributes as bound methods, so `self` is passed as an extra positional argument. The code already fixed this identical pattern for `_to_ns` by making it a plain instance method; I applied the same minimal fix to `_num`. I also converted `_pctile` (the only other @staticmethod, likewise called via `self._pctile(...)`) to an instance method so the strategy does not merely re-loop on the next staticmethod once `_num` is past. No call sites changed (all already use `self.`), and no signal logic, imports, parameters, or config were touched — every earlier layer stays green and the passing signal path is preserved verbatim.
Implementation
Long-short single-instrument microstructure strategy on DOGEUSDT.BINANCE USD-M perp (15m bars). Signal is the Binance taker buy/sell aggressor-volume imbalance (from the multi-year `metrics` series merged with the dense `taker_ratio` feed), NOT raw OHLCV. Each 15m close it smooths the signed imbalance (R-1)/(R+1) over flow_window bars and ranks it as a percentile in a trailing distribution. On a decile-extreme aggressor burst that price has NOT yet repriced (realized |return| over the same window is in the small tail), it enters in the flow direction to ride the continuation. Exits on take-profit, stop-loss, a hard time stop, or flow exhaustion (aggressor flow crossing back through neutral against the position). Stays flat when no fresh taker reading exists (no price-only fallback).
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.
High-turnover fee-nonviability: 1552 trades/206 days, commission 96.78% of gross, avg_trade_return_pct -0.014% — dominant cause of -93%. flow_pct/price_move_pct are the optimizer's knobs, so a frequency/edge problem for the optimizer, not a code fault. Optimizer must constrain trade count and net-of-fee per-trade return; abandon if no viable operating point.
Inverted reward/risk + possible wrong-signed premise: avg_win $61 < avg_loss $132 despite TP>SL (flow-exhaustion exit caps winners), win_rate 0.37 suggests fading beats continuation on DOGE 15m. Code correctly implements the hypothesis as written, so this is a premise/edge question for analyst/research. A/B continuation vs reversal polarity.
Backtest Review
- Sharpe
- -0.77
- Total return
- -100.00%
- Max drawdown
- 100.00%
- Trades
- 12810
- Win rate
- 39.7%
- Profit factor
- 0.46
Multi-year taker feed coverage (trades span 2021-2022, not a recent-only data wall); genuine non-price signal; timeout-safe O(log n) lookups
Account LIQUIDATED 2022-10-19: total_return -100%, max_drawdown 100% (CI to 100%), CAGR -100%
Fee death: commission_pct_of_gross 50.1% ($99k commission + $131k impact), avg_trade_return_pct 0.0069% (far below the 0.15% floor) over 12,810 trades
Negative expectancy: profit_factor 0.46, Sharpe -0.77 (CI [-4.76, -0.01]), PSR 0.06, expectancy -$17.83/trade, win_rate 39.7%, avg_loss > avg_win
Picking-up-pennies blowup: skew -4.1, kurtosis 627, 19 consecutive losses; the continuation fires 12,810x and bleeds through costs into liquidation
L73 single-perp order-flow-gated family / L18 fee_edge extreme
Iteration History
Verification failed (leverage_set_but_unused): config sets leverage=2.0 but the strategy never references leverage in sizing. Size positions on it — notional = equity * fraction * leverage / price (read self.config.leverage) — or set leverage=1.0. As written the leverage is inert and the backtest is identical to 1x.
Backtest and paper results are hypothetical. Trading involves risk of loss.