
La estrategia de sistema de doble línea uniforme de ruptura cruzada es una estrategia de análisis técnico basada en los puntos altos y bajos de las medias móviles de índices de 32 períodos (EMA). La idea central de la estrategia es confirmar la dirección de la tendencia mediante la identificación de los puntos de intersección de los precios con los EMA de 32 períodos y las formas especiales de “cubierta sin contacto” y entrar en el mercado después de la confirmación de la ruptura de precios clave. La estrategia está diseñada específicamente para un marco de tiempo de 5 minutos y permite a los comerciantes capturar las oportunidades que brindan los cambios de tendencia a corto plazo con condiciones de entrada estrictas y reglas de salida claras.
La estrategia se basa en los siguientes pasos clave:
La lógica central de esta estrategia es que no solo requiere que los precios se crucen con las EMAs, sino que también necesita filtrar las falsas señales a través de “cubiertas sin contacto” y confirmaciones de ruptura para mejorar la precisión de las operaciones. Este mecanismo de confirmación múltiple reduce efectivamente el riesgo de entrada errónea en el mercado de liquidación.
A través de un análisis profundo del código, la estrategia tiene las siguientes ventajas:
A pesar de la ingeniosa concepción de la estrategia, existen los siguientes riesgos potenciales:
Basado en el análisis de código, las siguientes son algunas de las principales direcciones en las que la estrategia puede ser optimizada:
Estas orientaciones de optimización se centran en mejorar la robustez y adaptabilidad de las estrategias y reducir las pérdidas en condiciones de mercado desfavorables.
La estrategia del sistema de doble equilátero de ruptura cruzada es un sistema de negociación de análisis técnico cuidadosamente diseñado para identificar oportunidades de negociación de alta probabilidad a través de mecanismos múltiples como el EMA de 32 ciclos, el cruce de precios, el umbral sin contacto y la confirmación de la ruptura. La estrategia funciona bien en mercados con una clara tendencia, reduciendo efectivamente el riesgo de entrada errónea con una confirmación de entrada estricta y reglas de salida claras.
Sin embargo, cualquier estrategia de negociación tiene sus limitaciones y puede enfrentarse a desafíos en mercados de alto riesgo o de alta volatilidad. La estabilidad y adaptabilidad de la estrategia se pueden mejorar aún más mediante la introducción de medidas de optimización como filtros de intensidad de tendencia, ajuste de parámetros dinámicos y análisis de múltiples marcos de tiempo.
La estrategia es especialmente adecuada para los comerciantes de día y los comerciantes de línea corta, como un sistema de comercio de línea corta en un marco de tiempo de 5 minutos. Finalmente, una buena gestión del riesgo siempre es clave para la aplicación exitosa de cualquier estrategia de comercio, y se recomienda a los comerciantes que realicen una adecuada retroalimentación y simulación de operaciones antes de su aplicación en el mercado real, y que elaboren reglas razonables de gestión de posiciones en combinación con la capacidad de asumir el riesgo personal.
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("TrophyFighter 32 EMA HL", overlay=true)
// 32 EMA for high and low
ema_high_32 = ta.ema(high, 32)
ema_low_32 = ta.ema(low, 32)
// Detect crossover and crossunder
cross_above_high_ema = ta.crossover(close, ema_high_32)
cross_below_low_ema = ta.crossunder(close, ema_low_32)
// Identify no-touch candles
no_touch_green = close > open and low > ema_high_32
no_touch_red = close < open and high < ema_low_32
// Track the high and low of no-touch candles
var float first_green_high = na
var float first_red_low = na
var bool waiting_for_long = false
var bool waiting_for_short = false
var bool in_long_trade = false // Whether a long trade is active
var bool in_short_trade = false // Whether a short trade is active
var bool first_no_touch_green_shown = false // First green diamond shown
var bool first_no_touch_red_shown = false // First red diamond shown
if (cross_above_high_ema and not in_long_trade and not in_short_trade)
first_green_high := na
waiting_for_long := true
first_no_touch_green_shown := false // Reset
if (cross_below_low_ema and not in_long_trade and not in_short_trade)
first_red_low := na
waiting_for_short := true
first_no_touch_red_shown := false // Reset
if (no_touch_green and waiting_for_long and ta.valuewhen(cross_above_high_ema, bar_index, 0) > ta.valuewhen(no_touch_green, bar_index, 1))
first_green_high := high
first_no_touch_green_shown := true // Set first green diamond
if (no_touch_red and waiting_for_short and ta.valuewhen(cross_below_low_ema, bar_index, 0) > ta.valuewhen(no_touch_red, bar_index, 1))
first_red_low := low
first_no_touch_red_shown := true // Set first red diamond
// Identify breakout (on the previous candle) - using na() function
long_breakout_check = high > ta.valuewhen(not na(first_green_high), first_green_high, 0) and not na(first_green_high) and waiting_for_long
short_breakout_check = low < ta.valuewhen(not na(first_red_low), first_red_low, 0) and not na(first_red_low) and waiting_for_short
// Buy and sell conditions (on the next same-colored candle)
long_condition = long_breakout_check[1] and close > open and not in_long_trade and not in_short_trade // Next green candle
short_condition = short_breakout_check[1] and close < open and not in_long_trade and not in_short_trade // Next red candle
// Breakout check (only on the signal candle)
long_breakout = long_condition // Blue square only for signal
short_breakout = short_condition // White square only for signal
// Signal for the first no-touch candle
first_no_touch_green = no_touch_green and not first_no_touch_green_shown and waiting_for_long and ta.valuewhen(cross_above_high_ema, bar_index, 0) > ta.valuewhen(no_touch_green, bar_index, 1)
first_no_touch_red = no_touch_red and not first_no_touch_red_shown and waiting_for_short and ta.valuewhen(cross_below_low_ema, bar_index, 0) > ta.valuewhen(no_touch_red, bar_index, 1)
// When a trade starts
if (long_condition)
waiting_for_long := false
in_long_trade := true // Start long trade
if (short_condition)
waiting_for_short := false
in_short_trade := true // Start short trade
// New exit rules
long_exit = close < ema_low_32 and in_long_trade // Price drops below EMA low
short_exit = close > ema_high_32 and in_short_trade // Price rises above EMA high
// Reset when trade closes
if (long_exit)
in_long_trade := false
if (short_exit)
in_short_trade := false
// Plot EMA and levels (cross style)
plot(ema_high_32, color=color.green, title="EMA High 32")
plot(ema_low_32, color=color.red, title="EMA Low 32")
plot(first_green_high, color=color.yellow, style=plot.style_cross, linewidth=1, title="First Green High")
plot(first_red_low, color=color.orange, style=plot.style_cross, linewidth=1, title="First Red Low")
// Debugging signals
plotshape(cross_above_high_ema, title="Cross Above EMA", location=location.belowbar, color=color.yellow, style=shape.circle, size=size.tiny)
plotshape(cross_below_low_ema, title="Cross Below EMA", location=location.abovebar, color=color.orange, style=shape.circle, size=size.tiny)
plotshape(first_no_touch_green, title="No Touch Green", location=location.belowbar, color=color.lime, style=shape.diamond, size=size.tiny)
plotshape(first_no_touch_red, title="No Touch Red", location=location.abovebar, color=color.purple, style=shape.diamond, size=size.tiny)
plotshape(long_breakout, title="Long Breakout", location=location.belowbar, color=color.blue, style=shape.square, size=size.tiny)
plotshape(short_breakout, title="Short Breakout", location=location.abovebar, color=color.white, style=shape.square, size=size.tiny)
plotshape(long_condition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(short_condition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
// Execute trades
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)
if (long_exit)
strategy.close("Long", comment="Long Exit")
if (short_exit)
strategy.close("Short", comment="Short Exit")