Skip to content

View original

LinkDaily2155EmaTrendContinuationVolFilterLong

Hypotheses

LINK Daily 21/55-EMA Trend Continuation with Volatility Filter (Long-Only)

Hypotheses

A long-only single-instrument trend-continuation strategy on LINKUSDT perpetual futures using daily bars and OHLCV-only data. This proposal applies the architecture proven on SOL Daily 21/55-EMA Trend Continuation with Volatility Filter (Sharpe 3.81, paper_stage) to LINK. Asset selection is justified by LINK-SPECIFIC empirical evidence — NOT a theoretical fractal-edge argument: LINK 1D Multi-Week Trend Continuation produced Sharpe 2.55 (promoting), which is direct empirical proof that LINK responds to daily EMA-based trend-following constructions. The Multi-Week Trend success establishes that LINK has clean daily trend persistence; the 21/55 EMA + volatility filter uses DIFFERENT EMA periods (21/55 vs 30/80) and a DIFFERENT timing trigger (yesterday's-high breakout vs 5-day-high continuation) than the existing LINK Multi-Week, capturing a different segment of LINK's trend dynamics. Importantly, this proposal explicitly addresses the recently-documented architecture-mirror failures (5 abandonments this session: BNB Golden Cross, ETH Spot Drawdown, SOL Spot Drawdown, LINK 4H Volume Breakout, AVAX Calm-Regime). The LINK 4H Volume Breakout failure was specifically a TIMEFRAME-MISMATCH issue (LINK's 4H volume is too diffuse for the 1.5× threshold), but the daily timeframe is where LINK's trend signature works — exactly the timeframe of this proposal. Additionally: (a) NO bait-and-switch — strictly LINKUSDT.BINANCE perp throughout, (b) sensitivity_passed=true with cliff_count=0 REQUIRED before optimization, (c) ATR-volatility-adjusted exits (no fixed-percentage trail). Existing LINK strategies in pipeline: LinkDailyMultiWeekTrendContinuationLong uses 30/80 EMA + 20-day momentum + 5-day-high continuation (Sharpe 2.55). This proposal uses 21/55 EMA + breakout-above-prior-day-high + 2% volatility floor — mechanism-orthogonal at the same daily timeframe. Combined, the two LINK strategies capture different segments of LINK's daily trend dynamics. Single-dominant-filter design, NOT a multi-condition AND-gate. Calibrated for ~10-25 entries/year — well above the sparsity-failure threshold.

Hypotheses

Iteration-2 minimal fix for the Layer-2 TypeError (_ema() takes 2 positional arguments but 3 were given). Root cause: _ema was declared as a @staticmethod, but the Layer-2 _StrategyProxy rebinds class callables onto a stand-in instance, which discards the staticmethod descriptor and passes the proxy instance as an injected first positional argument -- so a 2-param staticmethod is called with 3 args and raises in every synthetic scenario. The fix moves _ema out of the class to a module-level function (module functions are never bound to an instance, so no self can be injected) and updates the two call sites to _ema(closes, ...). The _atr method stays an instance method because it legitimately takes self. Nothing else changed: imports are unchanged (Layer 1 stays green), and the EMA math, trend/breakout/volatility gates, exits, and sizing are byte-identical, so no earlier-layer regression. Venue remains LINKUSDT.BINANCE USD-M daily, long-only, leverage 1.0 (sizing references self.config.leverage via the notional cap, and 1.0 means no amplification, so the leverage_set_but_unused gate does not trigger).

Hypotheses

LINK daily 21/55-EMA trend continuation shows no realized edge to optimize. Separating realized from open PnL: end_unrealized_pct is 12.10 of the 13.93% total return, so the 38 closed trades net only ~1.8% over 6.5 years — essentially breakeven (profit_factor 1.038, Sharpe 0.09 with CI [-1.88, 0.85] straddling 0, win rate 23.7%). The strategy is negative in 5 of 7 years (2021, 2022, 2023, 2025, 2026); the only positive years are 2020 (carried by a single +20.5% day) and 2024, and the headline is dominated by 1-2 outlier days (skew 16, kurtosis 334, tail_ratio 0.007) plus a lucky un-exited open position that is itself bleeding in 2025-2026. Optimization amplifies an existing edge, but there is none here to amplify — a 225-trial sweep on a breakeven base would curve-fit to the outlier days and produce a deflated-Sharpe/holdout failure, wasting the 2 hours. The mechanism is correct and proven on siblings (SOL 21/55 Sharpe 3.81, LINK Multi-Week 2.55), so LINK can trend — but this specific 21/55 + prior-day-high + 2%-vol-floor configuration demonstrably does not capture it. Not iterate: there is no code defect, and parameter re-tuning is exactly what optimization does — the near-zero realized base doesn't warrant it. FAILURE PATTERN: a single-asset daily EMA trend-continuation config whose closed trades net ~breakeven over 6.5 years (PF ~1.04, 5/7 negative years) while the headline return is carried by 1-2 outlier days plus a large open-position unrealized gain has no realized edge to optimize — a validated sibling architecture on the same asset does not rescue a specific param config that the realized track record shows is flat.

Implementation

Long-only 21/55-EMA daily trend-continuation on LINKUSDT.BINANCE USD-M futures, OHLCV-only single feed. Enters LONG when the 21-EMA is above the 55-EMA (trend regime), the bar breaks above the prior day's high (timing trigger), and ATR/close exceeds a 2% volatility floor. Exits via an ATR trailing stop (3x ATR below the in-trade peak), an EMA trend-reversal (21 back below 55), or an optional hard stop. The signal is the continuous normalized EMA spread (trend strength %) recomputed every bar; the breakout + volatility gates plus the threshold make the discrete entry decision. Risk-based sizing off the ATR-stop distance, capped at equity notional. leverage 1.0.

Verification Results

Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['ema_fast', 'ema_slow', 'risk_pct', 'vol_floor', 'atr_period', 'trend_exit', 'min_notional', 'stop_loss_pct', 'atr_trail_mult', 'entry_threshold', 'breakout_lookback', 'max_notional_frac'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: LinkDaily2155EmaTrendContinuationVolFilterLong._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735693140000) - steady_downtrend: TypeError: LinkDaily2155EmaTrendContinuationVolFilterLong._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735693140000) - flat_ranging: TypeError: LinkDaily2155EmaTrendContinuationVolFilterLong._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735693140000) - volatility_spike: TypeError: LinkDaily2155EmaTrendContinuationVolFilterLong._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735693140000) - zero_volume: TypeError: LinkDaily2155EmaTrendContinuationVolFilterLong._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735693140000) - price_gap: TypeError: LinkDaily2155EmaTrendContinuationVolFilterLong._ema() takes 2 positional arguments but 3 were given (bar timestamp: 1735693140000)

