Estratégia avançada de negociação de fusão de fitas WaveTrend e EMA

WT EMA HLC3 SMA MA
Data de criação: 2025-01-06 15:21:57 última modificação: 2025-01-06 15:21:57
cópia: 3 Cliques: 405
1
focar em
1617
Seguidores

Estratégia avançada de negociação de fusão de fitas WaveTrend e EMA

Visão geral

Esta estratégia é um sistema de negociação avançado que combina o oscilador WaveTrend com bandas de média móvel EMA. Ao integrar esses dois indicadores técnicos, é formada uma estratégia de negociação que pode capturar com precisão os pontos de inflexão nas tendências do mercado. A estratégia adota configurações dinâmicas de stop-profit e stop-loss, buscando retornos mais altos e protegendo a segurança do capital.

Princípio da estratégia

O núcleo da estratégia é identificar sinais de negociação por meio da coordenação do indicador WaveTrend e das oito médias móveis EMA. O indicador WaveTrend mede o estado de sobrecompra ou sobrevenda do mercado calculando o desvio entre o preço e a média móvel. A banda da média móvel da EMA confirma a direção da tendência cruzando médias móveis de diferentes períodos. Especificamente:

  1. Quando EMA2 cruza EMA8, ou um sinal de triângulo azul aparece (EMA2 cruza EMA3) e não há padrão de diamante de sangue, um sinal longo é acionado.
  2. Quando a EMA8 cruza a EMA2, ou um padrão de diamante sangrento aparece, um sinal curto é acionado.
  3. A configuração de stop loss usa o ponto extremo após o sinal reverso anterior, o que pode controlar efetivamente o risco
  4. A meta de lucro é definida em 2 a 3 vezes a distância do stop loss, refletindo uma boa relação risco-retorno

Vantagens estratégicas

  1. O mecanismo de dupla confirmação melhora a confiabilidade dos sinais de negociação
  2. As configurações dinâmicas de stop loss podem se adaptar melhor às flutuações do mercado
  3. Com uma clara definição da relação risco-retorno
  4. O uso de bandas de média móvel EMA ajuda a determinar a tendência geral do mercado
  5. O indicador WaveTrend pode identificar efetivamente as condições de mercado de sobrecompra e sobrevenda
  6. A lógica da estratégia é clara, fácil de entender e implementar

Risco estratégico

  1. Sinais falsos frequentes podem ocorrer em mercados voláteis
  2. O stop loss dinâmico pode ser facilmente acionado durante flutuações voláteis
  3. Indicadores que dependem de dados históricos podem falhar quando o mercado muda drasticamente.
  4. O uso de múltiplos indicadores técnicos pode levar a sinais atrasados Solução:
  • Filtros de volatilidade podem ser adicionados para reduzir sinais falsos em mercados voláteis
  • Considere usar uma configuração de stop loss mais flexível
  • Adicionar mecanismo de confirmação de força de tendência

Direção de otimização da estratégia

  1. Introduzir indicadores de volatilidade de mercado (como ATR) para ajustar dinamicamente a distância de stop loss
  2. Adicionar mecanismo de confirmação de volume para melhorar a confiabilidade do sinal
  3. Considere adicionar um filtro de força de tendência para negociar apenas em mercados com tendências fortes
  4. Otimize os parâmetros do WaveTrend para melhor adaptação a diferentes ambientes de mercado
  5. Estude a sinergia de sinais em diferentes períodos de tempo

Resumir

Este é um sistema de negociação completo que combina acompanhamento de tendências e osciladores de análise técnica. Ao usar as bandas de média móvel WaveTrend e EMA em combinação, você pode não apenas compreender a tendência geral, mas também entrar no mercado no momento certo no ponto de virada da tendência. O mecanismo dinâmico de gerenciamento de stop-profit e stop-loss fornece à estratégia boas capacidades de controle de risco. O espaço de otimização da estratégia reside principalmente na melhoria da filtragem de sinais e na gestão de riscos.

