Skip to content

View original

SolDailyTrendPullbackContinuationLS

Hypotheses

SOL USD-M Daily Trend-Pullback Continuation, Long-Short (Single-Instrument BINANCE Perp, Daily Bars, Pure OHLCV, Buy Shallow Pullbacks Within a Confirmed Uptrend / Sell Rallies Within a Confirmed Downtrend, Tail-Safe Sizing, Low-Parameter)

Hypotheses

A LONG-SHORT, SINGLE-INSTRUMENT, DAILY trend-CONTINUATION strategy on SOLUSDT.BINANCE (USD-M perpetual) that trades the factory's validated momentum/trend edge via a PULLBACK entry: instead of entering on a trend-sign flip or breakout (the promoted TS-momentum / Donchian expressions), it waits for a SHALLOW counter-trend pullback within an already-confirmed trend and enters on the trend's RESUMPTION. This is the only remaining viable expression after the design space collapsed: the analyst has now explicitly restricted usable signal sources to PRICE OHLCV and FUNDING ONLY (liquidations, OI, account-ratio, AND taker-ratio are all confirmed multi-year data-walled / unbacktestable), ruled spot overlays out (equity-marking artifact + no edge vs buy-and-hold), closed out every contrarian/fade, and shown single-name PRICE TREND clones fail on non-core alts but the trend edge IS real on core trenders (BTC/ETH/SOL). This hypothesis stays strictly inside proven-safe ground: OHLCV-ONLY (the deepest, wall-free data); MOMENTUM DIRECTION (with-trend continuation, not a fade); CORE TRENDER (SOL, whose TS-momentum sibling is at paper_stage, so it provably trends); DAILY perp (not the dead intraday-bar horizon, not spot — avoiding both the chop failure and the spot artifact); SINGLE-INSTRUMENT/SINGLE-VENUE/SINGLE-ACCOUNT (no multi-instrument aggregation bug); and TAIL-SAFE controls (leverage <=1.5, hard ATR stop, modest notional cap) to prevent the LINK-style blowup. The pullback entry is the genuine differentiator versus the promoted SOL TS-momentum: entering on a retracement gives a structurally better entry price, a tighter logical stop (just beyond the pullback extreme), and a lower-drawdown / decorrelated return stream than chasing the breakout/trend-sign. It mirrors the existing BTCBNBPullbackContinuation construction on a single core trender. Low parameter count to resist overfitting.

Hypotheses

Iteration 2 fix: Layer-2 synthetic scenarios failed with `_ema() takes 2 positional arguments but 3 were given` because the verifier proxy invokes the method bound (passing `self`) while `_ema` was declared `@staticmethod` with only `(values, period)`. The smallest correct fix is to make `_ema` a regular instance method `def _ema(self, values, period)`; all existing call sites `self._ema(values, period)` now match the signature (self + 2 args). No other logic, imports, parameters, or signal behavior changed, so all earlier passing layers remain intact. The strategy still implements the hypothesis: with-trend pullback-continuation on a core trender (SOL) at the daily horizon, OHLCV-only, with tail-safe controls.

Hypotheses

Failed deflated Sharpe and the walk-forward generalization test on optimization attempt 1, on a base backtest that already loses money (Sharpe -0.29, negative expectancy, profit_factor 0.78, avg_trade_return negative). DSR=0.0123 (vs 0.95 bar) with the optimized Sharpe 1.31 far below the 225-trial expected-max luck bar of 2.57 (is_significant=false, sharpe_ci_low -0.14 straddling 0, PBO 0.6561 >0.5) — after multiple-testing correction the selected config is statistically indistinguishable from best-of-225 noise; probabilistic_sharpe 0.99 vs DSR 0.0123 is the textbook selection-inflation trap. The walk-forward is is_overfitted=TRUE: avg IS Sharpe 1.67 collapses to avg OOS -0.05 with two of three OOS windows negative ([-1.32, +1.57, -0.39]) — the pullback-continuation mechanism does not generalize out-of-sample on SOL. The holdout 'pass' is SPURIOUS: passed=true but ratio=0 because it is computed against a NEGATIVE WF-OOS baseline (-0.05), so a positive holdout_sharpe (3.64) cannot validate a strategy that loses money out-of-sample. Sensitivity FAILED with 6 of 14 cliff parameters (fast_ema, slow_ema, atr_period, tp_atr_mult, pullback_rsi_hi, pullback_rsi_lo) — a knife-edge surface. The optimizer curve-fit by thinning trades 31->9, so the flattering optimized Sharpe 1.31 / PF 4.57 is a 9-sample best-of-225 artifact, and information_ratio stays -0.80 (loses to its own benchmark). Not iterate (attempt 1 of 2): the base loses money, the binding failure is negative-OOS generalization on a 6-cliff surface with PBO 0.66 and no robust region to tune toward, so a second best-of-225 sweep re-overfits. Not revise_hypothesis: per the overfit->abandon rule this is high-IS/negative-OOS overfitting, not a proven mechanism stranded on a dead target — SOL is a proven trender (its TS-momentum sibling is at paper_stage) so reframing the same pullback expression onto another instrument just re-overfits. FAILURE PATTERN: mirroring the BTCBNBPullbackContinuation construction onto single-asset SOL daily perp does NOT inherit promotability — the pullback-entry variant loses money at base (PF 0.78, negative expectancy), overfits in-sample (IS 1.67 -> OOS -0.05, is_overfitted), cannot clear best-of-225 deflation (DSR 0.012, Sharpe 1.31 vs 2.57 luck bar, PBO 0.66), and sits on a 6-cliff sensitivity surface. A low-drawdown optimized refit and a holdout 'pass' whose ratio is 0 against a negative WF-OOS baseline are not evidence of a generalizing edge.

