Динамическая стратегия трейлинг-стоп-лосс


Дата создания: 2023-10-09 16:59:57 Последнее изменение: 2023-10-09 16:59:57
Копировать: 0 Количество просмотров: 1077
1
Подписаться
1617
Подписчики

Обзор

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

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

Эта стратегия реализуется в основном через следующие шаги:

  1. Для вычисления показателя ATR, цикл ATR устанавливается параметром nATRPeriod, по умолчанию 5;

  2. Стоп-линия, рассчитанная на основе значения ATR, устанавливается параметром nATRMultip, который по умолчанию в 3,5 раза превышает ATR;

  3. При росте цены акции, если она выше предыдущей линии остановки, она повышается до цены акции минус стоп-магниту; при падении цены акции, если она ниже предыдущей линии остановки, она понижается до цены акции плюс стоп-магниту;

  4. Оценить, пробилась ли цена акций через линию стоп-лосса, которая дает сигнал купить или продать;

  5. В зависимости от сигнала прорыва стоп-линии, вступать в позиции с лишним или свободным положением, а при повторном касании стоп-линии - с нулевым положением.

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

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

  • Динамическая коррекция линий стоп-убытков, своевременная остановка, предотвращение расширения убытков
  • Спрятательная линия скорректирована более плавно, чтобы избежать преждевременной остановки
  • Используйте ATR, чтобы отразить последние колебания и вычислить более разумную величину остановки
  • Следить за стоп-линией, чтобы хорошо зафиксировать прибыль

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

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

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

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

  • Оптимизация циклических параметров ATR, чтобы изменения стоп-линий были ближе к колебаниям цен
  • Оптимизация параметров Stop Loss Ratio, чтобы сделать Stop Loss более обоснованным
  • Добавление дополнительных показателей для определения времени входа фильтра
  • Продолжайте занимать позиции только в том случае, если есть явная тенденция к росту цен на акции.
  • Рассматривается вопрос о включении в механизм повторного входа, чтобы избежать возможности участия после остановки акций, которая, как ожидается, продолжит расти.

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

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

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

//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
  
nATRPeriod      = input(5, "ATR Period")
nATRMultip      = input(3.5, "ATR Multiplier")
useShorts       = input(false, "Test w/Shorts?")
daysBackMax     = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
xATRTrailingStop := 
 iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
  iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) 
                       
pos = na 
pos := 
 iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 
  iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
        
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))

buy     = crossover(close, xATRTrailingStop)
sell    = crossunder(close, xATRTrailingStop)

strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)