Эта стратегия использует два индикатора, ATR (средний истинный диапазон) и EMA (экспоненциальный скользящий средний), для динамической корректировки уровня получения прибыли и остановки потерь, чтобы адаптироваться к волатильности рынка. Основная идея стратегии заключается в использовании индикатора ATR для измерения волатильности рынка и установки уровня получения прибыли и остановки потерь на основе величины волатильности. В то же время индикатор EMA используется для определения направления торговли. Когда цена превышает EMA, открывается длинная позиция, а когда цена превышает EMA, открывается короткая позиция. Эта стратегия может автоматически корректировать уровень получения прибыли и остановки потерь в соответствии с изменениями волатильности рынка, тем самым достигая цели динамического контроля риска.
Эта стратегия использует индикаторы ATR и EMA для динамической корректировки уровней получения прибыли и остановки убытков для адаптации к изменениям волатильности рынка, используя индикатор EMA для определения направления торговли. Стратегия обладает сильной адаптивностью и возможностями следования трендам, но может столкнуться с определенными рисками в настройках параметров, колеблющихся рынках и изменении тренда. В будущем производительность стратегии может быть улучшена путем внедрения более технических индикаторов, оптимизации алгоритмов получения прибыли и остановки убытков, оптимизации параметров и добавления модулей управления позициями.
/*backtest start: 2024-04-27 00:00:00 end: 2024-05-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}] */ //@version=5 strategy(title='UT MB&SS Bot', overlay=true) // Inputs a = input(1, title='Key Value. \'This changes the sensitivity\'') c = input(10, title='ATR Period') h = input(false, title='Signals from Heikin Ashi Candles') stoploss = input(2.0, title='Stop Loss (ATR Multiples)') xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close var xATR_trailing_stop = 0.0 iff_1 = src > nz(xATR_trailing_stop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATR_trailing_stop[1], 0) and src[1] < nz(xATR_trailing_stop[1], 0) ? math.min(nz(xATR_trailing_stop[1]), src + nLoss) : iff_1 xATR_trailing_stop := src > nz(xATR_trailing_stop[1], 0) and src[1] > nz(xATR_trailing_stop[1], 0) ? math.max(nz(xATR_trailing_stop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATR_trailing_stop[1], 0) and src < nz(xATR_trailing_stop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATR_trailing_stop[1], 0) and src > nz(xATR_trailing_stop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ema = ta.ema(src, 1) above = ta.crossover(ema, xATR_trailing_stop) below = ta.crossover(xATR_trailing_stop, ema) buy = src > xATR_trailing_stop and above sell = src < xATR_trailing_stop and below barbuy = src > xATR_trailing_stop barsell = src < xATR_trailing_stop plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) barcolor(barbuy ? color.green : na) barcolor(barsell ? color.red : na) stop_level = pos == 1 ? xATR_trailing_stop - stoploss * xATR : xATR_trailing_stop + stoploss * xATR stop_level := math.max(stop_level, nz(stop_level[1])) if pos == 1 strategy.exit('Exit Long', 'UT Long', stop=stop_level) else if pos == -1 strategy.exit('Exit Short', 'UT Short', stop=stop_level) if buy strategy.entry("Enter Long", strategy.long) else if sell strategy.entry("Enter Short", strategy.short)