Skip to content

View translation

MultiDaySwingOrderFlowLS

Hypotheses

RESEARCH DIRECTIVE — Design Space Empirically Exhausted; PAUSE New Single-Name/Order-Flow/Basket Generation and Redirect Engineering to Unlock New Data Feeds (No New Signal Is Fee-Viable on Current Data)

Hypotheses

This is an honest abstention, not a tradeable signal — I am the Research Lead applying accumulated learnings, and the correct action is to STOP manufacturing near-certain-to-die hypotheses. Across ~16 proposals this session every mechanism class has been decisively falsified on well-sampled runs: pure-OHLCV trend/momentum/reversion/breakout (L30, 0/213); funding carry both signs and all horizons (decayed to ~zero since 2023); two-leg spot-perp carry (L28, fee-dead outside the deployed BTC); options (L29, blocked on the developer's lookback path); directional shorts (−79%, fight the drift); all long-only baskets (>50% drawdown or degenerate); market-neutral pairs (liquidation/fee); and — the decisive new evidence — INTRADAY ORDER FLOW in EVERY direction: absorption-divergence (−0.020%/trade, 750 trades), large-print sweep fade (−0.045%, 335 trades), and flow-confirmed breakout continuation (−0.0074%, 367 trades) all died below fees on measurable samples, and the maker-execution fee-reduction lever also collided/died. Deep single-name order flow on liquid majors carries no fee-clearing edge in either direction. The only LIVE, non-decayed edges in the book (VRP put-write Sharpe 12; cross-sectional momentum Sharpe 2.6) are already deployed and are blocked for new entries by, respectively, the options data/trade-count wall and novelty/drawdown. Continuing to emit variants burns 3–4 pipeline iterations each for a near-certain fee_edge/no_edge death — negative expected value for the factory. The high-value moves are ENGINEERING, not new signals: (1) fix the options data-lookback path so the proven VRP edge (the single highest-Sharpe winner) can be extended beyond the one deployed BTC put-write; (2) ingest full multi-year ORDER-BOOK DEPTH history (resting-liquidity signals are the one microstructure primitive not yet testable — my order-book-wall probe is pending on this data); (3) add a genuinely new non-price feed (on-chain flows, exchange net-flows, cross-exchange consolidated tape). Until one of those lands, new single-name/basket/funding/order-flow generation should PAUSE. My three still-pending probes (cross-instrument BTC→ETH lead-lag, order-book wall bounce, multi-day swing order flow) are the last untried angles; their results should decide whether the pause becomes permanent for this data regime.

Hypotheses

ITERATION 3 — smallest surgical change that fixes the top Layer-4 defect, not a rewrite. The QA verdict had two parts: (1) the filed 'order-flow' signal was actually sign(close-open)*volume — a PURE-OHLCV proxy with NO non-price feed (L7/L30 zero-survivor class), i.e. the code never implemented the taker-flow edge it is filed as; and (2) negative per-trade expectancy on a measurable sample. Part (1) is a real, minimal fix: I replaced ONLY the per-bar input — from the OHLCV sign*volume proxy to the REAL wired taker-flow feed (Binance `metrics` taker buy/sell volume ratio, aggTrades-derived, read as-of each bar via O(log n) searchsorted and reduced to a signed imbalance). The z-score accumulation, entry/exit thresholds, hold logic and sizing are byte-for-byte unchanged, so every earlier layer stays green; the signal is now genuine taker aggression, removing the pure-OHLCV mislabel. The feed loads because the code references the quoted 'metrics' key and it is a single-instrument (primary) strategy, so used_supp_keys loads the primary's metrics — timeout-safe, no tick loading. HONEST RECOMMENDATION: this strategy IS the parent directive's pre-registered 'probe #3 (multi-day swing order flow)', the deciding test of whether the current-data generation PAUSE becomes permanent. Part (2) cannot be fixed by code — negative expectancy on a single-name noise signal cannot be optimized positive, and QA states the single-name metrics taker-flow feed is already established edge-dead across this family. This fix corrects the implementation so the probe actually tests the filed edge, but I do NOT expect it to manufacture a fee-clearing edge; per the directive's own logic this probe's death is the deciding confirmation -> ABANDON single-name/order-flow generation and redirect engineering to NEW data feeds (multi-year order-book depth, on-chain/exchange net-flows, consolidated tape), rather than emit further variants.

Hypotheses

L37 no-op RESEARCH DIRECTIVE / abstention meta-title ('PAUSE New Single-Name/Order-Flow/Basket Generation … No New Signal Is Fee-Viable') — not a tradeable hypothesis; per L37 these are abandoned at first review and never iterated. The attached strategy is the directive's own pre-registered 'probe #3,' whose stated purpose is to CONFIRM the generation pause, and both the Research Lead's description and the developer's iter-3 docstring explicitly recommend ABANDON single-name/order-flow generation. Even judged on the produced backtest there is no promotable edge: Sharpe 0.38 with bootstrap CI [-0.40, 1.19] straddling zero, profit_factor 1.14 (below the 1.2 meaningful-edge line), information_ratio -0.80 (underperforms buy-and-hold on a meaningful benchmark), and the +86% headline is carried by the 2022 bear (+66.2%, short-heavy) while 2024 is -16.1% and rolling Sharpe swings from +8 to -9. avg_trade_return_pct is positive (0.44%, not fee-dead) but the net edge is marginal and rides one regime. It runs on the Binance-futures metrics taker-ratio proxy (the deep aggTrades feed is un-wired) — the L73 single-perp supplementary-gated order-flow family established edge-dead this session in both fade and continuation orientations. Base Sharpe 0.38 is the ceiling; deflation/holdout only lower it. Failure pattern: L37 directive no-op + L73 no_edge single-perp taker-metrics-proxy. Not worth 2 hours of optimization.

Implementation

Single-instrument long-short multi-day swing on REAL taker flow (ETHUSDT.BINANCE, 4-HOUR). Each bar's taker buy/sell imbalance is read from the wired Binance-futures `metrics` feed (aggTrades-derived taker ratio, reduced to (R-1)/(R+1)); it is accumulated over a multi-day lookback and z-scored against its own rolling history. Persistently above-baseline aggressive BUYING (z >= entry_z) flags demand-driven accumulation -> LONG; persistently below-baseline (net selling) flags distribution -> SHORT. Holds the swing for days; exits on flow reversal through the exit-z, a max-hold cap, take-profit, or stop-loss. No leverage.

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.

Backtest Review

Implementation is now genuine taker-flow (metrics proxy) rather than the OHLCV mislabel; timeout-safe O(log n); direction-balanced (224 long / 227 short) so the result is a real no-edge read, not a skew artifact

Backtest Review

L37 no-op RESEARCH DIRECTIVE / abstention meta-title — not a tradeable hypothesis; abandon at first review, never iterate

Backtest Review

No significant edge: Sharpe 0.38 (CI [-0.40, 1.19] straddling zero), profit_factor 1.14 (below the 1.2 meaningful-edge line), information_ratio -0.80 (underperforms buy-and-hold)

Backtest Review

+86% headline carried by 2022 (+66.2%); 2024 -16.1%, rolling Sharpe swings +8→-9; max_drawdown 26.6% (CI to 61%)

Backtest Review

L73 single-perp taker-metrics-proxy family, established edge-dead in both fade and continuation orientations; the deep aggTrades feed is un-wired

Backtest Review

Both the Research Lead's directive and the developer's docstring explicitly recommend ABANDON

Iteration History

Verification failed (Layer 4 — QA review): - Decisively negative edge on a now-measurable sample. 103 trades over 363 days (metrics_reliable=true): avg_trade_return_pct -0.158% (NEGATIVE, and below the 0.15% futures floor), avg_trade_pnl_usd -$288, total_return -29.60%, profit_factor 0.79, win_rate 0.42, Sharpe -0.63 (CI [-2.20, +0.93]), max_drawdown 40.1% (approaching the 50% hard-abandon). The multi-day/4h reframing did enlarge the per-trade move and cut turnover as intended, but the underlying signal has negative expectancy: the swing does not clear fees because the gross move is itself adverse, not merely eaten by costs. Direction split is balanced (46L/57S), so this is a genuine no-edge result, not a skew artifact. - The 'order-flow' signal is sign(close - open) * volume — a proxy computed entirely from OHLCV bars, not from any taker-flow or order-flow feed. Z-scoring an accumulated signed-volume sum is a volume-weighted DIRECTIONAL MOMENTUM signal on pure OHLCV. There is no non-price data dependency; extra_instruments and all subscribe_* flags are empty/false and no supplementary feed is read. This places the strategy in the pure-OHLCV momentum/trend class (L30: 0/213 survivors; L7: pure-OHLCV = 0% survival), NOT a genuine order-flow family. 'Distinct from the dead intraday order-flow family' is only a horizon change on the SAME OHLCV-derived signal. - This is explicitly the research directive's own last-untried probe #3 ('multi-day swing order flow'), designed as the deciding test of whether the generation pause becomes permanent. It has now died below fees on a measurable sample (-29.6%, -0.158%/trade), matching the fate of every other order-flow/OHLCV reframing this session. Per the directive's own stated logic, this is confirming evidence the current-data design space is exhausted.

Iteration History

Verification failed (Layer 4 — QA review): - The strategy is filed as an 'order-flow'/'taker-flow accumulation' edge, but the implemented signal is _sign(close-open)*volume z-scored over a rolling window — a PURE-OHLCV, volume-weighted directional-momentum signal with NO non-price feed (extra_instruments empty; all subscribe_* flags false). The hypothesis's named core edge (genuine taker aggression/order flow) is ABSENT from the code, placing it in the pure-OHLCV zero-survivor class (L7: 0% survival; L30: 0/213). - Fee viability failure on a measurable sample: avg_trade_return_pct = -0.160% (NEGATIVE expectancy, below the ~0.10% round-trip and 0.15% floor), profit_factor 0.836, total_return -13.86%, Sharpe -0.60 (CI [-2.28, +1.17]), max_drawdown 26.76%, win_rate 0.38, direction-balanced (41L/51S). Negative expectancy on a noise signal cannot be optimized into positive edge; raising entry_z/trimming hold only slows the confirmed loss. - Trade count (92) is below the ~100-trade measurability floor, but the result is already decisively negative with a balanced direction split, so it reinforces the abandon verdict.

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['exit_z', 'entry_z', 'z_window', 'stop_loss', 'take_profit', 'flow_lookback', 'max_hold_bars', 'position_frac'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: MultiDaySwingOrderFlowLS._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735694520000) - steady_downtrend: TypeError: MultiDaySwingOrderFlowLS._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735694520000) - flat_ranging: TypeError: MultiDaySwingOrderFlowLS._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735694520000) - volatility_spike: TypeError: MultiDaySwingOrderFlowLS._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735694520000) - zero_volume: TypeError: MultiDaySwingOrderFlowLS._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735694520000) - price_gap: TypeError: MultiDaySwingOrderFlowLS._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735694520000)
Strategy report

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