
A estratégia de multi-marco de onda de tendência de rastreador de estratégia é uma estratégia de multi-marco de tendência de rastreamento de sistema de negociação com base no indicador WaveTrend. A estratégia foi especialmente otimizada para o período de 15 minutos, com uma abordagem de alinhamento de três camadas de tempo: 240 minutos WaveTrend como um macro-filtro de tendência, 30 minutos WaveTrend para a confirmação de impulso, e 15 minutos WaveTrend é responsável pela geração de sinais. A estratégia está no centro de identificar os pontos de entrada e saída através da identificação de cruzamentos de indicadores WaveTrend em diferentes períodos de tempo, combinando mecanismos avançados de rastreamento de perda, incluindo a lógica de rastreamento com base no maior lucro e a tolerância de retração com base em porcentagem, para maximizar os lucros e controlar o risco de forma eficaz.
O princípio central da estratégia é usar a sinergia do indicador WaveTrend em vários períodos de tempo para identificar a direção da tendência e os pontos de reversão. O indicador WaveTrend é um indicador técnico que mede o estado de sobrecompra e sobrevenda de preços, combinando o cálculo da relação entre o preço e sua média móvel indexada (EMA).
O processo de implementação da estratégia é o seguinte:
Primeiro, defina a função WaveTrend, que calcula dois valores principais (wt1 e wt2):
A estratégia consiste em aplicar o indicador WaveTrend em três prazos:
Condições de entrada:
O mecanismo de suspensão de prejuízos e eliminação de jogos é composto por:
A estratégia registra e rastreia o preço de entrada, os pilares de entrada e a taxa de retorno máxima de cada transação, que são usados para ajustar dinamicamente o ponto de saída.
Multi-quadros de tempo em conjuntoPor meio da análise do indicador de WaveTrend em diferentes prazos, a estratégia pode capturar a tendência do mercado de forma mais abrangente, reduzindo a interferência de falsos sinais e aumentando a precisão da negociação. O quadro de tempo baixo fornece pontos de entrada precisos e o quadro de tempo alto garante que a direção da negociação esteja de acordo com a tendência principal.
Mecanismo de parada dinâmicaA estratégia usa um sistema de proteção de três paradas, incluindo paradas de porcentagem fixa, paradas de rastreamento baseadas em ganhos e mecanismos de proteção de máxima receita. Esta estratégia de parada de perda composta permite capturar o máximo de receita em tendência, enquanto protege o capital.
Sistema de feedback visualOs pontos de entrada e saída de transações são marcados visualmente no gráfico por meio de etiquetas coloridas (🔴) e contêm informações de colunas para facilitar a análise de retrospectiva e a recuperação de transações.
Parâmetros flexíveisA estratégia oferece vários parâmetros personalizáveis, incluindo percentual de acionamento de stop loss, percentual de acompanhamento de tracking e percentual de retirada máxima permitida, que o usuário pode ajustar de acordo com suas preferências de risco e condições de mercado.
Estrutura de código claraA estratégia é projetada de forma funcional, as partes são explicadas logicamente, são fáceis de entender e manter, mas também facilitam a otimização e a expansão.
Reacção tardia à mudança de tendênciaComo uma estratégia de acompanhamento de tendência, pode haver uma reação de atraso nos pontos de reversão de tendência, resultando em uma maior retração quando a tendência se reverte. A solução é ajustar os parâmetros de rastreamento de stop loss ou adicionar um indicador adicional de reversão de tendência como auxiliar.
Mercado de baixa volatilidadeEm ambientes de mercado de correção horizontal ou de forte volatilidade, a estratégia pode produzir falsos sinais e paradas frequentes, resultando em perdas contínuas. Recomenda-se que a estratégia seja ativada somente quando o mercado está em uma tendência evidente.
Sensibilidade do parâmetroO desempenho da estratégia é bastante sensível à configuração de parâmetros do WaveTrend (n1 = 10, n2 = 21) e aos parâmetros de parada. Parâmetros excessivamente relaxados podem levar a paradas tardias e parâmetros excessivamente apertados podem sair prematuramente de uma tendência favorável.
Risco de liquidez: O código usa o valor de capital relativo ((10%) como padrão para negociar, mas isso pode causar aumento de pontos de deslizamento ou dificuldade de transação em mercados de baixa liquidez. O tamanho da posição deve ser ajustado de acordo com a liquidez da variedade de negociação real.
Solicitação de dependência de dados externosA estratégia é usar a função request.security () para obter dados de quadros de tempo mais elevados, o que pode levar a atrasos ou a risco de inexistência de dados em algumas plataformas de negociação. Certifique-se de que o ambiente de negociação suporta solicitações de dados de quadros de tempo múltiplos.
Ajuste de parâmetros dinâmicos: A estratégia atual usa parâmetros de WaveTrend e parâmetros de stop-loss fixos, podendo ser considerado o ajuste desses parâmetros de acordo com a volatilidade do mercado (como o ATR). Por exemplo, aumentar a distância de stop-loss em ambientes de alta volatilidade e apertar o stop-loss em ambientes de baixa volatilidade para se adaptar a diferentes condições de mercado.
Filtragem de intensidade de tendência: Pode ser adicionado o ADX ou indicadores similares para medir a força da tendência, executando apenas quando a força da tendência ultrapassa um determinado limiar, evitando o excesso de negociação em mercados de tendência fraca ou horizontal.
Optimizar a escolha do período de tempoA estratégia atual usa os prazos de 15, 30 e 60 minutos, para encontrar a combinação ideal de prazos por meio da análise de retorno, ou para ajustar prazos de acordo com as características de diferentes variedades de negociação.
Confirmação de volume de transaçãoA integração dos indicadores de volume de transação nas condições de entrada, garantindo a entrada apenas em tendências de suporte de volume de transação e melhorando a qualidade do sinal.
Melhorias no mecanismo de partidaA saída atual depende principalmente do stop loss trigger, podendo ser considerado adicionar um objetivo de lucro ou um sinal de reversão baseado no próprio indicador WaveTrend como condição de saída ativa, em vez de depender apenas do stop loss passivo.
Adição de lógica de gerenciamento de posiçãoA estratégia atual é usar o gerenciamento de fundos em porcentagens fixas, podendo considerar o tamanho da posição de ajuste dinâmico com base na volatilidade ou na intensidade do sinal, aumentando a posição em transações mais seguras e reduzindo a abertura de risco em transações com maior incerteza.
A estratégia do rastreador de tendências de ondas de múltiplos quadros temporais é um sistema de rastreamento de tendências bem projetado, que capta efetivamente as tendências do mercado e controla os riscos por meio da sinergia do indicador WaveTrend de múltiplos quadros temporais, combinado com um mecanismo de stop loss de rastreamento flexível. A principal vantagem da estratégia reside na sua visão abrangente do mercado e na sua abordagem de gerenciamento de risco dinâmica, mas pode ser desafiada em mercados de flutuação.
/*backtest
start: 2024-07-07 00:00:00
end: 2024-11-28 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("WT-FLOW: MTF WaveTrend Trend-Follower", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === WaveTrend Fonksiyonu ===
waveTrend(_src, _n1, _n2) =>
esa = ta.ema(_src, _n1)
d = ta.ema(math.abs(_src - esa), _n1)
ci = (_src - esa) / (0.015 * d)
wt1 = ta.ema(ci, _n2)
wt2 = ta.sma(wt1, 4)
[wt1, wt2]
// === Giriş Fiyatı ve Maksimum Kazanç Değişkenleri ===
var float longEntryPrice = na
var float shortEntryPrice = na
var float maxGainLong = 0.0
var float maxGainShort = 0.0
var int longEntryBar = na
var int shortEntryBar = na
var string currentPosition = ""
// === WT Değerlerini Al (Farklı Zaman Dilimleri) ===
var int n1 = 10
var int n2 = 21
ap = hlc3
[wt1_15, wt2_15] = waveTrend(ap, n1, n2)
[wt1_30, wt2_30] = request.security(syminfo.tickerid, "30", waveTrend(ap, n1, n2))
[wt1_60, wt2_60] = request.security(syminfo.tickerid, "60", waveTrend(ap, n1, n2))
// === Kullanıcı Girdileri: Trailing Stop Parametreleri ===
marginStopPerc = input.float(2.0, "Marjinal Stop (%)")
trailTriggerPerc = input.float(1.5, "Trailing Tetikleyici (%)")
trailFollowPerc = input.float(0.8, "Trailing Takip (%)")
trailMaxDropPerc = input.float(3.0, "Maksimum Düşüş (%)")
// === ATR için tr hesaplaması ===
tr = ta.tr(true)
// === Sinyal Koşulları ===
trendUp = wt1_30 > wt2_30
trendDown = wt1_30 < wt2_30
entryLong = ta.crossover(wt1_15, wt2_15) and wt1_15 > -60 and trendUp
entryShort = ta.crossunder(wt1_15, wt2_15) and wt1_15 < 20 and trendDown
// === Pozisyon Girişleri ===
if entryLong and currentPosition != "Long"
strategy.entry("Long", strategy.long)
longEntryPrice := close
maxGainLong := 0.0
longEntryBar := bar_index
currentPosition := "Long"
label.new(bar_index, high + 2 * tr, "🟢 Giriş Long #" + str.tostring(bar_index), style=label.style_label_up, color=color.green, textcolor=color.white)
if entryShort and currentPosition != "Short"
strategy.entry("Short", strategy.short)
shortEntryPrice := close
maxGainShort := 0.0
shortEntryBar := bar_index
currentPosition := "Short"
label.new(bar_index, low - 2 * tr, "🔴 Giriş Short #" + str.tostring(bar_index), style=label.style_label_down, color=color.red, textcolor=color.white)
// === Trailing Stop ve Marjinal Stop Seviyeleri ===
if currentPosition == "Long" and not na(longEntryPrice)
gainFromEntry = (close - longEntryPrice) / longEntryPrice * 100
maxGainLong := math.max(maxGainLong, gainFromEntry)
trailTriggerReached = gainFromEntry >= trailTriggerPerc
trailStop = close * (1 - trailFollowPerc / 100)
dropStop = longEntryPrice * (1 + (maxGainLong - trailMaxDropPerc) / 100)
finalStop = trailTriggerReached ? math.max(trailStop, dropStop) : longEntryPrice * (1 - marginStopPerc / 100)
if close <= finalStop
strategy.close("Long")
label.new(bar_index, low - 2 * tr, "❅ Çıkış Long #" + str.tostring(longEntryBar), style=label.style_label_down, color=color.red, textcolor=color.white)
longEntryPrice := na
longEntryBar := na
currentPosition := ""
if currentPosition == "Short" and not na(shortEntryPrice)
gainFromEntryShort = (shortEntryPrice - close) / shortEntryPrice * 100
maxGainShort := math.max(maxGainShort, gainFromEntryShort)
trailTriggerReachedShort = gainFromEntryShort >= trailTriggerPerc
trailStopShort = close * (1 + trailFollowPerc / 100)
dropStopShort = shortEntryPrice * (1 - (maxGainShort - trailMaxDropPerc) / 100)
finalStopShort = trailTriggerReachedShort ? math.min(trailStopShort, dropStopShort) : shortEntryPrice * (1 + marginStopPerc / 100)
if close >= finalStopShort
strategy.close("Short")
label.new(bar_index, high + 2 * tr, "❄ Çıkış Short #" + str.tostring(shortEntryBar), style=label.style_label_up, color=color.green, textcolor=color.white)
shortEntryPrice := na
shortEntryBar := na
currentPosition := ""