Estrategia de stop loss dinámico basada en ATR


Fecha de creación: 2023-10-10 10:50:21 Última modificación: 2023-10-10 10:50:21
Copiar: 4 Número de Visitas: 936
1
Seguir
1617
Seguidores

Descripción general

La estrategia utiliza el indicador ATR para establecer un punto de parada dinámico y ajustar la posición de parada en función de la amplitud de la fluctuación del precio, para lograr el control del riesgo. La estrategia se basa en hacer múltiples entradas a través de la formación de la horquilla de oro en los días 5 y 20 de la EMA, y luego usar el indicador ATR para establecer la posición de parada y la posición de parada. La posición de parada se ajusta en función de la fluctuación del precio, lo que bloquea más ganancias.

Principio de estrategia

La estrategia primero juzga hacer más entradas cuando se forma un tenedor de oro a través de la EMA de 20 días sobre la EMA de 5 días. Después de la entrada, se utiliza el indicador ATR para calcular el múltiplo ATR de la distancia entre el precio de entrada y el precio actual, y se establece la posición de parada por debajo del precio de entrada en 1.5 ATR. Luego, a medida que el precio sube, se eleva gradualmente la posición de parada, y si el precio sube más de 3 ATR, se detiene parcialmente.

En concreto, la estrategia define las siguientes variables:

  • El precio de entrada
  • Stop_price: el precio de parada
  • El precio de venta es el precio de venta.
  • atr_down: la línea ATR inferior
  • atr_up: línea ATR superior
  • atr_current: línea ATR actual
  • Atr_ref: Valor de ATR

Después de la entrada, se calculaatr_ref como el valor actual del ATR,atr_div como el múltiplo de ATR entre el precio de entrada y el precio actual. Luego, segúnatr_div, se estableceatr_down,atr_current yatr_up. El precio de paradastop_price es 1.5ATR por debajo del precio de entrada.

A medida que el precio sube, se recalcula la posición correspondiente de atr_div y atr_up si el avg se lleva encima de atr_up, mediante la comparación de los precios actuales avg y atr_up, lo que eleva gradualmente la línea de parada y aumenta la ganancia de la posición.

Si el precio supera el precio de entrada de 3ATR, se cancela una parte de la posición para bloquear las ganancias, en este momento el símbolo de tookProfit se establece como verdadero. Si el precio continúa subiendo, se continúa elevando la posición de stop loss. Si se activa el stop loss, se juzga tookProfit, y si antes se había cancelado una parte de la posición, solo se cancela la posición restante, o se cancela toda la posición.

Ventajas estratégicas

  1. Utilizando el indicador ATR para ajustar dinámicamente la posición de parada, se puede establecer una distancia de parada razonable en función de la volatilidad del mercado.

  2. En el caso de pérdidas limitadas, sigue la tendencia de operar para cortar las ganancias. La línea de stop loss se elevará gradualmente para que las ganancias se acumulen.

  3. El mecanismo de parada parcial puede bloquear parte de las ganancias y reducir el riesgo. Después, la posición de parada sigue subiendo y las ganancias continúan funcionando.

Riesgo estratégico

  1. El indicador ATR no es sensible a las rupturas anormales y no puede responder a los riesgos que conllevan las brechas.

  2. Los indicadores EMA no pueden determinar si la tendencia se ha invertido y pueden entrar en nuevas posiciones si la tendencia se ha invertido.

  3. La probabilidad de revertir las pérdidas después de una parada parcial es mayor.

  4. La optimización de los parámetros es insuficiente, y el stop de 1.5 ATR y el stop de 3 ATR necesitan ser ajustados según las diferentes variedades.

