Esta estrategia es un sistema de seguimiento de tendencias que combina promedios móviles con reconocimiento de patrones de barra externa. Utiliza promedios móviles exponenciales (EMA) de 5 períodos y 9 períodos como indicadores de tendencia primarios, junto con el patrón de barra externa para la confirmación de la señal. La estrategia incluye configuraciones dinámicas de stop-loss y take-profit basadas en la altura de la barra externa, así como un mecanismo de inversión de posición activado por hits de stop-loss.
La lógica central se basa en los siguientes elementos clave: 1. El uso de cruces de EMA de 5 y 9 períodos para determinar la dirección básica de la tendencia 2. Confirmación de la volatilidad del mercado a través del patrón de barra externa (las barras actuales altas por encima de las barras anteriores altas y bajas por debajo de las barras anteriores bajas) 3. Entrar en operaciones cuando las señales de cruce de la EMA coinciden con los patrones de barra externa 4. Usar la altura de la barra externa para establecer dinámicamente los niveles de stop-loss y take-profit, con take-profit en el 50% y stop-loss en el 100% de la altura de la barra 5. Ejecución automática de posiciones invertidas cuando se activa el stop-loss para capturar posibles inversiones de tendencia
Este es un sistema de estrategia que combina el análisis técnico clásico con conceptos comerciales cuantitativos modernos. La combinación de promedios móviles y patrones Outside Bar asegura tanto el seguimiento oportuno de tendencias como la generación de señales confiables. El diseño de mecanismos dinámicos de stop-loss / take-profit e inversión de posición demuestra un fuerte enfoque en la gestión de riesgos, lo que hace que la estrategia sea prácticamente viable.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-15 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy(title="Outside Bar EMA Crossover Strategy with EMA Shift", shorttitle="Outside Bar EMA Cross", overlay=true) // Input for EMA lengths lenEMA1 = input.int(5, title="EMA 5 Length") lenEMA2 = input.int(9, title="EMA 9 Length") // Input for EMA 9 shift emaShift = input.int(1, title="EMA 9 Shift", minval=0) // Calculate EMAs ema1 = ta.ema(close, lenEMA1) ema2 = ta.ema(close, lenEMA2) // Apply shift to EMA 9 ema2Shifted = na(ema2[emaShift]) ? na : ema2[emaShift] // Dịch chuyển EMA 9 bằng cách sử dụng offset // Plot EMAs plot(ema1, title="EMA 5", color=color.blue, linewidth=2) plot(ema2Shifted, title="EMA 9 Shifted", color=color.red, linewidth=2) // Outside Bar condition outsideBar() => high > high[1] and low < low[1] // Cross above EMA 5 and EMA 9 (shifted) crossAboveEMA = close > ema1 and close > ema2Shifted // Cross below EMA 5 and EMA 9 (shifted) crossBelowEMA = close < ema1 and close < ema2Shifted // Outside Bar cross above EMA 5 and EMA 9 (shifted) outsideBarCrossAbove = outsideBar() and crossAboveEMA // Outside Bar cross below EMA 5 and EMA 9 (shifted) outsideBarCrossBelow = outsideBar() and crossBelowEMA // Plot shapes for visual signals plotshape(series=outsideBarCrossAbove, title="Outside Bar Cross Above", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", textcolor=color.white) plotshape(series=outsideBarCrossBelow, title="Outside Bar Cross Below", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", textcolor=color.white) // Calculate Outside Bar height outsideBarHeight = high - low // Chiều cao của nến Outside Bar // Calculate TP and SL levels tpRatio = 0.5 // TP = 50% chiều cao nến Outside Bar slRatio = 1.0 // SL = 100% chiều cao nến Outside Bar tpLevelLong = close + outsideBarHeight * tpRatio // TP cho lệnh mua slLevelLong = close - outsideBarHeight * slRatio // SL cho lệnh mua tpLevelShort = close - outsideBarHeight * tpRatio // TP cho lệnh bán slLevelShort = close + outsideBarHeight * slRatio // SL cho lệnh bán // Strategy logic if (outsideBarCrossAbove) strategy.entry("Buy", strategy.long) strategy.exit("Take Profit/Stop Loss", "Buy", stop=slLevelLong, limit=tpLevelLong) // Thêm TP và SL if (outsideBarCrossBelow) strategy.entry("Sell", strategy.short) strategy.exit("Take Profit/Stop Loss", "Sell", stop=slLevelShort, limit=tpLevelShort) // Thêm TP và SL // Logic: Nếu lệnh Buy bị Stop Loss => Vào lệnh Sell if (strategy.position_size > 0 and close <= slLevelLong) strategy.close("Buy") strategy.entry("Sell After Buy SL", strategy.short) // Logic: Nếu lệnh Sell bị Stop Loss => Vào lệnh Buy if (strategy.position_size < 0 and close >= slLevelShort) strategy.close("Sell") strategy.entry("Buy After Sell SL", strategy.long) // Cảnh báo khi label Buy xuất hiện alertcondition(condition=outsideBarCrossAbove, title="Label Buy Xuất Hiện", message="Label Buy xuất hiện tại giá: {{close}}") // Cảnh báo khi label Sell xuất hiện alertcondition(condition=outsideBarCrossBelow, title="Label Sell Xuất Hiện", message="Label Sell xuất hiện tại giá: {{close}}")