La estrategia de trading de breakout abierto alto cerrado bajo es una estrategia de seguimiento de tendencias. Identifica la dirección de tendencia a corto plazo comprobando la relación entre los precios de apertura y cierre en los gráficos de velas. Cuando una tendencia comienza, se ingresan posiciones largas o cortas para capturar el impulso rápidamente.
La lógica básica es verificar si el precio abierto es igual al precio más bajo o más alto del candelabro. Una señal larga se activa cuando el precio abierto es igual al bajo. Una señal corta se activa cuando el precio abierto es igual al alto. Esto tiene como objetivo detectar breakouts que sugieren una tendencia a corto plazo.
Una vez que se activa una señal, se abrirá una posición de tamaño fijo de inmediato. El stop loss se establece en función del indicador ATR para rastrear la volatilidad del mercado. El nivel de toma de ganancias es un múltiplo de RR fijo de la distancia de stop loss desde el precio de entrada. Cuando el precio alcanza el stop loss o take profit, la posición se cerrará en consecuencia.
La estrategia también aplana todas las posiciones en una hora de corte diaria definida por el usuario, como 30 minutos antes del cierre del mercado estadounidense.
Las principales ventajas son:
Usando precios de apertura/cierre para identificar rápidamente las señales de ruptura.
Señales de entrada claras que sean fáciles de implementar.
Detener pérdidas y obtener ganancias oportunas para asegurar las ganancias y limitar las pérdidas.
Posiciones planas en el límite diario para evitar el riesgo de brecha durante la noche.
Neutral en el mercado, se aplica a divisas, acciones, criptomonedas, etc.
Algunos riesgos a considerar:
Frecuente stop loss con ATR en mercados agitados.
Sobreajuste a instrumentos específicos y sesiones sin filtros adicionales.
El nivel de utilidad fija puede ser inferior en tendencias fuertes.
El mal momento en las posiciones de aplanamiento podría perder tendencias o causar pérdidas innecesarias.
Algunas maneras de optimizar aún más:
Experimentar con varias técnicas de stop loss para diferentes condiciones de mercado.
Añadir filtros con indicadores de impulso, etc. para evitar señales falsas.
Ajuste dinámico de los niveles de toma de ganancias basado en la volatilidad del mercado.
Optimizar el tiempo de corte diario para varios instrumentos y sesiones de negociación.
La estrategia de breakout Open High Close Low ofrece una forma sencilla de impulsar el comercio. Reglas claras de entrada y salida lo hacen fácil de implementar y administrar. Pero las optimizaciones adicionales en parámetros como stop loss, take profit, filtros mejorarían su robustez en más condiciones de mercado.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Open-High-Low strategy strategy('Strategy: OLH', shorttitle="OLH", overlay=true) // Inputs slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings") showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings") // Trade related rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings") endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings") mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings") lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings") // Utils green(open, close) => close > open ? true : false red(open, close) => close < open ? true : false body(open, close) => math.abs(open - close) lowerwick = green(open, close) ? open - low : close - low upperwick = green(open, close) ? high - close : high - open crange = high - low crangep = high[1] - low[1] // previous candle's candle-range bullish = close > open ? true : false bearish = close < open ? true : false // Trade signals longCond = barstate.isconfirmed and (open == low) shortCond = barstate.isconfirmed and (open == high) // For SL calculation atr = ta.atr(slAtrLen) highestHigh = ta.highest(high, 7) lowestLow = ta.lowest(low, 7) longStop = showSLLines ? lowestLow - (atr * 1) : na shortStop = showSLLines ? highestHigh + (atr * 1) : na plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross) plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross) // Trade execute h = hour(time('1'), syminfo.timezone) m = minute(time('1'), syminfo.timezone) hourVal = h * 100 + m totalTrades = strategy.opentrades + strategy.closedtrades if (mktAlwaysOn or (hourVal < endOfDay)) // Entry var float sl = na var float target = na if (longCond) strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long") sl := longStop target := close + ((close - longStop) * rrRatio) alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar) if (shortCond) strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short") sl := shortStop target := close - ((shortStop - close) * rrRatio) alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar) // Exit: target or SL if ((close >= target) or (close <= sl)) strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit") if ((close <= target) or (close >= sl)) strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit") else if (not mktAlwaysOn) // Close all open position at the end if Day strategy.close_all(comment = "Close all entries at end of day.")