Стратегия ADX + RSI


Дата создания: 2023-09-27 16:27:39 Последнее изменение: 2023-09-27 16:27:39
Копировать: 0 Количество просмотров: 2077
1
Подписаться
1617
Подписчики

Обзор

Это стратегия для отслеживания трендов в сочетании с индикаторами ADX и RSI. Стратегия использует RSI для определения перепродажи в случае перекупа, а также использует ADX для определения тенденций рынка, фильтруя сделки, которые не имеют явных тенденций, чтобы эффективно избежать ловушки в рыночных колебаниях.

Стратегический принцип

  1. Сверхпокупка и перепродажа с помощью 7-циклического RSI
  • RSI ниже 30 считается перепроданным
  • RSI выше 70 считается завышенным
  1. Использование ADX для определения тенденций
  • ADX выше 30 считает тенденцию очевидной
  • ADX ниже 30 считает, что тенденция не заметна
  1. Правила участия
  • Если RSI ниже 30 и ADX выше 30, то нужно делать больше.
  • Показатель RSI выше 70 и ADX выше 30
  1. Стоп-стоп
  • Есть варианты остановки остановки, можно выбрать закрытие остановки остановки или колебание остановки остановки
  • Стоп-стоп по закрытию основан на цене закрытия
  • Стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп

Анализ преимуществ

  1. RSI эффективно определяет точки перекупа и уменьшает ловушки покупки и продажи

  2. Индекс ADX может отфильтровывать тенденции, которые не очевидны, чтобы не оказаться в ловушке во время колебаний

  3. Выборные методы остановки убытков позволяют лучше контролировать риск

  4. Стратегии простые, понятные, понятные и подходят для начинающих.

  5. Есть много возможностей для оптимизации параметров стратегии, которые можно оптимизировать путем корректировки параметров, таких как циклы RSI, промежутки перекупа и перепродажи, циклы сглаживания ADX

Анализ рисков

  1. RSI рискует отклонениями, могут быть сигналы о перекупке и перепродаже

  2. ADX считает, что тренд отстает и может пропустить поворотный момент

  3. Необоснованная установка стоп-стоп может привести к убыткам

  4. Стратегия проста, есть риск переоптимизации

  5. Необходимо оптимизировать параметры для достижения лучших результатов

Направление оптимизации

  1. Параметры RSI могут быть оптимизированы, чтобы найти оптимальную комбинацию параметров для регулирования перепродажи и перекупа

  2. Можно тестировать ADX на разных периодах, чтобы найти наиболее подходящие параметры для определения тенденции

  3. Вы можете протестировать различные методы остановки и потери, чтобы найти наиболее подходящие настройки для стратегии.

  4. Можно использовать индикатор фильтрации трендов, чтобы избежать обратной торговли

  5. Можно комбинировать с другими показателями, чтобы сделать стратегию более эффективной

Подвести итог

Эта стратегия объединяет преимущества двух классических индикаторов RSI и ADX, эффективно обнаруживает тенденции и избегает колебаний, является простой и практичной стратегией для отслеживания тенденций. Есть большое пространство для оптимизации стратегии, и лучшие результаты могут быть получены путем корректировки параметров. В целом, стратегия подходит для начинающих, изучающих алгоритмические стратегии торговли, а также может быть интегрирована в более сложные системы стратегий в качестве модуля.

Исходный код стратегии
/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// This is a strategy that uses the 7 Period RSI to buy when the indicator is shown as oversold (OS) and sells when 
// the index marks overbought (OB). It also uses the ADX to determine whether the trend is ranging or trending
// and filters out the trending trades. Seems to work better for automated trading when the logic is inversed (buying OB 
// and selling the OS) wihout stop loss.

//@version=4
strategy("ADX + RSI Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.04, calc_on_every_tick=false)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))


//SL & TP Inputs
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.2, title="SL Expander")
i_TPExpander=input(defval=0, step=.2, title="TP Expander")
i_reverse=input(true, title="Reverse Trades")

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//RSI Calculations
RSI=rsi(close, 7)
OS=input(30, step=5)
OB=input(80, step=5)

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)


//Entry Logic
BUY = sig < adxlevel and (RSI < OS) 
SELL = sig < adxlevel and (RSI > OB) 

//Entries
strategy.entry("long", strategy.long, when=i_reverse?SELL:BUY)
strategy.entry("short", strategy.short, when=not i_reverse?SELL:BUY)
//Exits
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")