
A estratégia de retracção de alto nível é uma estratégia de negociação quantitativa que combina a identificação da forma técnica, a confirmação do volume de negociação e o gerenciamento dinâmico do risco. A estratégia é projetada para otimização de gráficos de 1 hora e oferece duas configurações de entrada independentes, baseadas nos princípios de ruptura do triângulo e confirmação do preço.
A estratégia funciona com base em duas configurações de entrada-chave e um mecanismo de saída cuidadosamente projetado:
Configuração de entrada 1 - Golden Triangle Break:
Configuração de entrada 2 - Confirmação de preços e volumes:
Estratégia de saída - tracking stop loss dinâmico:
Na implementação do código, a estratégia usa um pivot simplificado para identificar a forma do triângulo e confirmar o movimento do preço comparando o preço atual com o SMA. Para a confirmação do volume de negociação, a estratégia verifica se o volume de negociação é maior do que sua média móvel e o volume de negociação dos períodos anteriores.
Mecanismo de dupla entradaA estratégia é capaz de se adaptar a diferentes ambientes de mercado, aumentando a probabilidade de capturar oportunidades de negociação favoráveis, fornecendo duas configurações de entrada independentes. A configuração 1 pode capturar brechas quando o mercado está em um período de integração visível; A configuração 2 pode funcionar quando o padrão de mercado não é tão visível, mas há fortes sinais de acumulação.
Integração de Gestão de RiscosO mecanismo de parada de perda de rastreamento dinâmico incorporado adapta-se automaticamente às flutuações do mercado, permitindo o crescimento dos lucros ao mesmo tempo que protege o capital. Em particular, a função de parada de perda de aperto automático quando os lucros atingem a barreira predefinida, equilibra efetivamente a contradição entre o bloqueio de lucros e a fuga de lucros.
Filtragem de Falso AvançoA estratégia reduz o risco de falsas rupturas, combinando filtragem SMA e confirmação de volume de transação. Os preços devem não apenas romper a forma, mas também permanecer acima da SMA. Para a configuração 2, é necessário um suporte significativo de volume de transação, o que melhora significativamente a qualidade do sinal.
Auxílio visualA estratégia oferece uma abundância de indicadores visuais, incluindo a coloração de fundo durante a negociação, painéis de instrumentos em tempo real e vários elementos gráficos, permitindo que os comerciantes monitorem facilmente o estado e os sinais da estratégia.
Optimização de prazos flexíveis: Embora a estratégia tenha sido otimizada para gráficos de 1 hora, seus parâmetros podem ser ajustados para adaptar-se a diferentes quadros de tempo, aumentando o alcance da estratégia.
Dependência de condições de mercadoA estratégia funciona melhor em mercados horizontais a otimistas e pode não funcionar bem em mercados de forte tendência de baixa ou de alta volatilidade. No cenário de um mercado de baixa, aumenta o risco de falsas rupturas e pode levar a perdas contínuas.
Ponto de deslizamento e risco de execuçãoEm negociações reais, especialmente em mercados de baixa liquidez, os pontos de entrada e de parada podem experimentar deslizamentos que afetam o desempenho geral da estratégia. Para mitigar esse risco, pode-se considerar o uso de lista de preço limite em vez de lista de preço de mercado.
Desafios de optimização de parâmetrosA estratégia depende de vários parâmetros, como o comprimento do SMA, a porcentagem de parada, etc., que precisam ser otimizados para um determinado mercado e período de tempo. A configuração inadequada dos parâmetros pode levar a um excesso de ajuste ou mau desempenho.
Risco de excesso de negociaçãoEm certas condições de mercado, as estratégias podem gerar excesso de sinais, resultando em sobre-negociação e aumento de custos de transação. A implementação de filtros adicionais ou períodos de arrefecimento pode ajudar a reduzir esse risco.
Optimização de equilíbrio de stop lossEmbora o mecanismo de stop loss dinâmico seja uma vantagem para a estratégia, a configuração de stop loss excessivamente apertada pode levar a saídas antecipadas de negócios lucrativos, enquanto a configuração excessivamente ampla pode levar a retornos de lucro. O parâmetro de stop loss precisa ser cuidadosamente ajustado de acordo com a volatilidade de um determinado mercado.
Adicionar filtro de tendênciasA integração de indicadores de tendência mais amplos (como as médias móveis mais longas ou ADX) pode ajudar a estratégia a negociar apenas na direção favorável do mercado. Por exemplo, pode-se adicionar condições que permitem a entrada de peões apenas quando os SMAs longos (como o ciclo 200) estão inclinados para cima.
Otimização da lógica de confirmação de volume de transação: A confirmação de volume de negócios atual exige um volume de negócios maior do que os 4 ciclos anteriores, o que pode ser demasiado ou não suficientemente rigoroso, dependendo das condições do mercado. Realizar o desvalorização de volume de negócios adaptável, que pode melhorar a eficácia da configuração 2 de acordo com a dinâmica de volatilidade do mercado.
Integrar filtros de tempoAlguns períodos de negociação podem ser mais adequados para esta estratégia do que outros. Adicionar filtros de tempo, evitando a negociação em períodos desfavoráveis (como períodos de alta volatilidade antes da abertura ou do fechamento do mercado), pode melhorar o desempenho geral.
Implementação de um bloqueio parcial dos lucrosA estratégia de saída atual é binária: “possuir todo ou sair todo”. Um sistema de saída por lotes, que reduz a dimensão da posição gradualmente à medida que os lucros aumentam, pode bloquear parte dos lucros enquanto mantém algum potencial ascendente.
Adicionar confirmação de ativos relevantesEm alguns mercados, a confirmação de ativos relevantes pode melhorar a qualidade do sinal. Por exemplo, na negociação de ações, a força do setor ou da indústria pode servir como um filtro adicional; na divisão, o comportamento dos pares de moedas relevantes pode fornecer confirmação adicional.
Inclusão de ajustamentos de volatilidade de mercadoA estratégia pode ser melhor adaptada a diferentes condições de mercado. Use um stop mais apertado em um ambiente de baixa volatilidade e um stop mais amplo em um ambiente de alta volatilidade.
A estratégia de ruptura do triângulo de retracção superior com confirmação de quantidade de preço oferece uma abordagem de negociação abrangente, combinando a identificação da forma técnica, os princípios da dinâmica e a análise do volume de negociação. Ao fornecer duas configurações de entrada complementares, a estratégia mantém a flexibilidade em diferentes condições de mercado, enquanto seu mecanismo de parada de rastreamento dinâmico oferece gerenciamento de risco otimizado.
A principal vantagem da estratégia reside na sua variedade de critérios de entrada e na gestão integrada de riscos, o que a torna adequada para vários estilos de negociação, desde o dia a dia até o período de curto prazo. No entanto, a dependência das condições de mercado e os desafios de otimização de parâmetros são os principais riscos a serem atendidos.
Os traders podem aumentar ainda mais o desempenho da estratégia adicionando filtros de tendência, otimizando a lógica de confirmação de volume de negociação ou implementando o ajuste de volatilidade. Finalmente, a estratégia fornece uma estrutura sólida que pode ser personalizada de acordo com as preferências de risco pessoais e as características do mercado, tornando-se uma ferramenta valiosa para os traders que buscam uma abordagem de negociação orientada por tecnologia e controlada pelo risco.
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © eemani123
//@version=5
strategy("Golden Triangle Strategy (1H, Setup 1 & 2)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === Inputs ===
smaLength = input.int(34, title="SMA Length (1H Optimized)", minval=1)
volumeSmaLength = input.int(34, title="Volume SMA Length", minval=1)
trailingStopPct = input.float(6.0, title="Initial Trailing Stop Loss (%)", minval=0.1)
tightenPct = input.float(5.0, title="Tightened TSL (%)", minval=0.1)
profitTrigger = input.float(10.0, title="Tighten TSL After Profit (%)", minval=1)
maxLookback = input.int(10, title="Max Lookback Bars for Setup 2", minval=1)
pivotStrength = input.int(2, title="Pivot Strength (Shorter for 1H)", minval=1)
// === SMA Calculations ===
smaPrice = ta.sma(close, smaLength)
smaVolume = ta.sma(volume, volumeSmaLength)
// === Setup 1: Golden Triangle (simplified with pivots) ===
pivotHigh = ta.pivothigh(high, pivotStrength, pivotStrength)
pivotLow = ta.pivotlow(low, pivotStrength, pivotStrength)
var float triangleTop = na
var float triangleBottom = na
if not na(pivotHigh)
triangleTop := pivotHigh
if not na(pivotLow)
triangleBottom := pivotLow
triangleBreakout = ta.crossover(close, triangleTop) and close > smaPrice
enterSetup1 = triangleBreakout
// === Setup 2: Price & Volume Confirmation ===
priceBelowSMA = ta.barssince(close < smaPrice) <= maxLookback
priceConfirm = close > smaPrice and close > close[1]
volumeConfirm = volume > smaVolume and volume > volume[1] and volume > volume[2] and volume > volume[3] and volume > volume[4]
enterSetup2 = priceConfirm and priceBelowSMA and volumeConfirm
// === Entry & TSL Tracking ===
var bool inTradeSetup1 = false
var bool inTradeSetup2 = false
var float entryPrice1 = na
var float entryPrice2 = na
var float highestSinceEntry1 = na
var float highestSinceEntry2 = na
var float trailingStop1 = na
var float trailingStop2 = na
// === Entry Conditions ===
if enterSetup1 and not inTradeSetup1
strategy.entry("Buy Setup 1", strategy.long)
entryPrice1 := close
highestSinceEntry1 := close
inTradeSetup1 := true
if enterSetup2 and not inTradeSetup2
strategy.entry("Buy Setup 2", strategy.long)
entryPrice2 := close
highestSinceEntry2 := close
inTradeSetup2 := true
// === Update Trailing Stops with Tightening ===
if inTradeSetup1
highestSinceEntry1 := math.max(highestSinceEntry1, high)
profit1 = (highestSinceEntry1 - entryPrice1) / entryPrice1 * 100
activePct1 = profit1 >= profitTrigger ? tightenPct : trailingStopPct
trailingStop1 := highestSinceEntry1 * (1 - activePct1 / 100)
if inTradeSetup2
highestSinceEntry2 := math.max(highestSinceEntry2, high)
profit2 = (highestSinceEntry2 - entryPrice2) / entryPrice2 * 100
activePct2 = profit2 >= profitTrigger ? tightenPct : trailingStopPct
trailingStop2 := highestSinceEntry2 * (1 - activePct2 / 100)
// === Exit Conditions ===
if inTradeSetup1 and close < trailingStop1
strategy.close("Buy Setup 1", comment="TSL Hit - Setup 1")
inTradeSetup1 := false
entryPrice1 := na
highestSinceEntry1 := na
trailingStop1 := na
if inTradeSetup2 and close < trailingStop2
strategy.close("Buy Setup 2", comment="TSL Hit - Setup 2")
inTradeSetup2 := false
entryPrice2 := na
highestSinceEntry2 := na
trailingStop2 := na
// === Plotting ===
plot(smaPrice, color=color.orange, title="SMA")
//plot(triangleTop, title="Triangle Top", color=color.red, style=plot.style_linebr, linewidth=2)
//plot(triangleBottom, title="Triangle Bottom", color=color.green, style=plot.style_linebr, linewidth=2)
plot(inTradeSetup1 ? trailingStop1 : na, color=color.red, title="Trailing Stop - Setup 1", linewidth=2,style=plot.style_linebr)
plot(inTradeSetup2 ? trailingStop2 : na, color=color.blue, title="Trailing Stop - Setup 2", linewidth=2,style=plot.style_linebr)
plotshape(enterSetup1, title="Triangle Breakout Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(enterSetup2, title="Volume Confirmed Entry", location=location.belowbar, color=color.blue, style=shape.circle, size=size.small)
// === Alerts ===
alertcondition(enterSetup1, title="Setup 1 Buy", message="Golden Triangle Breakout (Setup 1) - BUY")
alertcondition(enterSetup2, title="Setup 2 Buy", message="Volume + Price Confirmation (Setup 2) - BUY")
// === Background highlight during trades ===
bgcolor(inTradeSetup1 or inTradeSetup2 ? color.new(color.green, 85) : na, title="In-Trade Highlight")
// === Weekly Fibonacci Pivot Levels (R3 / S3) ===
weeklyHigh = request.security(syminfo.tickerid, "W", high)
weeklyLow = request.security(syminfo.tickerid, "W", low)
weeklyClose = request.security(syminfo.tickerid, "W", close)
weeklyPivot = (weeklyHigh + weeklyLow + weeklyClose) / 3
weeklyRange = weeklyHigh - weeklyLow
fibR3 = weeklyPivot + 1.000 * weeklyRange
fibS3 = weeklyPivot - 1.000 * weeklyRange
// === Plot R3 and S3 ===
plot(fibR3, title="Weekly Fib R3", color=color.fuchsia, linewidth=2, style=plot.style_circles)
plot(fibS3, title="Weekly Fib S3", color=color.teal, linewidth=2, style=plot.style_circles)
// === Weekly Fibonacci Pivot Levels (R3 / S3) ===