Эта стратегия генерирует торговые сигналы, когда цена пересекает EMA, и использует ATR в качестве динамического стоп-лосса для управления рисками.
Ключевая логика:
Вычислить ATR как линию остановки потерь, значение ATR определяет расстояние остановки nLoss
Источник цены - цена закрытия по умолчанию, используйте Heikin Ashi close, если включен вариант Heikin Ashi h
xATRTrailingStop отслеживает динамическую линию остановки потери на основе сравнения цен с предыдущей остановкой
Позиция pos - 1 для длинной, когда цена пересекает линию стоп-лосса, -1 для короткой, когда пересекает ниже, иначе 0
Сигналы пересечения EMA, выше EMA - сигнал покупки, ниже - сигнал продажи
Вход в сделки по сигналам покупки/продажи, выход по противоположным сигналам
Цветные полосы на основе позиции, сигналов маркировки и линий остановки потери
Эта стратегия отслеживает тенденции с динамическими остановками на основе ATR. Она может выявлять тенденции и эффективно управлять рисками.
Преимущества:
Динамическая остановка на базе ATR адаптируется к волатильности рынка
Фильтр EMA уменьшает ложные сигналы от шума
Факультативный фильтр Heikin Ashi для шума и определения тренда
Clear long/short position avoids whipsaws from trailing stop order Перевод с английского языка
Визуальные средства, такие как линии, этикетки и окраска
Простая и понятная логика для модификации
Настраиваемый период ATR и мультипликатор для разных рынков
В целом, благодаря сочетанию следующих тенденциям и динамических остановок, эта стратегия может улавливать тенденции и хорошо управлять рисками для свинговой торговли.
Некоторые риски следует учитывать:
Сигналы EMA могут отставать от краткосрочных движений
Частые триггеры стоп-лосса возможны на нестабильных рынках
Не учитывается расходы, такие как комиссии
Отсутствие контроля размеров позиций
Производительность зависит от настройки параметров
Риск сбоев на различных рынках
Требует наблюдения и вмешательства
Риски могут быть уменьшены путем оптимизации параметров, добавления фильтров, правильного размещения позиций, мониторинга производительности и вмешательства при необходимости.
Некоторые способы улучшения стратегии:
Корректировка параметров ATR для различных рынков
Испытать другие скользящие средние для фильтрации сигналов
Добавить индикаторы фильтра тренда для повышения вероятности
Внедрить ограничения размеров позиций
Добавить условия входа, такие как объем, расстояние от MA
Включите такие расходы, как комиссии, в остановки
Оптимизируйте время входа и выхода с помощью большего количества сигналов
Внедрить снятие прибыли или остановки отслеживания
Автоматическая оптимизация параметров
Объединив больше методов ввода, вывода, фильтров и настройки параметров, стратегия может быть еще более укреплена.
Эта стратегия прекрасно сочетает в себе динамические остановки и тенденции. Благодаря эффективным остановкам, плавному отслеживанию тренда, простоте использования и настройке, она подходит для трендов свинговой торговли. Но требуется надлежащее управление рисками, мониторинг и настройка параметров. При правильном применении на трендовых рынках могут быть достигнуты хорошие результаты. В целом она обеспечивает простой и практичный подход к объединению трендовой торговли и управления рисками.
/*backtest start: 2022-10-25 00:00:00 end: 2023-10-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="UT Bot Strategy", overlay = true) //CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. // Inputs a = input(1, title = "Key Vaule. 'This changes the sensitivity'") c = input(10, title = "ATR Period") h = input(false, title = "Signals from Heikin Ashi Candles") xATR = atr(c) nLoss = a * xATR src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close xATRTrailingStop = 0.0 xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss), iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss))) pos = 0 pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1, iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue ema = ema(src,1) above = crossover(ema, xATRTrailingStop) below = crossover(xATRTrailingStop, ema) buy = src > xATRTrailingStop and above sell = src < xATRTrailingStop and below barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny) plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red, textcolor = color.white, transp = 0, size = size.tiny) barcolor(barbuy ? color.green : na) barcolor(barsell ? color.red : na) strategy.entry("long", true, when = buy) strategy.entry("short", false, when = sell)