Estrategia de trading dinámico con stop loss


Fecha de creación: 2023-10-09 16:59:57 Última modificación: 2023-10-09 16:59:57
Copiar: 0 Número de Visitas: 1077
1
Seguir
1617
Seguidores

Descripción general

La estrategia se basa en el indicador de la amplitud real media (ATR) para establecer una línea de parada dinámica, rastrear los cambios en el precio de las acciones y bloquear al máximo las ganancias al mismo tiempo que se logra la protección de la parada.

Principio de estrategia

La estrategia se ejecuta principalmente a través de los siguientes pasos:

  1. Para calcular el indicador ATR, el ciclo ATR se establece por el parámetro nATRPeriod, que es el parámetro por defecto 5;

  2. La amplitud de parada se establece por el parámetro nATRMultip, 3.5 veces el ATR por defecto;

  3. Cuando el precio de las acciones sube, el límite de pérdidas se eleva al precio de las acciones menos el límite de pérdidas si está por encima del límite de pérdidas anterior; cuando el precio de las acciones baja, el límite de pérdidas se reduce al precio de las acciones más el límite de pérdidas si está por debajo del límite de pérdidas anterior;

  4. determinar si el precio de las acciones ha roto el límite de pérdidas, y si lo ha hecho, emitir una señal de compra o venta;

  5. En función de la señal de ruptura de la línea de detención, entrar en una posición de venta o de vacío y cerrar la posición al tocar la línea de detención de nuevo.

Cuando el precio de las acciones sube, la línea de detención se ajusta constantemente hacia arriba, lo que bloquea las ganancias; cuando el precio de las acciones baja, la línea de detención se ajusta constantemente hacia abajo, lo que detiene. El indicador ATR puede reflejar con mayor precisión la volatilidad del precio de las acciones, y ajustar la línea de detención de acuerdo con la dinámica de ATR, para evitar que la detención sea demasiado radical o conservadora.

Análisis de las ventajas

  • Ajuste dinámico de la línea de parada, para evitar la expansión de las pérdidas
  • Ajuste de la línea de parada más suave para evitar una parada prematura
  • Utiliza el indicador ATR para reflejar las últimas fluctuaciones y calcular un mayor margen de pérdida razonable
  • El seguimiento de las líneas de stop loss es una buena manera de fijar los beneficios.

Análisis de riesgos

  • La configuración de los parámetros del indicador ATR requiere precaución, ya que un ATR demasiado corto puede causar una línea de parada demasiado grande, y demasiado largo no puede reflejar la fluctuación de los precios a tiempo
  • Los parámetros de stop loss deben ajustarse a las fluctuaciones específicas de las acciones, ya sea demasiado grande o demasiado pequeño puede afectar la eficacia de la estrategia.
  • El seguimiento de los stop loss puede reducir el margen de ganancias y detener las pérdidas antes de que las acciones suban nuevamente.
  • Los cambios frecuentes de posición generan costos de transacción más altos.

Se puede optimizar los parámetros, ajustar los parámetros del ciclo ATR y la amplitud de parada para encontrar la combinación de parámetros óptima para equilibrar la parada y el seguimiento. También se puede combinar con otros indicadores técnicos para filtrar el tiempo de entrada al mercado y reducir la parada innecesaria.

Dirección de optimización

  • Optimización de los parámetros del ciclo ATR para que los cambios en la línea de parada estén más cerca de las fluctuaciones de los precios
  • Optimización de los parámetros de amplitud de parada para hacer que la parada sea más razonable
  • Añadir otros indicadores para determinar el tiempo de entrada de filtros
  • Las posiciones excedentarias sólo se abren cuando hay una clara tendencia al alza en el precio de las acciones
  • Considere la posibilidad de incorporarse a un mecanismo de reingreso para evitar la suspensión de la participación después de la pérdida de acciones que se espera que continúe aumentando

Resumir

La estrategia logra el bloqueo de pérdidas y ganancias en el proceso de tenencia mediante el método de ajuste dinámico de la línea de pérdidas de ATR. En comparación con la posición de parada fija, la estrategia se adapta mejor a la fluctuación del precio de las acciones, evitando que la línea de parada sea demasiado radical o conservadora. El indicador ATR hace que el ajuste de la línea de parada sea más específico.

Código Fuente de la Estrategia
/*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)