Тенденция ATR по стратегии, основанной на канале стандартного отклонения

Автор:Чао Чжан, Дата: 2024-01-05 16:34:27
Тэги:

img

Обзор

Эта стратегия под названием ATR Trend Following Strategy - это стратегия торговли, основанная на среднем истинном диапазоне (ATR) для остановки потерь и стандартного отклонения для сигналов входа.

Логика торговли

Стратегия использует индикатор ATR для установки цены стоп-лосса. ATR отражает волатильность рынка и может использоваться для динамического установления расстояния стоп-лосса. Стратегия рассчитывает значение ATR на основе ввода пользователем периода ATR и мультипликатора и использует значение ATR, умноженное на мультипликатор, как расстояние стоп-лосса. В частности, формула расчета задержки ATR:

ATR Line = Prior ATR Line ± nLoss (nLoss = nATRMultip * ATR value)  

If close > ATR Line, adjust ATR Line up to close - nLoss
If close < ATR Line, adjust ATR Line down to close + nLoss

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

В дополнение к остановке ATR, стратегия также использует канал стандартного отклонения для определения сигналов входа.

Middle Line = ATR Trailing Stop Line   
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation

Иди длинным, когда цена проходит среднюю линию вверх. Иди коротким, когда цена проходит среднюю линию вниз.

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

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

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

Риски и решения

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

Другим риском являются ненадлежащие стандартные отклонения параметров канала, что приводит к чрезмерно высокой / низкой частоты входа.

Возможности для расширения

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

  1. Оптимизировать период ATR и мультипликатор для достижения лучшего эффекта стоп-лосса.

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

  3. Добавить другие индикаторы для фильтрации, например, скользящую среднюю величину, модели свечей и т.д., чтобы помочь оценить направление тренда и повысить рентабельность.

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

Резюме

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
strategy(title="Average True Range Strategy", overlay = true)
nATRPeriod = input(11) //Hur många perioder ATR är på
nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
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 = 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))) 

stdev3 = 14*stdev(xATR, nATRPeriod)
band1 = xATRTrailingStop+stdev3 //Översta stdev bandet
band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet


// Datum och tid
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2013, title = "From Year", minval = 2013)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start 
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest slut
startTimeOk()  => true
initial_capital = 100000

take = close > xATRTrailingStop

if( startTimeOk() ) and (pos == 1)
//if (pos == 1) 
    strategy.entry("Long", strategy.long, comment = "KOP")
    strategy.exit("Long", when = take)
   
if( startTimeOk() ) and (pos == -1)
//if (pos == -1)
    strategy.entry("Short", strategy.short, comment = "SALJ")
   
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj
plot(band1, color=red)
plot(band2, color=blue)



Больше