Skip to content

View original

EthMultiDayTakerFlowAccumulationDivergenceLS1D

Hypotheses

ETH Multi-Day Taker-Flow Accumulation Divergence, Long-Short (Single-Instrument BINANCE USD-M Perp, DEEP aggTrades Aggregated to DAILY Net Taker Flow — SWING Horizon, NOT Intraday — Go Long When Multi-Day Price Is Flat/Down but Net Aggressive BUYING Persists (Hidden Accumulation), Short the Mirror — Fee-Light + Timeout-Safe by Design, 3-Parameter)

Hypotheses

A LONG-SHORT, single-instrument order-flow strategy on ETHUSDT.BINANCE (USD-M perp) built explicitly from the autopsy of my two failed order-flow probes: the intraday aggTrades absorption idea FEE-DIED (750 trades, avg −0.02%/trade — killed by turnover on tight-spread intraday moves), and the perp-index premium idea TIMED OUT (per-bar history rescans). This design fixes BOTH: (1) it aggregates the DEEP aggTrades feed to DAILY net taker flow and holds for DAYS (swing), so it trades ~30–60×/yr not 750× — turnover, and thus fee drag, is an order of magnitude lower, letting a modest per-trade edge clear the ~0.10% round trip; (2) daily aggregation is O(1) per bar (a running daily sum, no full-history rescan), so it is timeout-safe. It stays in the one live, L30-sanctioned space (order flow with a deep, confirmed feed span — NOT the decayed funding premium, NOT pure OHLCV, NOT options, NOT the shallow OI/taker-metrics feeds). Mechanism: compute each day's net taker delta (taker-buy − taker-sell volume) from aggTrades → a daily CVD. When PRICE has been flat-to-DOWN over a multi-day window but the cumulative daily net taker flow is strongly POSITIVE (aggressive buyers accumulating while price hasn't risen = hidden accumulation / absorption at the SWING scale, where it is far less competed than intraday), go LONG for the multi-day markup; mirror for hidden distribution (price flat/up but net flow strongly negative) → SHORT. ETH is chosen for a deep aggTrades tape and swing moves (multi-day 3–8%) that dwarf fees. Single instrument, LONG-SHORT (fills the 85%-long imbalance), swing hold. 3 core parameters (flow-window days, flow-divergence threshold, price-flatness band). NOTE: the conventional design space is empirically exhausted this session; this is a deliberately fee-light/timeout-safe reframing of the one live primitive, and if it too fee-dies it is strong evidence to PAUSE new single-name generation pending a new data feed.

Hypotheses

ITERATION 3 — minimal, targeted change from previous_code, NOT a rewrite. The Layer-4 failure was a verdict, not a fixable bug: this is the SECOND consecutive losing iteration of the same primitive and it WORSENED under iter-2's loosening (-9.21% -> -23.21%, PF 0.67), the classic signature of negative expectancy that no parameter can flip. The only wired taker-flow source is the metrics taker-ratio proxy (the DEEP aggTrades feed the hypothesis names is un-wired in this factory), which QA reports is closed-loop edge-dead across this family in both fade and continuation orientations. The two failure axes are in direct tension — (a) too few trades (45 < ~100 measurability floor) and (b) negative per-trade edge (-0.95%) — so raising turnover to fix (a) only amplifies (b); there is no code change that resolves both. Accordingly the smallest responsible change is to REVERT the specifically-identified iter-2 regression (flow_window 4->6, hold_days 4->6, entry_z 0.7->1.0, norm_window 40->50) that drove the -23% result, while KEEPING the one change QA praised as a genuine improvement (baseline-centering, which fixed the direction skew) and leaving imports/structure/signal logic intact so every earlier verification layer stays green. Most importantly, this hypothesis PRE-REGISTERED its own kill criterion: 'if it too fee-dies it is strong evidence to PAUSE new single-name order-flow generation pending a new wired feed.' It has now fee-died twice. This revert stops the bleeding, but per the hypothesis's own terms the mechanism is exhausted and should be ABANDONED rather than iterated further — flagging that explicitly here so the analyst can close it cleanly instead of burning additional iterations re-transforming an edge-dead proxy.

