Основная идея этой стратегии заключается в использовании динамической скользящей средней для отслеживания тренда, установке стоп-лосса и получении прибыли и сочетании методов свечей Хайкина Аши для оценки длинного / короткого сигнала.
Стратегия сначала рассчитывает индикатор ATR, а затем объединяет входный источник цены и параметры для вычисления динамической скользящей средней. Долгие / короткие сигналы генерируются, когда цена пересекает динамическую скользящую среднюю / ниже. Между тем, позиции стоп-лосса и прибыли устанавливаются для отслеживания изменений цен в режиме реального времени.
В частности, индикатор ATR и параметр nLoss сначала рассчитываются. Затем цена текущего периода и позиция стоп-лосса предыдущего периода сравниваются, чтобы обновить линию стоп-лосса. Когда цена проходит через линию стоп-лосса предыдущего периода, генерируются длинные/короткие сигналы pos и соответствующие цвета. Когда срабатывают торговые сигналы, на графике изображаются знаки стрелки. Наконец, позиции закрываются на основе логики стоп-лосса/прибыли.
Наибольшее преимущество этой стратегии заключается в использовании динамической скользящей средней для отслеживания изменений цен в режиме реального времени. Это лучше улавливает тенденции, чем традиционные фиксированные скользящие средние, и снижает шансы на остановку потери. Кроме того, сочетание стоп-лосса на основе ATR позволяет гибко корректировать позицию стоп-лосса на основе волатильности рынка для эффективного контроля рисков.
Основной риск этой стратегии заключается в том, что цена может значительно увеличиться или уменьшиться, вызывая ложные сигналы при остановке потери.
Решения включают оптимизацию скользящего среднего периода, корректировку коэффициента ATR и стоп-лосса для снижения вероятности ложных сигналов. Дополнительные фильтры могут быть добавлены, чтобы избежать чрезмерной плотности сделок.
Стратегия может быть оптимизирована в следующих аспектах:
Испытать различные типы и периоды скользящих средних для поиска оптимальных комбинаций параметров
Оптимизировать параметр периода ATR для сбалансированной чувствительности к остановке потерь
Добавить дополнительные фильтры и индикаторы для улучшения качества сигнала
Корректировать значения стоп-лосса/прибыли для оптимизации соотношения риска и вознаграждения
Основная идея этой стратегии заключается в использовании динамической скользящей средней для отслеживания изменений цен в режиме реального времени, с использованием индикатора ATR для динамического установления позиций стоп-лосса, строго контролируя риск при отслеживании тенденций.
/*backtest start: 2022-11-23 00:00:00 end: 2023-11-05 05:20:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT","stocks":0}] */ //@version=5 strategy(title='UT Bot v5', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) //CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. //Edited and converted to @version=5 by SeaSide420 for Paperina // Inputs AllowBuy = input(defval=true, title='Allow Buy?') AllowSell = input(defval=false, title='Allow Sell?') h = input(false, title='Signals from Heikin Ashi Candles') //revclose = input(defval=true, title='Close when reverse signal?') Price = input(defval=open, title='Price Source (recommended OPEN to avoid repainting)') smoothing = input.string(title="Moving Average Type", defval="HMA", options=["SMA", "EMA", "WMA", "HMA"]) MA_Period = input(2, title='This changes the MAPeriod') a = input.float(1, title='This changes the sensitivity',step=0.1) c = input(11, title='ATR Period') TakeProfit = input.int(defval=50000, title='Take Profit ($)', minval=1) StopLoss = input.int(defval=50000, title='Stop Loss ($)', minval=1) xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, Price, lookahead=barmerge.lookahead_off) : Price xATRTrailingStop = 0.0 iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1 xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ma_function(src, MA_Period) => switch smoothing "SMA" => ta.sma(src, MA_Period) "EMA" => ta.ema(src, MA_Period) "WMA" => ta.wma(src, MA_Period) => ta.hma(src, MA_Period) thema = ma_function(src, MA_Period) above = ta.crossover(thema, xATRTrailingStop) below = ta.crossover(xATRTrailingStop, thema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop plot(thema,title="The M.A.",color=color.green,linewidth=2) plot(xATRTrailingStop,title="The M.A.",color=color.red,linewidth=2) plotshape(buy, title = "Buy", text = "Buy", style = shape.labelup, location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny) plotshape(sell, title = "Sell", text = "Sell", style = shape.labeldown, location = location.abovebar, color= color.red, textcolor = color.white, size = size.tiny) barcolor(barbuy ? color.green : na) barcolor(barsell ? color.red : na) strategy.close_all(when=strategy.openprofit>TakeProfit,alert_message="Close- TakeProfit", comment = "TP") strategy.close_all(when=strategy.openprofit<StopLoss-(StopLoss*2),alert_message="Close- StopLoss", comment = "SL") strategy.close("buy", when = sell and AllowSell==false , comment = "close buy") strategy.close("sell", when = buy and AllowBuy==false, comment = "close sell") strategy.entry("buy", strategy.long, when = buy and AllowBuy) strategy.entry("sell", strategy.short, when = sell and AllowSell)