Тенденционная стратегия с динамическими остановками

Автор:Чао Чжан, Дата: 2023-11-01 13:46:28
Тэги:

img

Обзор

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

Как это работает

Ключевая логика:

  1. Вычислить ATR как линию остановки потерь, значение ATR определяет расстояние остановки nLoss

  2. Источник цены - цена закрытия по умолчанию, используйте Heikin Ashi close, если включен вариант Heikin Ashi h

  3. xATRTrailingStop отслеживает динамическую линию остановки потери на основе сравнения цен с предыдущей остановкой

  4. Позиция pos - 1 для длинной, когда цена пересекает линию стоп-лосса, -1 для короткой, когда пересекает ниже, иначе 0

  5. Сигналы пересечения EMA, выше EMA - сигнал покупки, ниже - сигнал продажи

  6. Вход в сделки по сигналам покупки/продажи, выход по противоположным сигналам

  7. Цветные полосы на основе позиции, сигналов маркировки и линий остановки потери

Эта стратегия отслеживает тенденции с динамическими остановками на основе ATR. Она может выявлять тенденции и эффективно управлять рисками.

Преимущества

Преимущества:

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

  2. Фильтр EMA уменьшает ложные сигналы от шума

  3. Факультативный фильтр Heikin Ashi для шума и определения тренда

  4. Clear long/short position avoids whipsaws from trailing stop order Перевод с английского языка

  5. Визуальные средства, такие как линии, этикетки и окраска

  6. Простая и понятная логика для модификации

  7. Настраиваемый период ATR и мультипликатор для разных рынков

В целом, благодаря сочетанию следующих тенденциям и динамических остановок, эта стратегия может улавливать тенденции и хорошо управлять рисками для свинговой торговли.

Риски

Некоторые риски следует учитывать:

  1. Сигналы EMA могут отставать от краткосрочных движений

  2. Частые триггеры стоп-лосса возможны на нестабильных рынках

  3. Не учитывается расходы, такие как комиссии

  4. Отсутствие контроля размеров позиций

  5. Производительность зависит от настройки параметров

  6. Риск сбоев на различных рынках

  7. Требует наблюдения и вмешательства

Риски могут быть уменьшены путем оптимизации параметров, добавления фильтров, правильного размещения позиций, мониторинга производительности и вмешательства при необходимости.

Оптимизация

Некоторые способы улучшения стратегии:

  1. Корректировка параметров ATR для различных рынков

  2. Испытать другие скользящие средние для фильтрации сигналов

  3. Добавить индикаторы фильтра тренда для повышения вероятности

  4. Внедрить ограничения размеров позиций

  5. Добавить условия входа, такие как объем, расстояние от MA

  6. Включите такие расходы, как комиссии, в остановки

  7. Оптимизируйте время входа и выхода с помощью большего количества сигналов

  8. Внедрить снятие прибыли или остановки отслеживания

  9. Автоматическая оптимизация параметров

Объединив больше методов ввода, вывода, фильтров и настройки параметров, стратегия может быть еще более укреплена.

Заключение

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


/*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)

Больше