Optimización de la estrategia

  1. Se puede considerar la inclusión de otros indicadores de stop loss, como el canal Donchian, para evitar el retraso en el indicador ATR.

  2. Se pueden probar diferentes indicadores de medias, o añadir el MACD para determinar la reversión de tendencias.

  3. Se puede optimizar la proporción y la frecuencia de las paradas parciales, que pueden tener diferentes configuraciones para diferentes variedades.

  4. Aumentar la optimización de parámetros, probar el efecto de la parada de pérdidas de diferentes ATR. Añadir la función de parada de pérdidas de paso.

  5. Prueba el rendimiento cuando la tendencia es débil y considera activar la estrategia solo cuando la tendencia es fuerte.

Resumir

La idea general de la estrategia es clara y fácil de entender, y el uso de los indicadores ATR para ajustar dinámicamente el stop loss para lograr el control del riesgo de transacción es su mayor ventaja. Sin embargo, los indicadores ATR en sí mismos son rezagados y la configuración de los parámetros necesita ser optimizada.

Código Fuente de la Estrategia
/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ekinbasarkomur

//@version=5
strategy("[EKIN] ATR Exit Strategy", overlay=true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, calc_on_every_tick = true)

// Simple EMA tracking
fastEMA = ta.ema(close, 5)
slowEMA = ta.ema (close, 20)
atr = ta.atr(14)

// We define entry price for future reference
var float entry_price = na
// We define stop and take profit for future calculations
var float stop_price = na
var float take_profit_price = na

// We define atr limtim its here
var float atr_down = na
var float atr_up = na
var float atr_current = na
var float atr_ref = na

avg = (low + high) / 2

// Conditions
enterCondition = ta.crossover(fastEMA, slowEMA)
var bool tookProfit = false
timePeriod = time >= timestamp(syminfo.timezone, 2021, 12, 15, 0, 0)
InTrade = strategy.position_size > 0

// Go long if conditions are met
if (enterCondition and timePeriod and not InTrade)
    // Calculate and update variables
    entry_price := avg
    atr_ref := atr
    atr_div = int((avg - entry_price) / atr_ref)
    atr_down := entry_price + (atr_ref * (atr_div - 1.5))
    atr_up := entry_price + (atr_ref * (atr_div + 1))
    atr_current := entry_price + (atr_ref * atr_div) 
    stop_price := (entry_price - (atr_ref * 1.5))
    take_profit_price := (entry_price + (atr_ref * 3))
    strategy.order("buy", strategy.long, qty = 2)

// Enter here if in position
if InTrade or tookProfit
    stopCondition = avg < stop_price
    takeProfitCondition = avg > take_profit_price

    if avg < atr_down
        stopCondition := true

    // Move stop price and exit price if price for each atr price increase
    if avg > atr_up
        if tookProfit
            atr_ref := atr
        atr_div = int((avg - entry_price) / atr_ref)
        atr_down := entry_price + (atr_ref * (atr_div - 1))
        atr_up := entry_price + (atr_ref * (atr_div + 1))
        atr_current := entry_price + (atr_ref * atr_div) 

    // Take half of the investment if current price is 3 atr higher than entry price
    if (takeProfitCondition and timePeriod and InTrade and not tookProfit)
        strategy.order("take_half_profit", strategy.short, qty = 1)
        tookProfit := true

    // Exit position if conditions are met and reset the variables
    if (stopCondition and timePeriod and InTrade)
        if tookProfit
            strategy.order("exit", strategy.short, qty = 1)
        else
            strategy.order("stop_loss", strategy.short, qty = 2)

        tookProfit := false

// Plot EMA's
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.yellow)

// Plot ATR Limit/Stop positions
profit_plot = plot(series = InTrade?atr_up:na, title = "profit", color = color.green, style=plot.style_linebr)
close_plot = plot(series = InTrade?atr_current:na, title = "close", color = color.white, style=plot.style_linebr)
stop_plot = plot(series = InTrade?atr_down:na, title = "stop_loss", color = color.red, style=plot.style_linebr)
fill(profit_plot, close_plot, color = color.new(color.green, 80))
fill(close_plot, stop_plot, color =color.new(color.red,80))