Estrategia dinámica de ATR para detener pérdidas traseras

El autor:¿ Qué pasa?, Fecha: 2023-12-11 14:24:18
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el mecanismo dinámico de suspensión de pérdidas diseñado con el indicador ATR para ajustar la suspensión de pérdidas en tiempo real, garantizando al mismo tiempo una suspensión efectiva de pérdidas para maximizar las ganancias.

Estrategia lógica

La estrategia utiliza el período ATR rápido 5 y el período ATR lento 10 para construir un stop loss de seguimiento dinámico de doble capa. Cuando el precio corre en una dirección favorable, la capa rápida activará primero el stop de seguimiento para apretar el stop loss; cuando hay un retroceso a corto plazo, la capa lenta de stop loss puede evitar el stop out prematuro. Mientras tanto, el cruce entre las capas rápida y lenta sirve como señal comercial.

Específicamente, la distancia de stop loss de la capa rápida es 0,5 veces el ATR de 5 períodos, y la distancia de stop loss de la capa lenta es 3 veces el ATR de 10 períodos. Se genera una señal de compra cuando la capa rápida se rompe por encima de la capa lenta, y se genera una señal de venta cuando la capa rápida se rompe por debajo de la capa lenta. La línea de stop loss también se actualiza en tiempo real y se traza por debajo de la curva de precios.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede ajustar dinámicamente la posición de stop loss para maximizar las ganancias al tiempo que garantiza una stop loss efectiva.

Además, el diseño de ATR de doble capa equilibra la sensibilidad de la pérdida de parada.

Análisis de riesgos

El riesgo principal de esta estrategia radica en si el ajuste de la distancia de stop loss es razonable. Si el multiplicador ATR se establece demasiado alto, el rango de stop loss no se mantendrá al día con el movimiento del precio. Si el multiplicador ATR es demasiado pequeño, es propenso a ser detenido por ruidos a corto plazo. Por lo tanto, los parámetros deben ajustarse de acuerdo con las características de diferentes variedades.

Además, en un mercado de rango, el valor ATR es menor y la línea de stop loss está más cerca, lo que puede llevar fácilmente a un stop loss frecuente.

Direcciones de optimización

Se pueden intentar diferentes combinaciones de parámetros del ciclo ATR para encontrar el equilibrio óptimo. También se puede considerar la combinación con otros indicadores, como los indicadores de tendencia para juzgar la etapa del mercado, con el fin de ajustar dinámicamente el tamaño del multiplicador ATR.

También es posible estudiar alternativas al indicador ATR, sustituyendo ATR por DKVOL, HRANGE o ATR Percentage, etc. puede lograr un mejor efecto de stop loss.

Resumen de las actividades

Esta estrategia diseña un mecanismo de seguimiento dinámico de doble capa basado en el indicador ATR para maximizar las ganancias y evitar pérdidas de parada excesivas. Es adecuado para usuarios que tienen requisitos más altos para las pérdidas de parada.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ATR Trailing Stop Strategy by ceyhun", overlay=true)

/////////notes////////////////////////////////////////
// This is based on the ATR trailing stop indicator //
// width addition of two levels of stops and        //
// different interpretation.                        //
// This is a fast-reacting system and is better     //
// suited for higher volatility markets             //
//////////////////////////////////////////////////////

SC = input(close, "Source", input.source)

// Fast Trail //
AP1 = input(5, "Fast ATR period", input.integer)  // ATR Period
AF1 = input(0.5, "Fast ATR multiplier", input.float)  // ATR Factor
SL1 = AF1 * atr(AP1)  // Stop Loss
Trail1 = 0.0
Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1)))

// Slow Trail //
AP2 = input(10, "Slow ATR period", input.integer)  // ATR Period
AF2 = input(3, "Slow ATR multiplier", input.float)  // ATR Factor
SL2 = AF2 * atr(AP2)  // Stop Loss
Trail2 = 0.0
Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0) and SC[1] < nz(Trail2[1], 0), min(nz(Trail2[1], 0), SC + SL2), iff(SC > nz(Trail2[1], 0), SC - SL2, SC + SL2)))

// Bar color for trade signal //
Green = Trail1 > Trail2 and close > Trail2 and low > Trail2
Blue = Trail1 > Trail2 and close > Trail2 and low < Trail2
Red = Trail2 > Trail1 and close < Trail2 and high < Trail2
Yellow = Trail2 > Trail1 and close < Trail2 and high > Trail2

// Signals //
Bull = barssince(Green) < barssince(Red)

Buy = crossover(Trail1, Trail2)
Sell = crossunder(Trail1, Trail2)

TS1 = plot(Trail1, "Fast Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.blue : color.yellow, linewidth=2, display=display.none)
TS2 = plot(Trail2, "Slow Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.green : color.red, linewidth=2)
fill(TS1, TS2, Bull ? color.new(color.green, 90) : color.new(color.red, 90))

plotcolor = input(true, "Paint color on chart", input.bool)

bcl = iff(plotcolor == 1, Blue ? color.blue : Green ? color.lime : Yellow ? color.yellow : Red ? color.red : color.white, na)
barcolor(bcl)

if Buy
    strategy.entry("Buy", strategy.long, comment="Buy")

if Sell
    strategy.close("Buy")


Más.