
O mercado é como um enorme parque de diversões de geometria! Esta estratégia simplifica a complexa movimentação de preços em três formas adoráveis: um diamante de alumínio representa um sinal de reversão, um triângulo de alumínio representa a continuação da tendência e um círculo de alumínio representa um filtro de vibração.
A lógica central da estratégia é super simples: os EMAs formam as faixas de nuvem rapidamente para julgar a grande tendência e, em seguida, colocam diferentes “etiquetas” para diferentes rupturas de altas e baixas, de acordo com a posição do preço em relação às faixas de nuvem. As rupturas abaixo das faixas de nuvem são sinais de inversão de diamante, e as rupturas acima das faixas de nuvem são sinais de continuidade triangular, e os sinais que não são suficientemente separados pela EMA são filtrados como “ruído” pelo círculo.
Cadeia de sinais de diamanteCapturar oportunidades de reversão! Quando os preços têm altos e baixos abaixo da faixa de nuvens EMA, ou altos e baixos acima da faixa de nuvens. Isso é tão óbvio quanto encontrar uma jóia no fundo de um vale ou ver uma luz de alerta no topo de uma montanha.
Trilha de sinalizaçãoAtivar quando os preços têm altos e baixos acima da faixa de nuvens, ou quando os preços têm altos e baixos abaixo da faixa de nuvens. Imaginar que você está surfando e seguindo a cabeça das ondas, a taxa de sucesso é naturalmente maior.
Filtragem em círculoQuando a separação da EMA é menor do que o limite definido, todos os sinais são marcados como “ruído de vibração”. É como se a estratégia tivesse um “função de proteção contra a paralisação” para evitar a abertura frequente de posições no mercado de alavanca.
A lógica de stop loss usa pontos-chave prévios: o stop loss multihead é definido como o ponto baixo anterior e o stop loss em branco como o ponto alto anterior. O benefício deste método é que há uma base técnica clara e não é varrido por uma “falsa ruptura” por uma configuração arbitrária.
O mecanismo de saída do RSI também é inteligente: as posições de cabeça-de-multiplos são fechadas quando o RSI retorna acima de 70, e as posições de cabeça-vazia são fechadas quando o RSI rebenta abaixo de 30. Isso permite tanto bloquear os lucros quanto evitar o risco de continuar a manter posições em áreas extremamente sobrecompradas e sobrevendidas.
Melhor cenárioA estratégia ajusta automaticamente o tamanho da posição: o sinal de reversão é testado com 50% da posição e o sinal de continuidade é seguido com 100% da posição.
Guia para evitar poçosA estratégia é mais baseada na análise técnica, e as notícias fundamentais podem fazer com que a geometria seja “invalidada”.
Lembre-se, a melhor estratégia não é a mais complexa, mas a que melhor se adapta ao seu estilo de negociação!
/*backtest
start: 2024-09-26 00:00:00
end: 2025-09-24 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/
//@version=5
strategy("💎🔺⚫ Diamond-Triangle-Circle Strategy", overlay=true)
// === INPUTS ===
ema_fast = input.int(10, "Fast EMA Length")
ema_slow = input.int(20, "Slow EMA Length")
min_ema_separation = input.float(0.1, "Min EMA Separation %", minval=0.01, maxval=1.0)
rsi_length = input.int(14, "RSI Length")
rsi_exit_level = input.int(70, "RSI Exit Level")
// === CALCULATIONS ===
ema_fast_val = ta.ema(close, ema_fast)
ema_slow_val = ta.ema(close, ema_slow)
rsi = ta.rsi(close, rsi_length)
// EMA Cloud and separation
cloud_bull = ema_fast_val > ema_slow_val
ema_separation_pct = math.abs(ema_fast_val - ema_slow_val) / close * 100
chop_filter = ema_separation_pct >= min_ema_separation
// Price position relative to cloud
price_above_cloud = close > math.max(ema_fast_val, ema_slow_val)
price_below_cloud = close < math.min(ema_fast_val, ema_slow_val)
// === HIGHER LOW DETECTION ===
lowPoint = ta.lowest(low, 3)
prevLowPoint = ta.lowest(low[3], 3)
isHigherLow = low == lowPoint and low > prevLowPoint
higherLowConfirmed = isHigherLow and close > open
// === LOWER HIGH DETECTION ===
highPoint = ta.highest(high, 3)
prevHighPoint = ta.highest(high[3], 3)
isLowerHigh = high == highPoint and high < prevHighPoint
lowerHighConfirmed = isLowerHigh and close < open
// === SIGNAL CLASSIFICATION ===
// Diamond Signal - Reversal (below cloud)
diamondBullish = higherLowConfirmed and price_below_cloud and chop_filter
diamondBearish = lowerHighConfirmed and price_above_cloud and chop_filter
// Triangle Signal - Continuation (above cloud)
triangleBullish = higherLowConfirmed and price_above_cloud and chop_filter
triangleBearish = lowerHighConfirmed and price_below_cloud and chop_filter
// Circle Signal - Chop (filtered out - display only)
chopBullish = higherLowConfirmed and not chop_filter
chopBearish = lowerHighConfirmed and not chop_filter
// === RSI EXIT LOGIC ===
rsi_was_above_70 = rsi[1] >= rsi_exit_level and rsi < rsi[1]
rsi_was_below_30 = rsi[1] <= (100 - rsi_exit_level) and rsi > rsi[1]
// === STOP LOSS LOGIC ===
var float long_stop = na
var float short_stop = na
if diamondBullish or triangleBullish
long_stop := prevLowPoint
if diamondBearish or triangleBearish
short_stop := prevHighPoint
// === STRATEGY EXECUTION ===
// Long Entries
if diamondBullish
strategy.entry("Diamond Long", strategy.long, qty=50, comment="💎 Reversal")
if triangleBullish
strategy.entry("Triangle Long", strategy.long, qty=100, comment="🔺 Continuation")
// Short Entries
if diamondBearish
strategy.entry("Diamond Short", strategy.short, qty=50, comment="💎 Reversal")
if triangleBearish
strategy.entry("Triangle Short", strategy.short, qty=100, comment="🔺 Continuation")
// === EXITS ===
// Long Exits
if strategy.position_size > 0
if close <= long_stop
strategy.close_all(comment="Stop Loss")
else if rsi_was_above_70
strategy.close_all(comment="RSI Exit")
// Short Exits
if strategy.position_size < 0
if close >= short_stop
strategy.close_all(comment="Stop Loss")
else if rsi_was_below_30
strategy.close_all(comment="RSI Exit")
// === VISUAL ELEMENTS ===
// EMA Cloud
ema1 = plot(ema_fast_val, "Fast EMA", color.new(color.blue, 60), linewidth=1)
ema2 = plot(ema_slow_val, "Slow EMA", color.new(color.blue, 60), linewidth=1)
fill(ema1, ema2, color=cloud_bull ? color.new(color.green, 85) : color.new(color.red, 85), title="EMA Cloud")
// Signal Shapes
plotshape(diamondBullish, "Diamond Long", shape.diamond, location.belowbar,
color.new(color.lime, 0), size=size.small, text="💎")
plotshape(diamondBearish, "Diamond Short", shape.diamond, location.abovebar,
color.new(color.red, 0), size=size.small, text="💎")
plotshape(triangleBullish, "Triangle Long", shape.triangleup, location.belowbar,
color.new(color.green, 20), size=size.small, text="🔺")
plotshape(triangleBearish, "Triangle Short", shape.triangledown, location.abovebar,
color.new(color.orange, 20), size=size.small, text="🔺")
plotshape(chopBullish, "Chop Long", shape.circle, location.belowbar,
color.new(color.gray, 50), size=size.tiny, text="⚫")
plotshape(chopBearish, "Chop Short", shape.circle, location.abovebar,
color.new(color.gray, 50), size=size.tiny, text="⚫")
// Stop Loss Lines
plot(strategy.position_size > 0 ? long_stop : na, "Long Stop", color.red, linewidth=2)
plot(strategy.position_size < 0 ? short_stop : na, "Short Stop", color.red, linewidth=2)
// Background coloring for market conditions
bgcolor(not chop_filter ? color.new(color.yellow, 95) : na, title="Chop Zone")
// === ALERTS ===
alertcondition(diamondBullish, title="Diamond Long Signal", message="💎 REVERSAL LONG - {{ticker}} at {{close}}")
alertcondition(diamondBearish, title="Diamond Short Signal", message="💎 REVERSAL SHORT - {{ticker}} at {{close}}")
alertcondition(triangleBullish, title="Triangle Long Signal", message="🔺 CONTINUATION LONG - {{ticker}} at {{close}}")
alertcondition(triangleBearish, title="Triangle Short Signal", message="🔺 CONTINUATION SHORT - {{ticker}} at {{close}}")
alertcondition(strategy.position_size == 0 and strategy.position_size[1] != 0, title="Position Closed", message="💰 POSITION CLOSED - {{ticker}} at {{close}}")