Backtest Review

Mechanism is well-formed and faithful: 21/55 EMA trend gate, prior-day-high breakout trigger, 2% vol floor, ATR trailing exit — 38 long entries, no shorts, as designed

Backtest Review

Single-asset, single-feed, no stale-leg or sizing artifact; metrics_reliable=true

Backtest Review

Architecture has validated siblings (SOL 21/55 Sharpe 3.81, LINK Multi-Week 2.55), so LINK daily trend persistence is real in principle

Backtest Review

Realized edge is ~nil: end_unrealized_pct 12.1 of 13.9 total return means closed trades net only ~1.8% over 6.5 years

Backtest Review

profit_factor 1.038, Sharpe 0.09 (CI straddles 0), win rate 23.7% — fees nearly consume the gross edge

Backtest Review

Negative in 5 of 7 years including both recent years (2025, 2026); the open position is also bleeding recently

Backtest Review

Headline carried by 1-2 outlier days (skew 16, kurtosis 334, tail_ratio 0.007) — not a repeatable signal

Backtest Review

This 21/55 + prior-day-high + 2% vol-floor config does not capture LINK's trend the way the validated siblings' configs do

Outcome Summary

This strategy ported a paper-stage SOL 21/55-EMA trend-continuation architecture to LINK, justified by LINK's own validated daily trend sibling (Multi-Week, Sharpe 2.55) and using orthogonal EMA periods and a prior-day-high breakout trigger. The implementation was clean (38 long entries, metrics reliable), but the realized record was flat: closed trades netted only ~1.8% over 6.5 years (profit factor 1.038, Sharpe 0.09), the +13.9% headline was mostly un-exited open PnL plus 1-2 outlier days, and it lost in five of seven years including both recent ones. The analyst abandoned it before optimization, concluding this specific 21/55 + prior-day-high + 2%-vol-floor config simply does not capture LINK's trend the way the validated siblings do — and that optimizing a breakeven base would only fit the outliers and fail the forward gates.

Outcome Summary

A validated sibling architecture on the same asset (SOL 21/55 Sharpe 3.81, LINK Multi-Week 2.55) does not rescue a specific parameter config whose realized track record is flat — when closed trades net ~breakeven over 6.5 years with the headline carried by 1-2 outlier days and a large open-position unrealized gain, there is no edge to amplify and optimization is wasted.

Outcome Summary

The analyst abandoned it at backtest review as a breakeven base with no realized edge to optimize rather than a bug — the mechanism was correct and faithful, but separating realized from open PnL showed the closed trades net ~breakeven over 6.5 years, and a 225-trial sweep on that base would only curve-fit the outlier days and fail deflated Sharpe and the holdout.

Outcome Summary

A long-only daily trend-continuation strategy on LINKUSDT perpetual futures (pure OHLCV) applying a SOL-proven architecture — entering long when the 21-EMA was above the 55-EMA, price broke above the prior day's high, and ATR/close exceeded a 2% volatility floor, managed by an ATR trailing stop and an EMA trend-reversal exit.

Outcome Summary

Over 38 long trades in 6.5 years it had essentially no realized edge: profit factor 1.038, Sharpe 0.09 (CI -1.88 to 0.85), total return +13.9% but with end-unrealized 12.1% — so closed trades netted only ~1.8% — win rate 23.7%, 16.7% max drawdown, and negative in 5 of 7 years (including 2025 and 2026), with the headline carried by 1-2 outlier days (skew 16, kurtosis 334, tail_ratio 0.007) plus a lucky open position that was itself bleeding recently.
Strategy report

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