
Esta estrategia, denominada estrategia de seguimiento de tendencias ATR, es una estrategia de negociación de seguimiento de tendencias basada en el stop loss basado en la amplitud de fluctuación real promedio (ATR) y el uso del canal de diferencia estándar para determinar el momento de entrada en el mercado. La estrategia se aplica a los productos financieros con una tendencia evidente, como índices de acciones, divisas y mercancías.
La estrategia utiliza el indicador ATR para establecer el precio de parada. El indicador ATR refleja la volatilidad del mercado y puede establecer la distancia de parada de forma dinámica. La estrategia calcula el valor de ATR ingresando el ciclo y el múltiplo de ATR, y luego multiplica el múltiplo como distancia de parada.
ATR线 = 前一日ATR线 ± nLoss(nLoss = nATRMultip * ATR值)
若收盘价 > ATR线,ATR线上调至收盘价 - nLoss
若收盘价 < ATR线,ATR线下调至收盘价 + nLoss
La línea ATR se ajusta dinámicamente a las fluctuaciones de los precios, lo que permite el seguimiento de la tendencia.
Además de los paros ATR, la estrategia también utiliza el canal de diferencia estándar para determinar el momento de la entrada en bolsa. La fórmula para calcular el canal de diferencia estándar es:
中线 = ATR止损线
上轨 = 中线 + n倍标准差
下轨 = 中线 - n倍标准差
Haga más cuando el precio rompa la línea media de abajo hacia arriba; haga más cuando el precio rompa la línea media de arriba hacia abajo.
La mayor ventaja de esta estrategia es que el uso del indicador ATR como herramienta de stop loss permite ajustar dinámicamente la distancia de stop loss en función de la volatilidad del mercado, permitiendo el seguimiento de la tendencia de stop loss y el control efectivo del riesgo.
Además, combinado con el análisis del canal de diferenciación estándar para determinar el momento de entrada en el mercado, se puede evitar abrir posiciones con frecuencia debido a las pequeñas fluctuaciones de precios.
El principal riesgo de esta estrategia es que la distancia de parada demasiado larga no puede controlar el riesgo de manera efectiva; la distancia de parada más larga es susceptible a ser interrumpida por el ruido del mercado. Para este riesgo, se pueden ajustar los ciclos de ATR y los múltiplos de ATR para buscar la combinación de parámetros óptima.
Otro riesgo es que los parámetros de canal de desviación estándar no se configuren correctamente, lo que puede conducir a una frecuencia de apertura de posición demasiado alta o demasiado baja. Se puede encontrar el parámetro óptimo mediante la optimización de parámetros.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimización de los ciclos ATR y multiplicadores. Ajustar estos dos parámetros puede obtener un mejor efecto de deterioro.
Optimización de los parámetros de canal de diferencia estándar. Optimización de los parámetros de canal para obtener un mejor efecto de entrada en el mercado.
Añadir filtros de otros indicadores. Se pueden agregar indicadores como promedios móviles, formas de K-line, para ayudar a determinar la dirección de la tendencia y mejorar la tasa de ganancia.
Optimización de la lógica de apertura de la posición y la paz de la posición. Se puede establecer que cuando el precio toque el canal de diferencia estándar, se abra la posición solo después de confirmar nuevamente la forma de la línea K.
Esta estrategia se basa en el indicador ATR para lograr el seguimiento de la tendencia y el stop loss, y ayuda a determinar el momento de la entrada en el mercado con el canal de diferencia estándar. La ventaja de la estrategia es que el control del riesgo de stop loss es bueno y es adecuado para el comercio de tendencias. El riesgo y la dirección de optimización también se analizan claramente.
/*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)