Esta estrategia llamada
La estrategia utiliza el indicador ATR para establecer el precio de stop loss. ATR refleja la volatilidad del mercado y se puede utilizar para establecer dinámicamente la distancia de stop loss. La estrategia calcula el valor de ATR basado en el período de entrada del usuario ATR y el multiplicador, y utiliza el valor de ATR multiplicado por el multiplicador como distancia de stop loss.
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
De esta manera, la línea ATR puede ajustarse dinámicamente en función de la fluctuación de los precios para alcanzar la tendencia después de la parada de pérdida.
Además de ATR trailing stop, la estrategia también utiliza el canal de desviación estándar para determinar las señales de entrada.
Middle Line = ATR Trailing Stop Line
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation
Ir largo cuando el precio rompe la línea media hacia arriba.
La mayor ventaja de esta estrategia es que utiliza el indicador ATR para establecer el stop loss dinámicamente en función de la volatilidad del mercado, lo que permite la tendencia después del stop loss y un control eficaz del riesgo.
Además, el uso del canal de desviación estándar para las señales de entrada evita la apertura frecuente de posiciones debido a pequeñas fluctuaciones de precios.
El principal riesgo es que si la distancia de stop loss es demasiado grande, no puede controlar el riesgo de manera efectiva, pero si es demasiado pequeña, puede ser fácilmente detenida por el ruido del mercado.
Otro riesgo son los parámetros de canal de desviación estándar inadecuados que conducen a una frecuencia de entrada demasiado alta/baja.
La estrategia puede mejorarse en los siguientes aspectos:
Optimizar el período ATR y el multiplicador para lograr un mejor efecto de stop loss.
Optimizar los parámetros del canal de desviación estándar para mejores señales de entrada.
Añadir otros indicadores para filtrar, por ejemplo, media móvil, patrones de velas, etc., para ayudar a juzgar la dirección de la tendencia y mejorar la rentabilidad.
Optimizar la lógica de entrada y salida, por ejemplo, abrir posiciones solo después de confirmar el patrón de candlestick cuando el precio alcanza las bandas de canal.
La estrategia alcanza la tendencia después de la parada de pérdida basada en el indicador ATR y utiliza el canal de desviación estándar para las señales de entrada. Sus ventajas se encuentran en una buena capacidad de control de riesgos para el comercio de tendencias. Los riesgos y las mejoras también se analizan claramente. La estrategia vale la pena más pruebas y optimización y tiene valor comercial práctico.
/*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)