Skip to content

View translation

EthDailyTakerFlowConfirmedTrendLS

Hypotheses

ETH USD-M Daily Taker-Flow-Confirmed Trend, Long-Short (Single-Instrument BINANCE Perp, Daily Bars + Multi-Year Taker Buy/Sell Ratio, Trade WITH the Trend Only When Aggressive Taker Flow CONFIRMS Real Directional Demand, Exit on Flow/Price Divergence, Tail-Safe Sizing, Low-Parameter)

Hypotheses

A LONG-SHORT, SINGLE-INSTRUMENT, DAILY trend-following strategy on ETHUSDT.BINANCE (USD-M perpetual) that trades WITH the price trend but only when AGGRESSIVE TAKER FLOW (the taker buy/sell volume ratio) confirms genuine directional demand. It is the taker-flow analog of the factory's separately-VALIDATED, PROMOTED funding-confirmed-trend mechanism (EthPerpDailyFundingConfirmedTrendLS), using an INDEPENDENT confirming signal: funding measures positioning/carry cost, whereas taker flow measures the REALIZED aggression of market-order participants — the two can diverge (funding can stay elevated from stale positioning while real-time taker buying fades, an exhaustion tell), so taker-confirmed trend targets a more immediate demand signal and a decorrelated return stream. This choice is forced by the now-exhaustive failure record, and it deliberately lives ONLY inside proven-safe ground: it is MOMENTUM DIRECTION (trade WITH the trend — the validated direction; NOT a contrarian fade, all of which are closed out: VWAP/taker-exhaustion/funding-extreme); DAILY cadence (not the dead intraday-breakout horizon); USD-M PERP, NOT spot (avoiding the spot custom-_equity position-stacking/over-exposure artifact and the no-edge-vs-buy-and-hold problem that sank the spot overlays); SINGLE-INSTRUMENT/SINGLE-VENUE/SINGLE-ACCOUNT (no multi-instrument aggregation bug); and it uses TAKER RATIO from the multi-year Binance Vision daily metrics file (deep history, UNLIKE the ~April-2026 liquidation/OI real-time feeds that are data-walled — taker ratio is in the metrics CSV the data layer already parses). It is engineered tail-safe (leverage <=1.5, hard ATR stop, modest notional cap) to prevent the LINK-style account blowup. The taker-flow confirmation is the genuine differentiator versus plain ETH TS-momentum: it filters 'hollow' trends (price up but aggressive selling dominating = distribution) and exits early on flow/price divergence. Low parameter count to resist overfitting; momentum direction guarantees it is not the failed exhaustion-fade.

Hypotheses

Iteration 3 fixes the Layer-3 'no trades' failure. Root cause: (1) the code read the taker feed with camelCase keys (buyVol/sellVol/buySellRatio/timestamp) but the real injected taker_ratio parquet uses snake_case (buy_vol/sell_vol/buy_sell_ratio/timestamp_ms), so every real row was silently dropped and the taker buy fraction stayed pinned at 0.5, making tilt=0 and the conf_margin gate reject every entry; and (2) the dedicated taker_ratio feed only covers ~recent months while the backtest spans ~6.5 years of daily bars. Fix keeps reading taker_ratio with BOTH field-name conventions (so the camelCase Layer-2 synthetic data still populates tilt and Layer 2 stays green) and ADDITIONALLY reads the deep-history metrics key's taker_long_short_vol_ratio (2021+), which is the multi-year source the hypothesis explicitly names. Per-bar lookup converted to bisect (O(log n)) to avoid a timeout with the larger daily-bucket set. conf_margin loosened 0.02->0.01 because daily-smoothed taker ratios cluster near 1.0 (buy fraction ~0.5). Signal logic, regime gates, sizing, and risk management are unchanged, so earlier passing layers are preserved.

Hypotheses

