
A estratégia de metas e travas de parada é um sistema de acompanhamento de tendências baseado no modelo de gráfico de Heinrich Heine, projetado para capturar a dinâmica do mercado e proteger os lucros. A estratégia permite entradas iniciais e segundas entradas (pyramidal), com uma meta de lucro e um parâmetro de parada independentes em cada entrada.
A estratégia funciona com base em alguns princípios-chave:
Sinais do mapa de Heinrich Ansi: Utilize o gráfico de Hines para filtrar o ruído do mercado e identificar tendências. O sinal de multi-cabeça é acionado quando o preço de fechamento atual do HA é maior que o preço de abertura do HA e maior que o preço de fechamento anterior do HA; o sinal de cabea é o oposto.
Sistema de entrada dupla:
A proteção contra os prejuízos e perdasQuando o primeiro objetivo é atingido, a estratégia move automaticamente o nível de stop loss para o preço de entrada (o ponto de equilíbrio de ganho e perda), garantindo que a negociação não cause perdas.
Conceito de área alvo: Quando o preço está próximo do nível alvo (dentro de um limiar predefinido), a estratégia inicia uma “zona alvo”, aumentando o nível alvo para capturar mais lucros potenciais
Mecanismo de suspensão de perdas:
Acompanhamento de statusA estratégia mantém várias variáveis para rastrear a direção do negócio, o valor máximo do preço, se o primeiro objetivo foi atingido e se está atualmente na área de destino, etc.
Gerenciamento de riscos completoA estratégia oferece uma gestão de risco multifacetada que protege o capital de quedas drásticas, através da prevenção de perdas, proteção de equilíbrio de prejuízos e parada de consequência.
A pirâmide de oportunidadesAo permitir uma segunda entrada, a estratégia é capaz de aumentar a posição em uma tendência confirmada, aumentando o potencial de lucro, sem aumentar o risco geral, já que a primeira negociação está bloqueada no ponto de equilíbrio de ganhos e perdas.
Captura dinâmica de lucro: A função de aumento de alvo e de alvo de área permite que a estratégia expanda automaticamente o alvo de lucro em mercados fortes, em vez de sair prematuramente de uma tendência forte.
Altura personalizadaA estratégia oferece um amplo conjunto de parâmetros, permitindo que o comerciante ajuste de acordo com as condições do mercado, as características da variedade de negociação e as preferências pessoais de risco.
Execução automáticaA estratégia executa todos os ajustes de entrada, saída e parada de perda, eliminando o efeito de negociação emocional.
Comentários visuaisA estratégia contém componentes visuais claros que mostram os níveis de alvo, os níveis de stop loss e os indicadores de estado atual, permitindo que os comerciantes monitorem facilmente o progresso das negociações.
Sensibilidade do parâmetroO desempenho da estratégia é altamente dependente da configuração dos parâmetros. O objetivo ou o parâmetro de parada inadequado pode levar a uma saída prematura de um bom negócio ou a um risco excessivo de queda. Este risco pode ser reduzido através da retrospectiva histórica e da otimização de parâmetros específicos do mercado.
Risco de deslizamento: Especialmente durante a execução de trail stop, a lacuna de mercado ou a falta de liquidez podem levar a que o preço de execução real seja diferente do nível de parada ideal. Considere a possibilidade de aumentar a amortização do ponto de deslizamento ou usar parâmetros de trail mais conservadores para reduzir esse risco.
Reincidência de excesso de negociação: A habilitação de entrada dupla pode levar a excesso de negociação em mercados instáveis. A implementação de condições de filtragem adicionais ou restrições de tempo de entrada dupla pode reduzir tais situações.
Risco de mudança de mercadoEmbora a estratégia tenha um bom desempenho em mercados em tendência, ela pode ter um mau desempenho em mercados com turbulência intermitente ou em mercados com uma mudança súbita. A combinação da estratégia com o uso de filtros de estado de mercado pode aumentar a eficácia geral.
Densidade de computação: A estratégia de rastrear várias variáveis e estados pode causar atrasos de execução em algumas plataformas. Otimizar o código e simplificar algumas computações pode melhorar a performance.
Adição de filtros de tendênciasA integração de indicadores de tendência (como a média móvel, o ADX ou o indicador de intensidade de tendência) pode melhorar a qualidade de entrada, negociando apenas na direção da tendência confirmada. Isso reduzirá os sinais errados em mercados de turbulência.
Introdução de um filtro de tempoA introdução de uma janela de tempo ou um período de arrefecimento para a segunda entrada, para evitar o excesso de negociação em um curto período de tempo ou a frequência de entradas e saídas da mesma tendência.
Ajuste de volatilidadeA estratégia pode ser adaptada a diferentes condições de mercado através da adaptação dinâmica dos parâmetros de stop loss e de stop loss com base na volatilidade do mercado (como o ATR). Isso tornará os níveis de stop loss e de stop loss mais adequados às características do mercado atual.
Melhorias na lógica de Heinrich AnsiOs juízos de HA atuais são relativamente simples, podendo ser aumentada a qualidade do sinal por meio da consideração de múltiplos diagramas de HA ou indicadores de HA.
Adição de bloqueio parcial de lucroImplementação de uma função de bloqueio de lucro por etapas, permitindo a liquidação de uma parte da posição quando um determinado nível de lucro é atingido, permitindo que o restante continue a operar, equilibrando a proteção de lucros e a maximização de receitas potenciais.
Optimizar a lógica da região alvo: A região de alvo atual usa um aumento fixo na distância de passo. Algoritmos de ajuste de alvo dinâmico baseados na volatilidade do mercado ou no movimento de preços recentes podem ser considerados para melhor se adaptar às mudanças nas condições do mercado.
A estratégia de metas e travas multicamadas é um sistema de negociação abrangente, que combina a identificação de tendências da Hynesi, gerenciamento de metas dinâmicas, oportunidades de entrada secundária e controle de risco multicamadas. A principal vantagem da estratégia reside em seu mecanismo de expansão de lucro flexível e estrutura de gerenciamento de risco rigorosa, o que a torna adequada para capturar movimentos significativos em mercados de tendências.
Embora a estratégia ofereça uma estrutura robusta, sua eficácia ainda depende de ajustes de parâmetros e condições de mercado adequados. A estratégia pode ser ainda mais robusta e adaptável com a adição de filtros de estado de mercado, mecanismos de ajuste de volatilidade e uma lógica de confirmação de entrada mais complexa.
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Algo Trading v1 | SUNNY GUHA By OIESU", overlay=true, margin_long=100, margin_short=100, pyramiding=100)
// ———— USER INPUTS ———— //
// First Entry Settings
float initialTarget = input.float(10000, "First Entry: Target ($)", minval=1, tooltip="First target level")
float initialStopLoss = input.float(3000, "First Entry: Stop Loss ($)", minval=1, tooltip="Initial stop loss distance")
bool useTrailFirst = input.bool(true, "First Entry: Enable Trail", tooltip="Enable trailing features after first target hit")
float profitTrailStepFirst = input.float(1500, "First Entry: Trail Amount ($)", minval=1, tooltip="Trail amount after first target hit")
bool useTargetZoneFirst = input.bool(true, "First Entry: Enable Target Zone", tooltip="Enable target zone feature")
float targetZoneThresholdFirst = input.float(1000, "First Entry: Target Zone Threshold ($)", minval=1, tooltip="Distance to activate target zone")
float targetIncreaseStepFirst = input.float(2000, "First Entry: Target Increase ($)", minval=1, tooltip="Amount to increase target")
// Second Entry Settings
bool enableSecondEntries = input.bool(true, "Enable Second Entries", tooltip="Allow re-entries after first target hit")
float secondTarget = input.float(5000, "Second Entry: Target ($)", minval=1, tooltip="Target for second entries")
float secondStopLoss = input.float(2000, "Second Entry: Stop Loss ($)", minval=1, tooltip="Stop loss for second entries")
bool useTrailSecond = input.bool(true, "Second Entry: Enable Trail", tooltip="Enable trailing for second entries")
float profitTrailStepSecond = input.float(1500, "Second Entry: Trail Amount ($)", minval=1, tooltip="Trail amount for second entries")
bool useTargetZoneSecond = input.bool(true, "Second Entry: Enable Target Zone", tooltip="Enable target zone")
float targetZoneThresholdSecond = input.float(1000, "Second Entry: Target Zone Threshold ($)", minval=1)
float targetIncreaseStepSecond = input.float(2000, "Second Entry: Target Increase ($)", minval=1)
// ———— HEIKIN-ASHI CALCULATIONS ———— //
var float haOpen = na
var float haClose = na
var float haHigh = na
var float haLow = na
haClose := (open + high + low + close)/4
haOpen := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1])/2
haHigh := math.max(high, math.max(haOpen, haClose))
haLow := math.min(low, math.min(haOpen, haClose))
// ———— TRACKING VARIABLES ———— //
var float highestPrice = na // Tracks highest price for long positions
var float lowestPrice = na // Tracks lowest price for short positions
var float basePrice = na // Entry price for position
var float targetLevel = na // Current target level
var float stopLevel = na // Current stop level
var bool firstTargetHit = false // Indicates if first target was hit
var string tradeDirection = "none" // Current trade direction
var bool isSecondEntry = false // Tracks if current position is a second entry
var bool inTargetZone = false // Tracks if price is in target zone
// ———— SIGNAL DETECTION ———— //
bullish = haClose > haOpen and haClose > haClose[1]
bearish = haClose < haOpen and haClose < haClose[1]
// Entry conditions - only allow second entries if enabled and after first target hit
longCondition = bullish and (tradeDirection != "long" or (enableSecondEntries and firstTargetHit))
shortCondition = bearish and (tradeDirection != "short" or (enableSecondEntries and firstTargetHit))
// Position Management - Long Positions
if strategy.position_size > 0
highestPrice := math.max(high, nz(highestPrice, high))
if isSecondEntry
// Second Entry Management
inTargetZone := useTargetZoneSecond and high >= targetLevel - targetZoneThresholdSecond
if inTargetZone and useTargetZoneSecond
targetLevel := targetLevel + targetIncreaseStepSecond
if useTrailSecond
stopLevel := math.max(stopLevel, highestPrice - profitTrailStepSecond)
if low <= stopLevel
strategy.close_all("Second Entry Stop")
basePrice := na
targetLevel := na
stopLevel := na
highestPrice := na
lowestPrice := na
firstTargetHit := false
isSecondEntry := false
inTargetZone := false
tradeDirection := "none"
else
// First Entry Management - improved profit locking
if not firstTargetHit and high >= basePrice + initialTarget
// First target hit - ALWAYS lock profit at break-even
firstTargetHit := true
stopLevel := basePrice // Move stop to break-even
targetLevel := useTrailFirst ? high + targetIncreaseStepFirst : basePrice + initialTarget
else if firstTargetHit
// Only modify target if trailing is enabled
if useTrailFirst
inTargetZone := useTargetZoneFirst and high >= targetLevel - targetZoneThresholdFirst
if inTargetZone and useTargetZoneFirst
targetLevel := targetLevel + targetIncreaseStepFirst
// Trail stop-loss but never below break-even
stopLevel := math.max(basePrice, highestPrice - profitTrailStepFirst)
else
// Before first target hit
targetLevel := basePrice + initialTarget
stopLevel := basePrice - initialStopLoss
// Exit on stop hit - this could only be at break-even or better after first target
if low <= stopLevel
strategy.close_all("First Entry Stop")
basePrice := na
targetLevel := na
stopLevel := na
highestPrice := na
lowestPrice := na
firstTargetHit := false
isSecondEntry := false
inTargetZone := false
tradeDirection := "none"
// Position Management - Short Positions
if strategy.position_size < 0
lowestPrice := math.min(low, nz(lowestPrice, low))
if isSecondEntry
// Second Entry Management
inTargetZone := useTargetZoneSecond and low <= targetLevel + targetZoneThresholdSecond
if inTargetZone and useTargetZoneSecond
targetLevel := targetLevel - targetIncreaseStepSecond
if useTrailSecond
stopLevel := math.min(stopLevel, lowestPrice + profitTrailStepSecond)
if high >= stopLevel
strategy.close_all("Second Entry Stop")
basePrice := na
targetLevel := na
stopLevel := na
highestPrice := na
lowestPrice := na
firstTargetHit := false
isSecondEntry := false
inTargetZone := false
tradeDirection := "none"
else
// First Entry Management - improved profit locking
if not firstTargetHit and low <= basePrice - initialTarget
// First target hit - ALWAYS lock profit at break-even
firstTargetHit := true
stopLevel := basePrice // Move stop to break-even
targetLevel := useTrailFirst ? low - targetIncreaseStepFirst : basePrice - initialTarget
else if firstTargetHit
// Only modify target if trailing is enabled
if useTrailFirst
inTargetZone := useTargetZoneFirst and low <= targetLevel + targetZoneThresholdFirst
if inTargetZone and useTargetZoneFirst
targetLevel := targetLevel - targetIncreaseStepFirst
// Trail stop-loss but never above break-even
stopLevel := math.min(basePrice, lowestPrice + profitTrailStepFirst)
else
// Before first target hit
targetLevel := basePrice - initialTarget
stopLevel := basePrice + initialStopLoss
// Exit on stop hit - this could only be at break-even or better after first target
if high >= stopLevel
strategy.close_all("First Entry Stop")
basePrice := na
targetLevel := na
stopLevel := na
highestPrice := na
lowestPrice := na
firstTargetHit := false
isSecondEntry := false
inTargetZone := false
tradeDirection := "none"
// New Position Entry
if strategy.position_size == 0
if longCondition
tradeDirection := "long"
basePrice := close
targetLevel := basePrice + (firstTargetHit ? secondTarget : initialTarget)
stopLevel := basePrice - (firstTargetHit ? secondStopLoss : initialStopLoss)
highestPrice := high
isSecondEntry := firstTargetHit
strategy.entry("Long", strategy.long)
else if shortCondition
tradeDirection := "short"
basePrice := close
targetLevel := basePrice - (firstTargetHit ? secondTarget : initialTarget)
stopLevel := basePrice + (firstTargetHit ? secondStopLoss : initialStopLoss)
lowestPrice := low
isSecondEntry := firstTargetHit
strategy.entry("Short", strategy.short)
// ———— VISUALIZATION ———— //
// Entry signals
plotshape(longCondition and (strategy.position_size == 0), title="Buy", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition and (strategy.position_size == 0), title="Sell", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
// Target and stop levels with clearer colors
plot(targetLevel, title="Target Level", color=color.orange, linewidth=2)
plot(stopLevel, title="Stop Level", color=color.red, linewidth=2)
// Break-even level - shown prominently after first target hit
plot(strategy.position_size != 0 and firstTargetHit ? basePrice : na, title="Break-Even Level", color=color.green, linewidth=2, style=plot.style_linebr)
// Debug plots for state tracking
plotchar(firstTargetHit, title="First Target Hit", char="T", location=location.top, color=color.yellow, size=size.tiny)
plotchar(isSecondEntry, title="Second Entry", char="2", location=location.top, color=color.white, size=size.tiny)
plotchar(useTrailFirst and firstTargetHit, title="Trail Active", char="→", location=location.top, color=color.blue, size=size.tiny)
plotchar(inTargetZone, title="Target Zone", char="Z", location=location.top, color=color.fuchsia, size=size.tiny)