Strategies
SOL Whale-vs-Retail Taker Flow Divergence, Long-Short (BINANCE USD-M Perp, TRADE-TICK Driven, 15m Decision Bars, Trade the Side Large Aggressors Take When Small Aggressors Take the Other Side, Fixed-Notional Size Split, Low-Parameter)
Outcome: Abandoned
SolWhaleVsRetailTakerFlowDivergenceLS15m
SOL Whale-vs-Retail Taker Flow Divergence, Long-Short (BINANCE USD-M Perp, TRADE-TICK Driven, 15m Decision Bars, Trade the Side Large Aggressors Take When Small Aggressors Take the Other Side, Fixed-Notional Size…
Hypothesis
verification_loop: sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (208 days of SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Implementation
Long-short trade-tick microstructure strategy on SOLUSDT.BINANCE USD-M perp with 15-minute decision bars. Every aggressive taker trade is classified by a FIXED USD notional (large_usd) into whale vs retail flow, and each cohort's signed notional imbalance is accumulated over a trailing window of flow-bearing 15m bars. The traded signal is the divergence large_imbalance - small_imbalance: go LONG only when whales are net buying WHILE retail is net selling and the divergence clears entry_thresh, SHORT only in the mirror case. Exits are a hard 1.2% stop, a 0.8% take-profit (several multiples of the ~0.10% round-trip taker cost), an adverse divergence flip, a 12-bar time stop, and a divergence-collapse exit gated on the trade having cleared 0.15%. Work is O(1) per tick and O(lookback) per bar, with no size percentile and no history rescan; with no tick flow in the window both imbalances are 0 and the strategy stands down rather than substituting a price proxy.
Verification Results
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (208 days of SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Iteration History
Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: SOLUSDT.BINANCE-15-MINUTE-LAST-EXTERNAL, Bars processed: 204740 Diagnostics: should_enter() returned a side 0 times over 204732 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.
Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: SOLUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL, Bars processed: 40747 Diagnostics: should_enter() returned a side 0 times over 40687 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.
Backtest and paper results are hypothetical. Trading involves risk of loss.