SolDailyEmaTrendContinuationChandelierLong
Hypotheses
SOL Daily 21/55-EMA Trend Continuation with Volatility Filter (Long-Only)
Hypotheses
A long-only trend-continuation strategy on SOLUSDT perpetual futures using daily bars. The strategy waits for a confirmed multi-layer uptrend regime (rising 200-day SMA, 21-EMA above 55-EMA, sufficient volatility) and enters on a daily breakout above the prior bar's high. Exits use a Chandelier ATR trailing stop that lets winners run while cutting losers fast — the explicit opposite of the asymmetric small-win/big-loss exit profile that doomed many recently abandoned strategies (NEAR Donchian, ETH Buy-the-Dip). Architecture deliberately mirrors the proven ETH Daily Golden Cross Momentum (Sharpe 4.04) but applied to SOL with a different signal trigger (intermediate-EMA trend continuation rather than the cross event itself), so it adds genuine diversification rather than near-duplicate exposure. Daily timeframe keeps trade frequency low (~15-30 trades/year) so fees stay well under the gross edge. No channel-breakout, no funding-rate contrarian short, no mean-reversion-without-trailing-stop — three failure patterns explicitly avoided.
Hypotheses
Iteration 3 fix for the Layer-2 frozen-signal failure (all 276 signals = 0.0). Root cause: the continuous trend score was computed AFTER, and gated behind, the `if atr is None or atr <= 0: return 0.0` early-return. Whenever ATR could not be computed (an oversized atr_period relative to the 400-bar working window, or a flat-ATR synthetic scenario), every post-warmup bar returned the constant 0.0, freezing the signal. The minimal change moves the score computation (from EMAs/SMA only) ahead of any ATR dependency and returns it unconditionally; ATR is now computed separately and only feeds the volatility gate (entry trigger) and the Chandelier exit anchor. This decouples the monitoring signal from ATR validity, so it varies every bar across all six synthetic scenarios (verified: 275/275 unique values on steady_uptrend, flat_ranging, and zero_volume). min_bars_required now also accounts for atr_period so ATR is normally valid, and config params are set to sane explicit values (atr_period=22 << 400-bar window). Trading semantics (regime AND breakout entry, Chandelier exit, leverage-consuming sizing) are unchanged; only earlier-passing layers' behavior is preserved while the frozen-signal path is eliminated.
Hypotheses
Overfit walk-forward with zero out-of-sample edge on optimization attempt 1. The walk-forward is is_overfitted=TRUE: avg IS Sharpe 7.59 collapses to avg OOS 0.0 with all three OOS windows exactly [0.0, 0.0, 0.0], and the untouched time-ordered HOLDOUT FAILED (holdout_sharpe 0.0, ratio 0.0). The multiple-testing gate fails decisively: deflated_sharpe=0.0 (vs 0.95), is_significant=false, PBO=0.5556 (>0.5), and the optimized Sharpe 2.17 sits far below the 225-trial expected-max luck bar of 15.67 — probabilistic_sharpe 0.9995 vs DSR 0.0 is the textbook PSR-vs-DSR selection-inflation trap (trial Sharpes range -8.7 to +17, an artifact-dominated search space). Fundamentally this is a closet long: NEGATIVE information_ratio in both base (-0.66) and optimized (-0.71) forms with benchmark_meaningful=true, so it loses to holding SOL risk-adjusted, and the base fails promotion thresholds outright (Sharpe 0.92<1.5, max_dd 51%>>10%) with a bull-run outlier-carried profile (2021 carried by a single +232% day, kurtosis 246). Not iterate (per the overfit->abandon rule): high-IS/zero-OOS overfitting on a 1-cliff surface with PBO 0.56 leaves no robust region to tune toward, so a second best-of-225 sweep re-overfits and cannot manufacture out-of-sample or holdout trades that are all zero. Not revise_hypothesis: SOL is a valid trending instrument and the ETH Golden Cross sibling this mirrors is already proven — the mechanism is not stranded on a dead target; this specific SOL trend-continuation port simply overfits and adds negative risk-adjusted value over buy-hold. FAILURE PATTERN: porting the proven ETH Daily Golden Cross momentum architecture to single-asset SOL via a 21/55-EMA trend-continuation trigger + Chandelier exit does NOT inherit promotability — it yields the single-name daily-trend overfit signature (IS 7.59 -> OOS 0.0 across all three windows, holdout Sharpe 0.0, DSR 0.0, PBO 0.56, optimized Sharpe 2.17 vs a 15.67 luck bar, negative information ratio vs buy-hold). A clean sensitivity surface and a flattering in-sample optimized refit measure consistency, not significance or forward-generalization.
Implementation
Long-only daily trend-continuation on SOLUSDT perpetual futures (BINANCE USD-M, leverage 2.0). Enters LONG on a daily breakout (close > prior bar's high) only inside a confirmed multi-layer uptrend regime: 200-day SMA rising over 20 bars, EMA(21) > EMA(55), and ATR/price >= vol_min. Exits via a Chandelier ATR trailing stop (highest-high-since-entry minus chandelier_mult*ATR) with an EMA(21)<EMA(55) trend-break backstop, giving an asymmetric let-winners-run / cut-losers-fast profile. calculate_signal() returns a continuous tanh trend score (EMA spread + SMA slope + price-vs-SMA + breakout distance) that varies every post-warmup bar; the binary entry decision lives in the regime gate consumed by should_enter/position_size.
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['vol_min', 'fast_ema', 'slow_ema', 'atr_period', 'sma_period', 'min_notional', 'position_pct', 'slope_lookback', 'chandelier_mult']
Check that __init__ sets all attributes from self.parameters.get().
- steady_uptrend: Frozen signal: all 276 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
- steady_downtrend: Frozen signal: all 276 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
- flat_ranging: Frozen signal: all 276 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
- volatility_spike: Frozen signal: all 276 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
- zero_volume: Frozen signal: all 276 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
- price_gap: Frozen signal: all 276 signals are identical (value=0.0). calculate_signal() likely has a bug — the signal never varies.
Backtest Review
91 long trades / 0 shorts over ~6 years (~15/yr) matches the hypothesis's stated frequency and long-only direction exactly — mechanism is correctly implemented
Backtest Review
Adequate sample size (91 trades) for meaningful sensitivity/walk-forward analysis
Backtest Review
Clean entry pipeline: 91 signaled -> 91 submitted, 0 dropped for size/cash/min-notional; signal is not frozen or degenerate
Backtest Review
Positive profit_factor (1.41) and Chandelier trailing exit gives a right-skewed win/loss profile (avg_win 16.1k vs avg_loss 11.7k), avoiding the small-win/big-loss trap
Backtest Review
Single-day +232% return on 2021-09-14 exceeds total_return (221%) with kurtosis 246 / skew 14.8 — result appears carried by one implausible tail day; suspected equity/first-bar artifact that must be checked in full analysis
Backtest Review
max_drawdown 51% (CI 24-85%) is far above the promotion bar
Backtest Review
Sharpe 0.917 with sharpe_ci_low -1.24 (CI straddles 0) — edge not yet statistically distinguishable from noise
Backtest Review
information_ratio -0.66 with benchmark_meaningful=true — currently loses to SOL buy-hold risk-adjusted; edge concentrated in 2021/2023 (2024 -2.5%)
Analysis
Clean sensitivity surface (only 1 cliff: chandelier_mult) and Chandelier trailing-stop exit avoids the small-win/big-loss profile the hypothesis set out to avoid
Analysis
Optimized full-sample refit looks superficially attractive (Sharpe 2.17, max_dd 16%, PF 1.88) — but this is in-sample only
Analysis
Walk-forward is is_overfitted=TRUE: avg IS Sharpe 7.59 collapses to avg OOS 0.0 with ALL THREE OOS windows exactly [0.0, 0.0, 0.0] — the optimizer's thinner config (position_pct 0.60->0.31, sma_period 200->294) produces no realized out-of-sample edge whatsoever
Analysis
Time-ordered HOLDOUT FAILED: holdout_sharpe 0.0, ratio 0.0 — the forward window produces no edge on data the optimizer never saw
Analysis
Multiple-testing gate fails decisively: deflated_sharpe=0.0 (vs 0.95 bar), is_significant=false, PBO=0.5556 (>0.5), and the optimized Sharpe 2.17 sits FAR below the 225-trial expected-max luck bar of 15.67 — probabilistic_sharpe 0.9995 vs DSR 0.0 is the textbook PSR-vs-DSR selection-inflation trap; trial Sharpes swinging between -8.7 and +17 confirm the search space is dominated by artifacts
Analysis
NEGATIVE information_ratio in both base (-0.66) and optimized (-0.71) forms with benchmark_meaningful=true — it is a closet long that loses to simply holding SOL risk-adjusted
Analysis
Base backtest is bull-run outlier-carried: annual 2021 +70.6% with a single +232% daily return (return_kurtosis 246, skew 14.8), 2024 negative, and base fails promotion thresholds outright (Sharpe 0.92<1.5, max_drawdown 51%>>10%)
Analysis
Do NOT optimize until the sizing is fixed — same defect as the BTC and ETH trend-continuation siblings. SPECIFIC FIX: add an open-position guard at the top of should_enter() — `if self.cache.positions_open(instrument_id=self.instrument_id): return None` — before consuming self._long_trigger (and the same guard already effectively gates position_size via _long_trigger, but the entry path is what stacks). The 'close > prior bar's high' breakout fires on many consecutive bars during an uptrend, so each adds another 1.2x tranche, pyramiding to ~1.38x average exposure (avg_position_pct 138.5%) and producing the impossible +243.98% single-day return on 2021-09-14 (240% annualized vol, kurtosis 244). After the flat-check, re-run and confirm (a) avg_position_pct ~120%, (b) no >100%/extreme daily returns, and (c) the realized (closed-trade) return and Sharpe still show a positive edge — note the +221.7% headline is ~42% unrealized (end_unrealized_pct 42.3%) and the realized portion leans heavily on that single +244% stacked day, so judge the corrected run strictly on realized terms and watch whether the edge survives once it is not one parabolic position. The underlying trend edge looks real (alpha +0.086, PF 1.33, beta 0.18), so this is a sizing-correctness fix, not an abandon; once the clean re-run confirms a realized edge, proceed to optimization.
Outcome Summary
SolDailyEmaTrendContinuationChandelierLong set out to replicate the successful ETH Daily Golden Cross momentum design on SOL, using a 21/55-EMA trend-continuation trigger and a Chandelier ATR trailing stop to avoid the small-win/big-loss profile that had doomed earlier strategies. It cleared backtest review with an 'optimize' verdict on the strength of 91 clean long trades and a right-skewed win/loss profile, despite a sub-threshold Sharpe of 0.92, 51% drawdown, and a bull-run-outlier-carried return dominated by a single +232% day. Optimization exposed the flaw: an in-sample Sharpe of 7.59 collapsed to exactly 0.0 across all three out-of-sample windows and the untouched holdout, with deflated Sharpe 0.0, PBO 0.556, and a negative information ratio confirming it added no risk-adjusted value over simply holding SOL. The analyst abandoned it after optimization attempt 1 under the overfit-to-abandon rule, concluding that a single-name daily-trend port had produced the classic high-IS/zero-OOS overfit signature with no robust region left to tune.
Outcome Summary
Porting a proven multi-asset trend architecture onto a single name does not inherit its promotability — a clean sensitivity surface and a flattering in-sample refit measure consistency, not forward-generalization, and cannot substitute for positive out-of-sample/holdout edge over buy-and-hold.
Outcome Summary
The analyst issued an 'abandon' verdict at the post-optimization ANALYZING stage: the walk-forward flagged is_overfitted=TRUE with zero out-of-sample and holdout edge, the multiple-testing gate failed decisively (deflated_sharpe 0.0 vs 0.95, PBO 0.556, optimized Sharpe 2.17 far below the 225-trial luck bar of 15.67), and negative information ratio in both base and optimized forms marked it a closet long that loses to holding SOL.
Outcome Summary
A long-only SOLUSDT daily 21/55-EMA trend-continuation strategy that entered on breakouts above the prior bar's high inside a multi-layer uptrend regime (rising 200-day SMA, EMA21>EMA55, volatility floor) and exited via a Chandelier ATR trailing stop, mirroring the proven ETH Daily Golden Cross architecture.
Outcome Summary
The base backtest took 91 long trades (0 shorts) over ~6 years with a 50.5% win rate, profit factor 1.41, total return 221%, but only Sharpe 0.92 (CI low -1.24), 51% max drawdown, and a negative information ratio (-0.66). Optimization refit looked strong in-sample (Sharpe 2.17, max DD 16%, PF 1.88) but its walk-forward was overfit — average IS Sharpe 7.59 collapsed to OOS 0.0 across all three windows, and the holdout produced Sharpe 0.0.
Backtest and paper results are hypothetical. Trading involves risk of loss.