Código-fonte da estratégia
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("VuManChu Cipher A Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, default_qty_value=1.0)

// === 函数定义 ===
// WaveTrend函数
f_wavetrend(_src, _chlen, _avg, _malen) =>
    _esa = ta.ema(_src, _chlen)
    _de = ta.ema(math.abs(_src - _esa), _chlen)
    _ci = (_src - _esa) / (0.015 * _de)
    _tci = ta.ema(_ci, _avg)
    _wt1 = _tci
    _wt2 = ta.sma(_wt1, _malen)
    [_wt1, _wt2]

// EMA Ribbon函数
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

// === 变量声明 ===
var float stopPrice = na      // 止损价格变量
var float targetPrice = na    // 止盈价格变量
var float lastLongPrice = na
var float lastShortPrice = na
var float highestSinceLastLong = na
var float lowestSinceLastShort = na

// === WaveTrend参数 ===
wtChannelLen = input.int(9, title = 'WT Channel Length')
wtAverageLen = input.int(13, title = 'WT Average Length')
wtMASource = hlc3
wtMALen = input.int(3, title = 'WT MA Length')

// === EMA Ribbon参数 ===
ema1Len = input.int(5, "EMA 1 Length")
ema2Len = input.int(11, "EMA 2 Length")
ema3Len = input.int(15, "EMA 3 Length")
ema4Len = input.int(18, "EMA 4 Length")
ema5Len = input.int(21, "EMA 5 Length")
ema6Len = input.int(24, "EMA 6 Length")
ema7Len = input.int(28, "EMA 7 Length")
ema8Len = input.int(34, "EMA 8 Length")

// === 计算指标 ===
// WaveTrend计算
[wt1, wt2] = f_wavetrend(wtMASource, wtChannelLen, wtAverageLen, wtMALen)

// WaveTrend交叉条件
wtCross = ta.cross(wt1, wt2)
wtCrossDown = wt2 - wt1 >= 0

// EMA Ribbon计算
[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

// === 交易信号 ===
longEma = ta.crossover(ema2, ema8)
shortEma = ta.crossover(ema8, ema2)
redCross = ta.crossunder(ema1, ema2)
blueTriangle = ta.crossover(ema2, ema3)
redDiamond = wtCross and wtCrossDown
bloodDiamond = redDiamond and redCross

// 更新最高最低价
if not na(lastLongPrice)
    highestSinceLastLong := math.max(high, nz(highestSinceLastLong))
if not na(lastShortPrice)
    lowestSinceLastShort := math.min(low, nz(lowestSinceLastShort))

// === 交易信号条件 ===
longCondition = longEma or (blueTriangle and not bloodDiamond)
shortCondition = shortEma or bloodDiamond

// === 执行交易 ===
if (longCondition)
    // 记录多头入场价格
    lastLongPrice := close
    // 重置最高价跟踪
    highestSinceLastLong := high
    
    stopPrice := nz(lowestSinceLastShort, close * 0.98)  // 使用前一个空头信号后的最低价作为止损
    float riskAmount = math.abs(close - stopPrice)
    targetPrice := close + (riskAmount * 2)  // 止盈为止损距离的2倍
    
    strategy.entry("做多", strategy.long)
    strategy.exit("多头止盈止损", "做多", limit=targetPrice, stop=stopPrice)

if (shortCondition)
    // 记录空头入场价格
    lastShortPrice := close
    // 重置最低价跟踪
    lowestSinceLastShort := low
    
    stopPrice := nz(highestSinceLastLong, close * 1.02)  // 使用前一个多头信号后的最高价作为止损
    float riskAmount = math.abs(stopPrice - close)
    targetPrice := close - (riskAmount * 3)  // 止盈为止损距离的2倍
    
    strategy.entry("做空", strategy.short)
    strategy.exit("空头止盈止损", "做空", limit=targetPrice, stop=stopPrice)

// === 绘制信号 ===
plotshape(longCondition, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.small, title="做多信号")
plotshape(shortCondition, style=shape.triangledown, color=color.red, location=location.abovebar, size=size.small, title="做空信号")

// 绘制止损线
plot(strategy.position_size > 0 ? stopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="多头止损线")
plot(strategy.position_size < 0 ? stopPrice : na, color=color.red, style=plot.style_linebr, linewidth=2, title="空头止损线")

// 绘制止盈线
plot(strategy.position_size > 0 ? targetPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="多头止盈线")
plot(strategy.position_size < 0 ? targetPrice : na, color=color.green, style=plot.style_linebr, linewidth=2, title="空头止盈线")