
Стратегия, названная “Стратегия отслеживания трендов ATR”, представляет собой стратегию торговли, которая отслеживает тренд, основанный на средней реальной величине колебаний (ATR) и использует стандартный канал отклонения для определения времени выхода на рынок. Эта стратегия применима к финансовым продуктам с заметной тенденцией, таким как фондовые индексы, иностранные валюты, товары и т. Д.
Стратегия использует ATR-индикатор для установления цены стоп-лосса. ATR-индикатор отражает степень колебаний рынка и может динамически устанавливать стоп-дистанцию. Стратегия вычисляет ATR-значение, введя ATR-циклы и множители, а затем умножает множители как стоп-дистанцию.
ATR线 = 前一日ATR线 ± nLoss(nLoss = nATRMultip * ATR值)
若收盘价 > ATR线,ATR线上调至收盘价 - nLoss
若收盘价 < ATR线,ATR线下调至收盘价 + nLoss
Таким образом, ATR-линия может динамически корректироваться в зависимости от колебаний цен, что позволяет осуществлять трендовые стоп-лосы.
Помимо остановки ATR, стратегия использует стандартный дефицитный канал для определения времени выхода на рынок. Формула расчета стандартного дефицитного канала:
中线 = ATR止损线
上轨 = 中线 + n倍标准差
下轨 = 中线 - n倍标准差
Когда цена спускается вверх и пробивает середину, делайте больше; когда цена спускается вверх и пробивает середину, делайте больше.
Наибольшее преимущество этой стратегии заключается в том, что использование показателя ATR в качестве инструмента для остановки убытков позволяет динамически регулировать расстояние от остановки убытков в зависимости от степени волатильности рынка, обеспечивает отслеживание тенденций и эффективное управление рисками.
Кроме того, в сочетании со стандартной дифференциальной канальной оценкой времени выхода на рынок, можно избежать частого открытия позиций из-за небольших колебаний цен.
Основной риск этой стратегии заключается в том, что слишком большое стоп-диапазон не позволяет эффективно контролировать риск; стоп-диапазон, превышающий час, подвержен рыночному шуму. В соответствии с этим риском можно скорректировать циклы ATR и кратность ATR, чтобы найти оптимальную комбинацию параметров.
Другой риск заключается в том, что неправильная настройка параметров стандартно-дифференцированного канала может привести к слишком высокой или слишком низкой частоте открытия позиций. Оптимальные параметры могут быть найдены путем оптимизации параметров.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация циклов ATR и множителей. Регулирование этих двух параметров позволяет получить лучший эффект сдерживания убытков.
Оптимизация параметров каналов с отклонениями от стандарта. Оптимизация параметров каналов, получение лучшего эффекта ввода на рынок.
Добавление фильтров для других показателей. Можно добавить такие показатели, как движущиеся средние, K-линии, которые помогут определить направление тренда и повысить уровень прибыли.
Оптимизация логики открытия позиции и мирное положение. Можно установить, что цена будет открываться только после повторного подтверждения формы K-линии, когда она достигнет каналов стандартной разницы.
Эта стратегия основана на показателях 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)