Стратегия адаптивного трейлинг-стоп-лосса на основе индикатора ATR


Дата создания: 2023-10-19 12:42:26 Последнее изменение: 2023-10-19 12:42:26
Копировать: 0 Количество просмотров: 843
1
Подписаться
1617
Подписчики

Стратегия адаптивного трейлинг-стоп-лосса на основе индикатора ATR

Обзор

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

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

Эта стратегия использует среднее значение N циклов показателя ATR, умноженное на одно кратное число, как базовый стоп-дистанцию. Чем больше значение ATR, тем больше рыночная волатильность, тем шире устанавливается стоп-дистанция; чем меньше значение ATR, тем меньше устанавливается стоп-дистанция.

В частности, стратегия использует следующую ключевую логику:

  1. Вычислить значение ATR для периода ATR ((nATRPeriod)).

  2. На основе ATR-значений умножьте на кратное число ((nATRMultip) и получите базовое расстояние стоп-лосса nLoss.

  3. Обновление стоп-линии xATRTrailingStop на основе текущих высоких, низких и предыдущих циклов.

  4. Если текущая низкая точка вызвала предыдущую линию стоп-порога, то стоп-порог перемещается на расстояние nLoss ниже низкой точки.

  5. Если текущий пик вызывает предыдущий цикл стоп-линии, то стоп-линия перемещается ниже, на расстояние nLoss выше пика.

  6. Если стоп-линия не была активирована, то она должна быть скорректирована в зависимости от расстояния от стоп-линии.

  7. Добавление опционального расстояния защиты от теневой линии для дальнейшей оптимизации стоп-линии.

  8. Нарисуйте орбиту Брин для визуализации верхней и нижней границ стоп-линий.

  9. Определение направления позиции в зависимости от цвета стоп-линии

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

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

Эта стратегия имеет следующие преимущества:

  1. Используя индикатор ATR для динамической корректировки стоп-дистанции, можно адаптироваться к различным условиям рынка.

  2. Параметры множителя могут быть настроены, чтобы обеспечить гибкую настройку стоп-расстояния.

  3. Присоединяется к орбите Брин-пояса, образуя верхнюю и нижнюю границы визуализации стоп-линии.

  4. Выберите защиту от теней, чтобы избежать випсава при колебаниях.

  5. Это может быть использовано для отслеживания стоп-лосса и максимального вывода выигрышных позиций.

  6. Стратегическая мысль ясна и понятна, параметры не так легко оптимизировать.

  7. Используется в различных сортах и циклах, имеет широкое применение.

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

Однако есть и другие риски, о которых следует помнить:

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

  2. Слишком большое множительное также может привести к слишком широкому стоп-диапазону, увеличивая риск потери.

  3. Защита от теневой линии при усилении толчков может привести к чрезмерному ослаблению стоп-линий.

  4. Не учитывая правила входа, нельзя использовать их в качестве стратегии Entries/Exits.

  5. Необходимо многократно тестировать параметры оптимизации для различных сортов и циклов.

  6. Прорыв стоп-лосса может привести к увеличению убытков и требует эффективного управления средствами.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

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

  2. Настройка параметров множителей, чтобы найти баланс между расстоянием остановки и вероятностью остановки.

  3. Оптимизация параметров цикла защиты от теней, предотвращая whipsaw.

  4. Попытка включить входные условия на основе стоп-лосса, чтобы сделать это стратегией Entries/Exits.

  5. Добавить индикатор определения тренда и скорректировать стоп-ранч в соответствии с трендом.

  6. В сочетании с теорией волны, в зависимости от положения волны корректируется расстояние остановки.

  7. Добавление контроля позиций, ограничение одиночных потерь.

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

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

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

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 13/10/2014
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
// Modified by River to add Bands, and change color of Trailing Stop and add Wick Protection. Now turned into a Strategy for Backtesting Purposes.
// After backtesting, it seems clear that it functions well as a Trailing Stop, but not as an Entry/Exit strategy.
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stop Bands Strategy[R] ", overlay = true)
nATRPeriod = input(5)
nATRMultip = input(4)
length = input(30, "#Periods of Wick Protection", minval=2)
bType = input(0, "Max [1] or Avg Wick Protection [0]", minval=0, maxval=1)
avgupperwick = sma(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
maxupperwick = highest(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
avglowerwick = sma(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
maxlowerwick = highest(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
upperwick = bType == 0 ? avgupperwick : maxupperwick
lowerwick = bType == 0 ? avglowerwick : maxlowerwick
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR 
upperband = iff(high < nz(upperband[1], 0) and high[1] < nz(upperband[1], 0), min(nz(upperband[1]), high + nLoss + upperwick), high + nLoss + upperwick)
lowerband = iff(low > nz(lowerband[1], 0) and low[1] > nz(lowerband[1], 0), max(nz(lowerband[1]), low - nLoss - lowerwick), low - nLoss - lowerwick) 
xATRTrailingStop = iff(low > nz(xATRTrailingStop[1], 0) and low[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), low - nLoss - lowerwick),
 iff(high < nz(xATRTrailingStop[1], 0) and high[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), high + nLoss + upperwick), 
//                        iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), high + nLoss + upperwick, iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), low - nLoss - lowerwick,0))))
 iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), upperband[1], iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), lowerband[1],0))))

pos =	iff(close[1] > nz(xATRTrailingStop[1], 0) and low <= nz(xATRTrailingStop[1], 0), 1,
 iff(close[1] < nz(xATRTrailingStop[1], 0) and high >= nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == 1 ? red: pos == -1 ? green : blue 
plot(upperband, color=red, title="ATR Upper")
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop", linewidth=2)
plot(lowerband, color=green, title="ATR Lower")

longCondition = (color == green and color[1] == red)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (color == red and color[1] == green)
if (longExitCondition)
    strategy.close("Long")

shortCondition = (color == red and color[1] == green)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (color == green and color[1] == red)
if (shortexitCondition)
    strategy.close("Short")