Адаптивная стратегия следования за трендом на основе ATR и RSI


Дата создания: 2024-01-23 11:31:14 Последнее изменение: 2024-01-23 11:31:14
Копировать: 0 Количество просмотров: 713
1
Подписаться
1617
Подписчики

Адаптивная стратегия следования за трендом на основе ATR и RSI

Обзор

Эта стратегия использует средний реальный диапазон колебаний (ATR), относительно сильный индекс (RSI) и движущиеся остановки для адаптивного отслеживания тенденции. Используя ATR для расчета динамических остановок, RSI используется для определения направления рыночной тенденции, движущиеся остановки отслеживают колебания цен для максимизации прибыли. Это очень типичная стратегия отслеживания тенденций.

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

  1. Вычисление ATR. ATR отражает волатильность рынка и уровень риска. Данная стратегия использует ATR для вычисления динамического уровня стоп-лосса и достижения адаптивного стоп-лосса.

  2. Расчет RSI. RSI позволяет определить, что рынок перекупает и перепродает. Когда RSI больше 50, это - “позитивный”, а когда RSI меньше 50, это - “позитивный”.

  3. Мобильный стоп-трекер. Эта стратегия используется для определения направления тренда в зависимости от уровня стоп-трада, рассчитанного ATR, и RSI. Мобильный стоп-трекер следит за ценовыми колебаниями, постепенно увеличивая стоп-позиции и максимизируя прибыль.

  4. В частности, когда RSI больше 50, то открывается позиция сверх, а когда она меньше 50, то открывается позиция сверх. Затем используется цена остановки, рассчитанная по ATR, для перемещения остановки и отслеживания ценовых колебаний.

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

  1. Используя ATR для адаптивного остановки, можно скорректировать величину остановки в зависимости от динамики волатильности рынка, чтобы избежать слишком больших и слишком маленьких недостатков остановки.

  2. RSI определяет направление тренда точно и надежно, чтобы избежать торговли в условиях колебаний.

  3. Мобильные стопы отслеживают колебания цен, позволяют увеличить стоп-позиции и отслеживать тенденцию к прибыли.

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

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

  2. Несмотря на то, что существует защита от потерь, существенный взлет неизбежен, что может привести к риску прорыва потерь. Позиции могут быть соответствующим образом уменьшены, чтобы контролировать риск.

  3. Стратегия имеет большую зависимость от оптимизации параметров торговой разновидности и требует корректировки параметров для разных разновидностей.

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

  1. Можно рассмотреть возможность использования алгоритмов машинного обучения для оптимизации параметров.

  2. Добавление модуля контроля позиций, который позволяет динамически регулировать размер позиций в зависимости от рыночных условий, снижая вероятность прорыва стоп-лосса.

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

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

Эта стратегия включает в себя модули, такие как ATR, RSI и мобильный стоп, чтобы сформировать типичную адаптивную стратегию отслеживания тенденций. Благодаря оптимизации параметров она может очень гибко адаптироваться к различным видам торговли и является рекомендуемой общей стратегией отслеживания тенденций.

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

//@version=2
strategy(title="UTBot Strategy", overlay = true )
   
// CREDITS to @HPotter for the orginal code. 
// CREDITS to @Yo_adriiiiaan for recently publishing the UT Bot study based on the original code -
// CREDITS to @TradersAITradingPlans for making this Strategy. 
// Strategy fixed with Time period by Kirk65.
// I am using this UT bot with 2 hours time frame with god resultss. Alert with "Once per bar" and stoploss 1.5%. If Alerts triggered and price goes against Alert. Stoploss will catch it. Wait until next Alert.
// While @Yo_adriiiiaan mentions it works best on a 4-hour timeframe or above, witch is a lot less risky, but less profitable. 

testStartYear = input(2019, "BACKTEST START YEAR", minval = 1980, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12)
testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod = true

SOURCE = input(hlc3)
RSILENGTH = input(14, title = "RSI LENGTH")
RSICENTERLINE = input(52, title = "RSI CENTER LINE")
MACDFASTLENGTH = input(7, title = "MACD FAST LENGTH")
MACDSLOWLENGTH = input(12, title = "MACD SLOW LENGTH")
MACDSIGNALSMOOTHING = input(12, title = "MACD SIGNAL SMOOTHING")
a = input(10, title = "Key Vaule. 'This changes the sensitivity'") 
SmoothK = input(3)
SmoothD = input(3)
LengthRSI = input(14)
LengthStoch = input(14)
RSISource = input(close) 
c = input(10, title="ATR Period")
xATR = atr(c)
nLoss = a * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
     iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
     iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
     iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? red: pos == 1 ? green : blue 
ema= ema(close,1)
above = crossover(ema,xATRTrailingStop )
below = crossover(xATRTrailingStop,ema)
buy = close > xATRTrailingStop and above 
sell = close < xATRTrailingStop and below
barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 
plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= green,textcolor = white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= red,textcolor = white, transp = 0, size = size.tiny)
barcolor(barbuy? green:na)
barcolor(barsell? red:na)
//alertcondition(buy, title='Buy', message='Buy')
//alertcondition(sell, title='Sell', message='Sell')

if (buy)
    strategy.entry("UTBotBuy",strategy.long, when=testPeriod)
if (sell)
    strategy.entry("UTBotSell",strategy.short, when=testPeriod)