Estrategia de stop loss parabólico basada en el indicador ATR


Fecha de creación: 2023-09-13 15:53:00 Última modificación: 2023-09-13 15:53:00
Copiar: 0 Número de Visitas: 792
1
Seguir
1166
Seguidores

Esta estrategia se llama estrategia de parálisis de la parálisis de la parálisis basada en el indicador ATR. La estrategia utiliza el indicador ATR para ajustar la velocidad de contracción de la curva de parálisis de la parálisis de la parálisis para que pueda adaptarse a los cambios en la volatilidad del mercado.

El factor de aceleración de la parada de la línea de parálisis tradicional es invariable y no puede hacer frente al aumento de la volatilidad. Esta estrategia acelera la velocidad de contracción de la línea de parálisis a medida que aumenta el valor de ATR, de modo que cuando aumenta la volatilidad, la curva de parada puede acercarse más rápidamente al precio y controlar el riesgo de manera efectiva.

Concretamente, la estrategia determina la dirección de la tendencia del precio, calcula un factor de aceleración de adaptación en función del valor de ATR y, de acuerdo con esto, traza la curva de parada de pérdidas de la línea de parálisis. Cuando el precio rompe la línea de parada, ejecuta la posición de parada de pérdidas.

La ventaja de esta estrategia es que permite que los parárquicos tradicionales se ajusten dinámicamente en función de la volatilidad del mercado. Sin embargo, los parámetros de ATR necesitan ser optimizados y los parárquicos son demasiado sensibles para ser rotados.

En general, la adaptación al stop loss es importante para proteger las ganancias y controlar el riesgo. Los operadores deben elegir los indicadores de stop loss adecuados en función de las condiciones del mercado y realizar pruebas y optimización de los parámetros para que la estrategia de stop loss tenga la máxima eficacia.

Código Fuente de la Estrategia
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATR Parabolic SAR Strategy [QuantNomad]", shorttitle="ATR PSAR Strategy [QN]", overlay=true, default_qty_type = strategy.percent_of_equity,  default_qty_value = 100)

atr_length = input(14)
start      = input(0.02)
increment  = input(0.02)
maximum    = input(0.2)
entry_bars = input(1, title = "Entry on Nth trend bar") 

atr = atr(atr_length)

atr := na(atr) ? tr : atr

psar        = 0.0 // PSAR
af          = 0.0 // Acceleration Factor
trend_dir   = 0   // Current direction of PSAR
ep          = 0.0 // Extreme point
trend_bars  = 0

sar_long_to_short = trend_dir[1] == 1  and close <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1] // PSAR switches from short to long

trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long

// Calculate trend direction
trend_dir    :=  barstate.isfirst[1] and close[1]  > open[1] ?  1 : 
                 barstate.isfirst[1] and close[1] <= open[1] ? -1 : 
                 sar_long_to_short ? -1 : 
                 sar_short_to_long ?  1 : nz(trend_dir[1])

trend_bars := sar_long_to_short ? -1 : 
              sar_short_to_long ?  1 : 
              trend_dir ==  1   ? nz(trend_bars[1]) + 1 : 
              trend_dir == -1   ? nz(trend_bars[1]) - 1 : 
              nz(trend_bars[1])

// Calculate  Acceleration Factor
af := trend_change ? start : 
   (trend_dir == 1 and high > ep[1]) or  
   (trend_dir == -1 and low < ep[1]) ? 
   min(maximum, af[1] + increment) : 
   af[1]

// Calculate extreme point
ep := trend_change and trend_dir == 1 ? high :  
   trend_change and trend_dir == -1 ? low : 
   trend_dir == 1 ? max(ep[1], high) : 
   min(ep[1], low)

// Calculate PSAR
psar :=  barstate.isfirst[1] and close[1]  > open[1] ? low[1]  : 
         barstate.isfirst[1] and close[1] <= open[1] ? high[1] : 
         trend_change ? ep[1] :    
         trend_dir == 1 ? psar[1] + af * atr : 
                          psar[1] - af * atr

plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red,  linewidth = 2)


// Strategy 
strategy.entry("Long",  true,  when = trend_bars ==  entry_bars)
strategy.entry("Short", false, when = trend_bars == -entry_bars)