
A estratégia de sistema de dupla equilíbrio de ruptura cruzada é uma estratégia de análise técnica baseada nos pontos altos e baixos da média móvel do índice de 32 períodos (EMA). A ideia central da estratégia é confirmar a direção da tendência identificando os pontos de interseção do preço com a EMA de 32 períodos e as formas especiais de “cabeça sem contato” e entrar em negociação após a confirmação de uma ruptura de preço crucial.
A estratégia funciona com base nos seguintes passos-chave:
A lógica central da estratégia é que, além de exigir que os preços se cruzem com as EMAs, é necessário filtrar os falsos sinais por meio de “capa de contato” e confirmação de ruptura, melhorando a precisão das negociações. Esse mecanismo de confirmação múltipla reduz efetivamente o risco de entrada errada no mercado de liquidação.
Ao analisar o código em profundidade, a estratégia tem as seguintes vantagens significativas:
Apesar da estratégia ser bem concebida, existem os seguintes riscos potenciais:
Com base na análise do código, aqui estão algumas das principais direções em que a estratégia pode ser otimizada:
Essas orientações de otimização visam principalmente aumentar a robustez e a adaptabilidade das estratégias e reduzir os prejuízos em contextos de mercado desfavoráveis.
A estratégia de sistema de dupla equilíbrio de ruptura cruzada é um sistema de negociação de análise técnica cuidadosamente projetado para identificar oportunidades de negociação de alta probabilidade por meio de mecanismos múltiplos, como 32 ciclos de EMA, altos e baixos, cruzamento de preços, colunas sem contato e confirmação de ruptura. A estratégia se destaca em mercados de tendência clara, reduzindo efetivamente o risco de entrada errada por meio de confirmação de entrada rigorosa e regras de saída claras.
No entanto, qualquer estratégia de negociação tem suas limitações, que podem ser desafiadas em mercados horizontais ou altamente voláteis. A estabilidade e adaptabilidade da estratégia pode ser ainda melhorada pela introdução de medidas de otimização, como filtragem de intensidade de tendência, ajuste de parâmetros dinâmicos e análise de múltiplos quadros temporais.
Como um sistema de negociação de curta linha em um período de 5 minutos, a estratégia é especialmente adequada para os comerciantes de dia e para os comerciantes de curta linha. Finalmente, a boa gestão de risco é sempre a chave para a aplicação bem sucedida de qualquer estratégia de negociação, recomendando que os comerciantes façam um bom teste de retorno e simulação de negociação antes da aplicação no mercado real, e criem regras razoáveis de gerenciamento de posição em combinação com a capacidade de assumir riscos pessoais.
/*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")