failed deflated Sharpe: DSR=0.0, expected-max=2.2612 over 225 trials — the selected optimized Sharpe (0.259) sits far below the best-of-N luck bar and is statistically indistinguishable from noise (is_significant=false, sharpe_ci_low=-0.8869 straddling 0, PBO=0.7566>0.5; probabilistic_sharpe 0.6926 vs DSR 0.0 is the textbook PSR-vs-DSR selection-inflation trap). The walk-forward is is_overfitted=TRUE: avg IS 1.874 collapses to avg OOS -0.877 with windows [0.208, 0.0, -2.838], the most recent deeply negative. Decisively, the untouched time-ordered HOLDOUT FAILED and is NEGATIVE (holdout_sharpe -0.2316, ratio 0). Sensitivity FAILED with 4 cliff parameters (fast_ema, trend_ma, ma_slope_lookback, taker_smooth_days). The sample is far too thin for this pipeline — 27 base / 17 optimized trades over ~6 years, so one OOS walk-forward window has zero trades and best-of-225 selection just fits noise; the strategy also carries a negative information ratio (-0.745). Not iterate (attempt 1 of 2): the binding failures are structural (negative forward holdout, is_overfitted with a -2.84 OOS window, DSR 0.0, PBO 0.76, 4 cliffs) and the entire sensitivity surface sits ~0.1-0.6 Sharpe below significance, so there is no robust region to tune toward and a second best-of-225 sweep re-overfits a ~20-trade sample. Not revise_hypothesis: ETH USD-M daily is a valid, data-rich instrument and the funding-confirmed-trend sibling (EthPerpDailyFundingConfirmedTrendLS) is already promoted, so per the overfit->abandon rule this is overfitting-to-search on a fine target, not a proven mechanism stranded on a dead one. FAILURE PATTERN: swapping funding for taker buy/sell flow as the trend-confirmation gate on single-asset ETH daily does NOT inherit the promoted funding-confirmed-trend sibling's promotability — the taker-confirmation filter trades so rarely (17-27 trades / 6yr) that the walk-forward overfits catastrophically (IS 1.87 -> OOS -0.877 with an empty and a -2.84 window), the holdout goes negative, DSR is 0.0 with the optimized Sharpe below a 2.26 luck bar, PBO is 0.76, and the parameter surface has 4 cliffs. A modest base Sharpe (0.168) and a tail-safe, low-drawdown build measure survivability, not significance or forward-generalization.

Implementation

Long-short daily trend-follower on ETHUSDT USD-M perp that trades WITH the EMA/100-MA trend only when aggressive taker buy/sell flow confirms genuine directional demand. Longs require taker buy aggression (smoothed taker buy fraction above 0.51), shorts require taker sell aggression. Exits on ATR stop/take-profit, taker flow/price divergence, or trend-stack invalidation. Taker flow is read from the deep multi-year Binance Vision daily metrics file (taker_long_short_vol_ratio, history back to 2021) plus the shallower real-time taker_ratio feed, tolerating both camelCase and snake_case field names. Tail-safe sizing (leverage 1.5, hard 2.5-ATR stop, notional capped at leveraged equity).

Verification Results

Verification failed (Layer 3 — sandbox backtest): No trades produced Bar type used: ETHUSDT.BINANCE-1-DAY-LAST-EXTERNAL, Bars processed: 2369 Diagnostics: should_enter() returned a side 0 times over 2245 evaluated bars -> your ENTRY CONDITION never triggered. Loosen the entry logic / thresholds. Ensure your strategy produces trades with the given data and parameters.

Backtest Review

Clean, functioning implementation: 27 entries signaled and submitted, 0 dropped; trades match the hypothesized WITH-trend, taker-confirmed, long+short (17L/10S) mechanism.

Backtest Review

Marginally positive edge (profit_factor 1.10, positive expectancy, total_return +5.96%) with tightly controlled risk (max_drawdown 7.7%, exposure 44%, leverage-capped) — tail-safe as designed.

Backtest Review

Mirrors the already-promoted funding-confirmed-trend sibling on an independent confirming signal, so the mechanism family is validated; fees are trivial (commission 1.2% of gross).

Backtest Review

Entire positive return is concentrated in a single year (2024 +17.5%); 2021/2022/2023/2025/2026 are all negative — strong regime-concentration / generalization risk.

Backtest Review

Weak risk-adjusted profile: Sharpe 0.17, information_ratio -0.75 (loses to ETH buy-hold, benchmark_meaningful=true).

Backtest Review

Only 27 trades across ~13 tunable parameters — thin sample; walk-forward windows will have very few OOS trades, so optimization can easily overfit to the 2024 window.

Analysis

Mechanism is correctly implemented and tail-safe: taker data loads, entries fire, exposure modest (44%), max drawdown only 7.7%, no blowup or leg-stacking artifact.

