Эта стратегия направлена на захват небольших отступлений в тренде и длинный путь, когда отступление заканчивается до прибыли. Она использует комбинацию технических индикаторов, таких как EMA, MACD, RSI, чтобы определить тенденцию и конец отступлений. Она также использует ATR для установки стоп-лосса и цены на прибыль.
Стратегия сначала рассчитывает EMA, MACD и RSI для определения текущего направления и силы тренда.
При использовании 3 EMA (короткие на 21 период, средние на 50 периодов и длинные на 200 периодов) когда короткие EMA пересекают средние и длинные EMA, это сигнализирует о восходящем тренде.
Когда линия MACD или гистограмма пересекает линию 0, она показывает усиление восходящего тренда.
Если показатель превышает 50, то спад может закончиться.
Затем индикатор SuperTrend определяет конкретную точку покупки.
Наконец, стоп-лосс и прибыль устанавливаются на основе ATR.
Управление рисками:
Стратегия надежно сочетает в себе несколько индикаторов для определения тренда и отклонения. Строгий механизм стоп-лосса контролирует риск и позволяет своевременно ликвидировать. При постоянной настройке параметров и вселенной она может достигать хорошей доходности.
/*backtest start: 2022-10-06 00:00:00 end: 2023-10-12 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="pullb", overlay = true, initial_capital = 10000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity) //variables ///emas var ema_src = input.source(close, "EMA Source") ema_1 = input.int(21, 'EMA 1 len') ema_2 = input(50, 'EMA 2 len') ema_3 = input(200, 'EMA 3 len') ///macd var mac_src = input.source(close, "MACD Source") mac_1 = input.int(12, 'MACD Fast') mac_2 = input.int(26, 'MACD Signal') mac_3 = input.int(9, 'MACD Histogram') ///rsi var rsi_src = input.source(close, "RSI Source") rsi_len = input.int(14, 'RSI Len') ///stoch var smoothK = input.int(3, "K", minval=1) smoothD = input.int(3, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(14, "Stochastic Length", minval=1) stoch_src = input(close, title="RSI Source Stoch") //usage variables ema_b = input.bool(true, "Use EMA Filter") rsi_b = input.bool(true, "Use RSI Filter") macd_b = input.bool(true, "Use MACD Filter") //stoch_b = input(title="Use STOCH Filter", type=bool, defval=true) //emaas ema1 = ta.ema(ema_src, ema_1) ema2 = ta.ema(ema_src, ema_2) ema3 = ta.ema(ema_src, ema_3) //macd [macdLine, signalLine, histLine] = ta.macd(mac_src, mac_1, mac_2, mac_3) //rsi rsi = ta.rsi(rsi_src, rsi_len) //stoch rsi1 = ta.rsi(stoch_src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) //supertrend Periods = input.int(14, "ATR Period") src_st = input.source(close, "Supertrend Source") Multiplier = input.float(2.0 , "ATR Multiplier") changeATR= input.bool(true, "Change ATR Calculation Method ?") showsignals = input.bool(true, "Show Buy/Sell Signals ?") highlighting = input.bool(true, "Highlighter On/Off ?") atr2 = ta.sma(ta.tr, Periods) atr3= changeATR ? ta.atr(Periods) : atr2 up=src_st-(Multiplier*atr3) up1 = nz(up[1],up) up := close[1] > up1 ? math.max(up,up1) : up dn=src_st+(Multiplier*atr3) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend buySignal = trend == 1 and trend[1] == -1 sellSignal = trend == -1 and trend[1] == 1 //conditions ///buy rsi_cond_b = if rsi_b rsi >= 50 else true macd_cond_b = if macd_b (histLine >= 0 or histLine < histLine[1]) else true ema_cond_b = if ema_b (ema1 > ema2 and ema2 > ema3) else true look_for = input.int(5, "Bars from cross to signal") stoch_signal_sum = 0 for i = 0 to (look_for) if k[i] > d[i] and k[i + 1] < d[i + 1] and (k[i + 1] < 20 and d[i + 1] < 20) stoch_signal_sum := stoch_signal_sum + 1 stoch_cond_b = if stoch_signal_sum > 0 if k > 80 and d > 80 false else true else false sup_cond_b = buySignal buy_sig = (rsi_cond_b and macd_cond_b and ema_cond_b and stoch_cond_b and sup_cond_b) tp_b = close + (ta.atr(14) * 3) sl_b = close - (ta.atr(14) * 1.5) if (buy_sig) strategy.entry("long", strategy.long) strategy.exit("exit", "long", stop = sl_b, limit = tp_b) plot(tp_b) plot(sl_b)