Esta estrategia utiliza el indicador ATR para establecer puntos de stop loss dinámicos y ajustar posiciones de stop loss basadas en las fluctuaciones de precios, con el fin de controlar los riesgos. Principalmente entra en largo cuando 5EMA cruza por encima de 20EMA, y luego utiliza el indicador ATR para establecer posiciones de stop loss y take profit. La posición de stop loss se ajustará de acuerdo con los movimientos de precios para obtener más ganancias.
La estrategia primero juzga si 5EMA cruza por encima de 20EMA para ir largo. Después de entrar, calcula los múltiplos ATR del precio de entrada al precio actual utilizando el indicador ATR y establece la posición de stop loss en 1.5ATR por debajo del precio de entrada. A medida que el precio aumenta, la posición de stop loss se eleva gradualmente para aumentar las ganancias de la posición.
En concreto, la estrategia define las siguientes variables:
Después de ingresar, calcula atr_ref como el valor actual de ATR y atr_div como los múltiplos de ATR del precio de entrada al precio actual. Luego establece las posiciones de atr_down, atr_current y atr_up basadas en atr_div. El precio de stop loss stop_price se establece en 1.5ATR por debajo del precio de entrada.
A medida que el precio sube, al comparar el precio actual avg y atr_up, si avg cruza por encima de atr_up, recalcula las posiciones de la línea atr_div y ATR, elevando gradualmente la línea de stop loss para aumentar las ganancias.
Si el precio se eleva por encima del 3ATR del precio de entrada, cerrará parcialmente la posición para bloquear las ganancias y establecerá tookProfit a true. Después, si el precio sigue subiendo, continuará aumentando la stop loss. Cuando se activa el stop loss, comprueba tookProfit - si ya tomó ganancias parciales antes, solo cerrará la posición restante; de lo contrario, cerrará la posición completa.
El uso del indicador ATR para ajustar dinámicamente el stop loss puede establecer una distancia de parada razonable basada en la volatilidad del mercado.
Sigue las tendencias mientras limitas las pérdidas.
El mecanismo de toma parcial de ganancias bloquea algunas ganancias y reduce el riesgo.
El indicador ATR no es sensible a las reversiones bruscas y a las lagunas.
Las EMA no pueden determinar la inversión de tendencia, pueden entrar en nuevas posiciones en las inversiones de tendencia.
Alta probabilidad de pérdidas después de una ganancia parcial.
Los parámetros necesitan una mayor optimización, 1.5ATR stop y 3ATR take profit deben ajustarse para diferentes productos.
Considere la posibilidad de añadir otros indicadores de stop loss como el canal Donchian para compensar el retraso del ATR.
Pruebe diferentes promedios móviles o agregue MACD, etc. para juzgar la inversión de tendencia.
Optimizar los ratios de ganancia parcial y la frecuencia para diferentes productos.
Optimización de parámetros en los múltiplos de ATR para detener y tomar ganancias.
El rendimiento de las pruebas durante tendencias débiles puede desactivar la estrategia durante tendencias débiles.
La estrategia tiene una lógica clara de usar ATR para la gestión dinámica de stop loss que es su mayor fortaleza. Sin embargo, ATR en sí tiene limitaciones como el retraso. La adición de otros indicadores de stop y tendencia lo mejorará. También la toma parcial de ganancias necesita optimizaciones en todos los productos. En general, proporciona la idea de gestión de stop loss basada en ATR, pero necesita más optimizaciones y mejoras.
/*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))