Analysis

Single-instrument / single-venue with benchmark_meaningful=true; near-zero beta (0.008) confirms it is a genuine active bet, not closet-long.

Analysis

Fails deflated Sharpe outright: DSR=0.0, is_significant=false, PBO=0.7566, optimized Sharpe 0.259 far below the 225-trial expected-max luck bar of 2.2612; sharpe_ci_low=-0.8869 straddles 0.

Analysis

Walk-forward is_overfitted=TRUE: avg IS 1.874 collapses to avg OOS -0.877 with windows [0.208, 0.0, -2.838], the most recent deeply negative.

Analysis

Holdout FAILED and is negative (holdout_sharpe -0.2316, ratio 0) — loses money on unseen forward data.

Analysis

Sensitivity FAILED with 4 cliff parameters (fast_ema, trend_ma, ma_slope_lookback, taker_smooth_days); entire grid sits below significance.

Analysis

Extremely thin sample: 27 base trades / 17 optimized over ~6 years — one OOS walk-forward window has zero trades, so selection fits noise.

Analysis

Negative information_ratio (base -0.745, optimized -0.739); base total_return only 5.96% over 6 years (~0.22%/trade).

Outcome Summary

EthDailyTakerFlowConfirmedTrendLS aimed to replicate the factory's promoted funding-confirmed ETH trend strategy using an independent signal — aggressive taker buy/sell flow — to confirm directional demand before trading with the daily trend. Its initial backtest was cleanly implemented and tail-safe (+5.96% return, 0.168 Sharpe, 7.7% max drawdown, 27 trades), enough for the analyst to greenlight optimization. But the 3-phase optimization exposed the strategy as statistically hollow: walk-forward was overfitted with in-sample Sharpe 1.87 collapsing to -0.88 out-of-sample, the time-ordered holdout failed and turned negative, sensitivity showed 4 parameter cliffs, and deflated Sharpe was 0.0 with PBO at 0.76. After 3 iterations the analyst abandoned it, concluding the taker-confirmation filter simply traded too rarely for the sample to support significance or forward generalization.

Outcome Summary

Swapping the confirming signal (taker flow for funding) on an otherwise proven mechanism does not inherit its promotability when the new filter trades too rarely — a ~17-27 trade sample over 6 years makes best-of-N optimization fit noise rather than a real forward edge.

Outcome Summary

The analyst abandoned it after optimization: walk-forward was flagged overfitted (avg in-sample Sharpe 1.87 collapsing to out-of-sample -0.88), the untouched holdout failed and went negative (-0.23), sensitivity failed with 4 cliff parameters, and deflated Sharpe was 0.0 against a 225-trial expected-max-luck bar of 2.26 (PBO 0.76).

Outcome Summary

A long-short, single-instrument daily trend-following strategy on ETHUSDT Binance USD-M perp that traded with the price trend but only when the aggressive taker buy/sell volume ratio confirmed genuine directional demand, as a decorrelated taker-flow analog of the already-promoted funding-confirmed-trend sibling.

Outcome Summary

The initial backtest earned +5.96% total return over ~6 years with a Sharpe of 0.168, profit factor 1.10, and 44% win rate across just 27 trades (17 long / 10 short) at a tail-safe 7.7% max drawdown; after optimization the selected config reached only Sharpe 0.259 with a negative information ratio (-0.74).

Iteration History

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['fast_ema', 'slow_ema', 'trend_ma', 'risk_frac', 'atr_period', 'conf_margin', 'exit_margin', 'tp_atr_mult', 'entry_thresh', 'min_notional', 'atr_stop_mult', 'ma_slope_lookback', 'taker_smooth_days'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: EthDailyTakerFlowConfirmedTrendLS._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735697040000) - steady_downtrend: TypeError: EthDailyTakerFlowConfirmedTrendLS._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735697040000) - flat_ranging: TypeError: EthDailyTakerFlowConfirmedTrendLS._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735697040000) - volatility_spike: TypeError: EthDailyTakerFlowConfirmedTrendLS._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735697040000) - zero_volume: TypeError: EthDailyTakerFlowConfirmedTrendLS._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735697040000) - price_gap: TypeError: EthDailyTakerFlowConfirmedTrendLS._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735697040000)
Strategy report

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