Strategy templates

Hand-picked starting points — one per common pattern. Each template includes an honest “why it fails” section so you know the mode it breaks under before you start live trading. Click any template to test it instantly with real Binance fees and walk-forward validation.

MEAN REVERSION2 templates

RSI Mean Reversion

Beginner

Buy oversold bounces, sell overbought fades.

if (ind.rsi[14][i] < 30) return 'long';
if (ind.rsi[14][i] > 70) return 'short';
return null;
Why it works

In ranging markets, RSI is a reliable contrarian signal. Assets that sell off hard tend to bounce before the primary trend resumes; RSI<30 catches that moment. Works best with a regime filter (ADX<25) to avoid buying into trending moves.

Why it fails

In a strong trend, RSI can sit below 30 for weeks while the asset keeps falling. Without a regime filter it bleeds capital catching every knife.

Works best on: 15m · 1h · 4hBTC · ETH · SOL

Bollinger + RSI

Beginner

Only buy oversold when price has also pierced the lower band.

const close = ind.closes[i];
const bb = ind.bb['20_2'];
if (close < bb.lower[i] && ind.rsi[14][i] < 30) return 'long';
if (close > bb.upper[i] && ind.rsi[14][i] > 70) return 'short';
return null;
Why it works

Two conditions must agree: price must have stretched far enough from the mean to hit the lower Bollinger band, AND RSI must confirm the move is overextended. Reduces false signals vs. RSI alone.

Why it fails

Narrow bands in low-volatility regimes let price close outside the band regularly without any real reversal. Works best when ATR is elevated.

Works best on: 15m · 1hBTC · ETH
TREND FOLLOWING4 templates

EMA 13/48 Cross

Beginner

The classic: buy when fast EMA crosses above slow EMA.

const fast = ind.ema[13], slow = ind.ema[48];
if (fast[i-1] <= slow[i-1] && fast[i] > slow[i]) return 'long';
if (fast[i-1] >= slow[i-1] && fast[i] < slow[i]) return 'short';
return null;
Why it works

EMA crosses catch sustained momentum. Works when crypto is in a clear multi-week trend (bull or bear). Easy to implement, easy to reason about.

Why it fails

Generates constant false signals in ranging markets. Most crypto time is ranging. Without filters, this strategy loses money on choppy chop before the one big trend pays for it.

Works best on: 1h · 4h · 1dBTC · ETH

MACD + ADX Filter

Intermediate

MACD crossover, but only when ADX confirms a trend.

const macd = ind.macd, adx = ind.adx[14];
if (adx[i] < 20) return null;
if (macd.line[i-1] <= macd.signal[i-1] && macd.line[i] > macd.signal[i]) return 'long';
if (macd.line[i-1] >= macd.signal[i-1] && macd.line[i] < macd.signal[i]) return 'short';
return null;
Why it works

MACD alone whipsaws in ranging markets. Adding ADX > 20 filters out the chop — you only take MACD signals when a trend is actually present.

Why it fails

ADX is a lagging indicator; by the time it confirms a trend, half the move may have already happened. Also misses mean-reversion edge entirely.

Works best on: 1h · 4hBTC · ETH · SOL

Supertrend

Intermediate

Flip direction with the Supertrend indicator.

const st = ind.supertrend['10_3'];
if (st[i].trend === 1 && st[i-1].trend !== 1) return 'long';
if (st[i].trend === -1 && st[i-1].trend !== -1) return 'short';
return null;
Why it works

Supertrend is ATR-based so the stop distance adapts to volatility. One indicator handles both entry and trailing stop — unusually clean.

Why it fails

In low-volatility choppy periods, the trend flips constantly, racking up fees. Fee drag can bleed a whole year of gains in a bad quarter.

Works best on: 1h · 4hBTC · ETH

Triple EMA (9/21/55)

Intermediate

Enter only when all three EMAs agree on direction.

const e9 = ind.ema[9], e21 = ind.ema[21], e55 = ind.ema[55];
if (e9[i] > e21[i] && e21[i] > e55[i] && !(e9[i-1] > e21[i-1] && e21[i-1] > e55[i-1])) return 'long';
if (e9[i] < e21[i] && e21[i] < e55[i] && !(e9[i-1] < e21[i-1] && e21[i-1] < e55[i-1])) return 'short';
return null;
Why it works

Three-timeframe confirmation (fast, medium, slow). When all three stack in order, short-, medium-, and long-term momentum agree. Fewer signals but higher quality.

Why it fails

The confirmation delay means you're always late to the trend. Often you enter right as the move exhausts and get shaken out by the first pullback.

Works best on: 1h · 4hBTC · ETH
BREAKOUT1 template

Donchian Breakout (20)

Intermediate

The Turtle Trading rule: buy 20-day highs.

const ch = ind.donchian[20];
if (ind.closes[i] > ch.upper[i-1]) return 'long';
if (ind.closes[i] < ch.lower[i-1]) return 'short';
return null;
Why it works

The original Turtle Traders made millions on this. Breakouts are self-reinforcing — price taking out a recent high attracts more buyers. Works especially well during crypto bull cycles.

Why it fails

False breakouts are common. Many highs are tested, pierced briefly, and then fully rejected. Without an ATR-based stop, these fakeouts can be expensive.

Works best on: 4h · 1dBTC · ETH · SOL
HYBRID2 templates

Supertrend + MACD Combo

Advanced

Enter only when Supertrend trend and MACD histogram agree.

const st = ind.supertrend['10_3'], macd = ind.macd;
if (st[i].trend === 1 && macd.histogram[i] > 0) return 'long';
if (st[i].trend === -1 && macd.histogram[i] < 0) return 'short';
return null;
Why it works

Two uncorrelated trend indicators must both confirm. Cuts whipsaw signals dramatically. When both line up, the probability of sustained follow-through is materially higher.

Why it fails

Very selective — sometimes goes weeks without a trade. If you're watching the strategy expecting action, the patience required can trigger overriding it manually (the worst thing you can do).

Works best on: 1h · 4hBTC · ETH · SOL

RSI Bull/Bear + ADX

Advanced

Adaptive RSI thresholds based on regime.

const close = ind.closes[i], ema200 = ind.ema[200][i];
const bull = close > ema200;
const longT = bull ? 45 : 25;
if (ind.rsi[14][i] < longT) return 'long';
return null;
Why it works

In bull regimes, RSI rarely drops below 40 — so waiting for 30 means missing most dips. This template shifts RSI thresholds up in bull regimes (buy at 45) and down in bear regimes (buy at 25), using a 200 EMA as the regime gate.

Why it fails

Regime detection itself lags. A regime switch often happens AT a high-RSI reading, so the strategy keeps trading the old regime until it notices. Requires care with the regime classifier.

Works best on: 1h · 4hBTC · ETH

None of these fit?

Describe your strategy in plain English. Prove It parses it into conditions and tests it against the same data the templates run on.

Describe my own strategy →