Hypotheses

Net-losing single-perp order-flow divergence with a >50% drawdown and no edge — not worth 2 hours of optimization. Over 151 trades: total_return -38.0%, CAGR -8.66%, profit_factor 0.859, expectancy -$231/trade, avg_trade_return_pct -0.335% (negative), Sharpe -0.22 (CI [-1.00, 0.52]), PSR 0.34, information_ratio -0.98, and max_drawdown 55.3% (CI to 81.7%) — past the L19 hard-abandon line, with annual returns worsening (2024 -12.4%, 2025 -10.7%, 2026 -25.1%). The fee-light reframe worked (151 trades, commission only 3.4% of gross), which rules OUT fee-death and shows the underlying signal is simply edge-less — the negative expectancy is not a turnover artifact. The strategy runs on the Binance-futures metrics taker-ratio proxy (the DEEP aggTrades tape the hypothesis names is un-wired), the single-perp supplementary-gated order-flow family that repeatedly dies this session (L73); the developer's own iter-3 note declares this proxy 'closed-loop established as edge-dead across this family in BOTH fade and continuation orientations' and that its pre-registered exit condition is met ('the mechanism should be abandoned per its own terms'). No tuning of flow_window/entry_z/flat_band flips a negative-expectancy proxy edge positive. Failure pattern: no_edge single-perp supplementary-gated order-flow divergence with >50% DD (L73).

Implementation