Implementation

Long-short daily trend-continuation strategy on SOLUSDT USD-M perp using pullback entries. Confirms a trend via EMA stack (20>50) plus a sloped 100-day MA, waits for a shallow counter-trend RSI pullback toward neutral within that trend, and enters on the trend's resumption (price and RSI turning back with-trend). ATR-based hard stop and take-profit, EMA-flip trend-invalidation exit, risk-based sizing capped at leveraged-equity notional. OHLCV-only, single-instrument/venue/account, tail-safe (leverage 1.5, ATR stop, notional cap).

Verification Results

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

Backtest Review

Strategy functions and produces 31 trades (17 long / 14 short) — balanced long-short matching the hypothesis's pullback-continuation mechanism

Backtest Review

Trades implement the stated premise: with-trend continuation entries after shallow pullbacks, not a fade; ~28-day holds and 45% exposure are consistent with a daily trend strategy

Backtest Review

SOL provably trends (its TS-momentum sibling reached paper_stage), so a genuine trend edge could plausibly exist somewhere in parameter space

Backtest Review

Tail-safe controls present (leverage cap, ATR stop, notional cap); max drawdown a contained 21.8%

Backtest Review

Base configuration LOSES money: Sharpe -0.29, total_return -6.0%, profit_factor 0.78, negative expectancy, win_rate 35%

Backtest Review

14 tunable parameters against only 31 trades (~2 trades/param) is a strong overfitting setup — best-of-N optimization will likely fit noise

Backtest Review

Negative annual returns in 3 of last 4 years (2023/2024/2025) — no recent regime where the edge is working; rolling Sharpe deeply negative into 2026

Backtest Review

return_kurtosis 65.6 / tail_ratio 0.098 indicate the P&L is dominated by a few outlier days, not a persistent edge

Analysis

Clean OHLCV-only single-instrument construction with tail-safe sizing (leverage<=1.5, ATR stop, notional cap) — no data-wall or multi-instrument aggregation risk

Analysis

Low drawdown on the optimized refit (6.7%) and a differentiated pullback-entry logic

Analysis

Base backtest LOSES money: Sharpe -0.29, negative expectancy (-$344/trade), avg_trade_return negative, profit_factor 0.78, win_rate 35% — no edge before optimization

Analysis

Fails deflated Sharpe decisively: DSR=0.0123 (vs 0.95), optimized Sharpe 1.31 far below the 225-trial expected-max luck bar of 2.57, is_significant=false, sharpe_ci_low -0.14 straddles 0, PBO 0.6561

Analysis

Walk-forward is_overfitted=TRUE: avg IS 1.67 collapses to avg OOS -0.05 (windows [-1.32, +1.57, -0.39], 2 of 3 negative)

Analysis

Holdout 'pass' is spurious: ratio=0 because it is computed against a negative WF-OOS baseline (-0.05)

Analysis

Sensitivity FAILED with 6 cliff parameters — knife-edge surface with no robust region

Analysis

Optimized config is degenerate (9 trades), and its information_ratio is -0.80 — loses to its own benchmark risk-adjusted

Outcome Summary

This strategy expressed the factory's validated daily-trend edge on SOL through a pullback-continuation entry, mirroring the promotable BTCBNBPullbackContinuation on a single core trender. The base backtest already lost money (Sharpe -0.29, PF 0.78, negative expectancy across 31 trades), but because SOL provably trends the analyst approved optimization. Optimization curve-fit by thinning trades from 31 to 9, yielding a headline Sharpe 1.31 that was statistically indistinguishable from best-of-225 noise (DSR 0.012 vs a 2.57 luck bar, PBO 0.66) while walk-forward showed in-sample Sharpe 1.67 collapsing to -0.05 out-of-sample on a 6-cliff surface. After 2 iterations it was abandoned at the analyzing stage as high-IS / negative-OOS overfitting, never reaching risk review or paper trading.

Outcome Summary

Cloning a promotable construction (BTCBNBPullbackContinuation) onto a proven trender like SOL does not inherit its edge — 14 parameters against ~31 trades on a money-losing base backtest produces best-of-N overfitting that cannot survive deflation, walk-forward, or a knife-edge sensitivity surface.

Outcome Summary

The analyst voted abandon after optimization attempt 1: deflated Sharpe 0.0123 (vs 0.95 bar) with optimized Sharpe 1.31 far below the 225-trial expected-max luck bar of 2.57 (PBO 0.6561), walk-forward is_overfitted=TRUE (avg IS 1.67 collapsing to avg OOS -0.05, two of three OOS windows negative), and sensitivity failing with 6 of 14 cliff parameters.

Outcome Summary

A long-short, single-instrument daily strategy on SOLUSDT.BINANCE perp that traded the validated trend edge via a pullback entry — confirming an EMA/MA trend, waiting for a shallow RSI pullback, then entering on the trend's resumption with tail-safe sizing (leverage<=1.5, ATR stop, notional cap) and OHLCV-only data.

Outcome Summary

The base backtest lost money over 31 trades (17 long / 14 short): Sharpe -0.29, total_return -6.0%, profit_factor 0.78, ~35% win rate and negative expectancy (-$344/trade), with a contained 21.8% max drawdown. Optimization produced a flattering but degenerate refit (Sharpe 1.31, PF 4.57 on only 9 trades) that failed every generalization test.
Strategy report

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