Long-short single-instrument swing strategy on ETHUSDT.BINANCE (USD-M perp, DAILY bars). Aggregates the wired Binance-futures metrics taker buy/sell VOLUME ratio (5-min) to a DAILY net-taker-flow imbalance, demeans it against a rolling baseline (removing ETH's structural net-buy bias), and z-scores the cumulative flow over a multi-day window. Enters LONG when price is flat-to-down over the window but baseline-centered net taker BUYING is strongly positive (hidden accumulation) and mirror-SHORT when price is flat-to-up but net flow is strongly negative (hidden distribution). Exits on a swing-hold cap, take-profit/stop, or flow renormalizing past baseline. O(log n) flow slicing (timeout-safe); daily aggregation + multi-day holds keep turnover ~30-60x/yr (fee-light).

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

Correctly fixed the two prior failure modes: low turnover (151 trades / commission 3.4% of gross, not fee-dead) and O(log n) timeout-safe aggregation; baseline-centering removed the long/short skew

Backtest Review

Multi-year metrics coverage (trades span 2021-2026), so the negative result is well-sampled

Backtest Review

Net loser: total_return -38.0%, CAGR -8.66%, profit_factor 0.859, expectancy -$231/trade, avg_trade_return_pct -0.335% (negative)

Backtest Review

max_drawdown 55.3% (CI to 81.7%) — past the 50% hard-abandon line (L19); normal-regime bucket -33.4%

Backtest Review

No significant edge: Sharpe -0.22 (CI [-1.00, 0.52]), PSR 0.34, information_ratio -0.98; annual returns worsen (2024 -12.4%, 2025 -10.7%, 2026 -25.1%)

Backtest Review

Runs on the metrics taker-ratio proxy (the DEEP aggTrades feed the hypothesis names is un-wired) — the single-perp supplementary-gated order-flow family that repeatedly dies (L73), and which the developer notes is closed-loop edge-dead in both fade and continuation orientations

Backtest Review

Developer's own iter-3 pre-registered exit condition is met: the mechanism should be abandoned per its own terms

Iteration History

Verification failed (Layer 4 — QA review): - Trade count is decisively below the measurability floor. The sandbox produced only 26 trades over 363 days, and the design is deliberately low-turnover (~30-60 trades/yr by the hypothesis's own statement). At that rate the strategy cannot generate the ~100+ trades needed to distinguish edge from noise, and the sample here already reads negative: avg_trade_return_pct -0.46% (below the 0.15% futures floor AND negative), avg_trade_pnl_usd -$354, total_return -9.21%, profit_factor 0.81, Sharpe -0.37 with CI [-1.95, +1.24] straddling zero, max_drawdown 19.2%. A 26-trade negative result is not noise around a positive edge — it is an unmeasurable, currently-losing configuration. Optimization cannot rescue a signal that fires this rarely. - The confirming signal is the 5-min metrics taker buy/sell VOLUME RATIO ((R-1)/(R+1)) averaged to a daily value — NOT the DEEP aggTrades net taker flow the hypothesis explicitly names. The developer honestly discloses the aggTrades feed is un-wired and substitutes the metrics taker-ratio proxy, which has already been established as edge-dead across this exact single-name order-flow family in BOTH fade and continuation orientations (per the developer's own rationale). Re-averaging the same dead proxy to the daily/swing scale is a re-parameterization of a known-zero-edge signal, not the deep aggTrades primitive the hypothesis's edge depends on. - Direction distribution is skewed (6 long / 20 short) despite the hypothesis's stated symmetric long-short design. Over a single-year window this makes the result largely a directional short bet on ETH rather than a balanced divergence edge, further undermining the thin sample's interpretability.

Iteration History

Verification failed (Layer 4 — QA review): - Still below the measurability floor after the turnover-raising changes. The flow_window 7->4, hold_days 7->4, norm_window 60->40, entry_z 1.0->0.7 loosening lifted the count only from 26 to 45 trades over 363 days — still well under the ~100-trade floor needed to distinguish edge from noise. And the sample that does exist is decisively negative: avg_trade_return_pct -0.95% (net-negative, below the 0.15% futures floor), avg_trade_pnl_usd -$516, total_return -23.21%, profit_factor 0.67, win_rate 0.44, Sharpe -0.99 (CI [-2.60, +0.60]), max_drawdown 35.5% (approaching the 50% hard-abandon). This is the SECOND consecutive losing iteration of this exact idea (iter-1: -9.21% / 26 trades; iter-2: -23.21% / 45 trades) — worsening, not converging. - The signal remains the 5-min metrics taker buy/sell VOLUME ratio proxy, because the DEEP aggTrades feed the hypothesis names is un-wired/un-testable here. The iter-2 baseline-centering is a genuine improvement — it correctly removed ETH's structural net-buy bias and fixed the direction skew (now 24L/21S) — but it is still a re-transform of the same metrics taker-ratio primitive already closed-loop established as edge-dead across this family in both fade and continuation orientations. Centering the dead proxy did not create an edge; it produced a worse (-23%) result. Per the hypothesis's OWN exit condition, a fee-light/timeout-safe reframing that still fee-dies is strong evidence to PAUSE single-name order-flow generation pending a new wired feed — and both iterations have now fee-died.

Iteration History

Verification failed (Layer 4 — QA review): - Third consecutive fee-death of the same primitive, and the worst yet. Sandbox (metrics_reliable=true) on 28 trades over 362 days: avg_trade_return_pct -2.21% (severely negative, far below the 0.15% futures floor), avg_trade_pnl_usd -$1,046, total_return -29.29%, profit_factor 0.43 (lowest of the three iterations), win_rate 0.39, Sharpe -1.48 (CI [-2.78, +0.02]), max_drawdown 38.9%, largest_loss -$10,173. The iterations have gone -9.21% -> -23.21% -> -29.29% with PF 0.67 -> 0.43 — a monotonically worsening, decisively negative-expectancy sequence no parameter revert can flip. Reverting the iter-2 loosening dropped the count back below the ~100-trade measurability floor (28) AND left per-trade expectancy strongly negative — the irreconcilable tension the developer identifies: raising turnover to fix measurability only amplifies the negative edge. - The signal remains the metrics taker buy/sell VOLUME ratio proxy (the DEEP aggTrades feed the hypothesis names is un-wired here), closed-loop established as edge-dead across this single-name family in both fade and continuation orientations. The kept iter-2 baseline-centering genuinely improved direction balance (14L/14S), but centering a null signal cannot create edge — and did not. The hypothesis PRE-REGISTERED its kill criterion: 'if it too fee-dies it is strong evidence to PAUSE new single-name order-flow generation pending a new wired feed.' It has now fee-died three times, and the developer's own rationale explicitly requests abandonment.
Strategy report

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