Estratégia de negociação de conversão de tendência de choque de valor líquido de volume médio móvel múltiplo

EMA WMA SMA HMA ROC NVO MA TP SL
Data de criação: 2025-02-24 10:05:03 última modificação: 2025-02-27 16:46:30
cópia: 2 Cliques: 352
2
focar em
319
Seguidores

Estratégia de negociação de conversão de tendência de choque de valor líquido de volume médio móvel múltiplo Estratégia de negociação de conversão de tendência de choque de valor líquido de volume médio móvel múltiplo

Visão geral

A estratégia é um sistema de acompanhamento de tendências baseado em volume de transações e mudanças de preços, que prevê a direção do mercado através da computação do indicador de volatilidade de volume de transações líquido (NVO). A estratégia combina vários tipos de médias móveis (EMA, WMA, SMA, HMA) para determinar a tendência do mercado, comparando a relação de posição do indicador de volatilidade com sua linha de sobreposição EMA, e para negociar no momento certo. A estratégia também inclui mecanismos de stop loss e stop loss para controlar o risco e bloquear os lucros.

Princípio da estratégia

O núcleo da estratégia é julgar o sentimento do mercado através da contagem de valores de oscilação de volume de negócios líquidos por dia. Os passos de cálculo são os seguintes:

  1. Calcular o múltiplo do intervalo de preços: um múltiplo entre 0-1 baseado no preço máximo, mínimo e de encerramento do dia
  2. Calcular o volume de transação que efetivamente sobe e desce: ponderando o volume de transação em função da direção da mudança de preço e multiplicando-o
  3. Calcular o volume de negócios líquido: subtrair o volume de negócios efetivamente aumentado do volume de negócios efetivamente diminuído
  4. Média móvel selecionada pelo aplicativo: processamento suave dos dados de volume de transação líquido
  5. Calculando a linha de sobreposição EMA: uma linha de referência para o julgamento de tendências
  6. Calcular a taxa de variação (ROC): para determinar a variação da intensidade da tendência

A geração de sinais de negociação baseia-se nas seguintes regras:

  • Multicondicionamento: coloque uma linha de sobreposição de EMA no indicador de tremor
  • Condições de vazio: atravessar a linha de sobreposição da EMA sob o indicador de tremor
  • Stop Loss: Stop Loss baseado em percentagem
  • Paragem: Paragem de preços baseada em percentagem

Vantagens estratégicas

  1. Análise multidimensional: informações de mercado em três dimensões: preço, volume de transação e taxa de variação de tendência
  2. Alta flexibilidade: suporte a vários tipos de médias móveis, que podem ser ajustadas de acordo com diferentes características do mercado
  3. Gerenciamento de risco perfeito: contém mecanismos de suspensão de prejuízos para controlar os riscos de forma eficaz
  4. Forte visualização: mudanças na intensidade da tendência através de gráficos rectângulos, facilitando a compreensão do estado do mercado
  5. Adaptabilidade: adaptação a diferentes ambientes de mercado e variedades de negociação por meio de um design parametrizado

Risco estratégico

  1. Risco de reversão de tendência: falsos sinais frequentes em mercados turbulentos
  2. Risco de atraso: a própria média móvel tem um certo atraso, o que pode levar a que o tempo de entrada e saída não seja o ideal
  3. Sensibilidade dos parâmetros: Diferentes combinações de parâmetros podem levar a grandes diferenças no desempenho da estratégia
  4. Dependência do cenário de mercado: pode ter um desempenho fraco em certos cenários de mercado
  5. Limitações técnicas: baseia-se apenas em indicadores técnicos, sem considerar os fatores fundamentais

Sugestões de controle de risco:

  • Recomendação de otimização de parâmetros em diferentes cenários de mercado
  • Pode ser combinado com outros indicadores técnicos para a confirmação de sinais
  • Ajustar adequadamente os parâmetros de stop loss para adaptar-se às diferentes volatilidades do mercado

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

  1. Mecanismos de confirmação de sinais:

    • Aumento da condição de confirmação de volume
    • Adicionar filtro de força de tendência
    • Introdução de um mecanismo adaptativo de volatilidade
  2. Otimização da gestão de riscos:

    • Implementando um mecanismo de stop loss dinâmico
    • Adição de módulo de gestão de fundos
    • Introdução de mecanismos de construção e redução de estoque por lotes
  3. Parâmetros de otimização:

    • Desenvolvimento de mecanismos de ajuste de parâmetros de adaptação
    • Realização de comutação de parâmetros baseada em cenários de mercado
    • Adicionar um modelo de aprendizado de máquina para otimização de parâmetros

Resumir

A principal característica da estratégia é a combinação de vários indicadores técnicos e oferece opções de configuração de parâmetros flexíveis. Apesar de existir um certo risco, a estratégia espera obter um retorno estável na negociação real através de um controle razoável do risco e otimização contínua. É recomendado que os comerciantes façam um bom feedback antes de usar no mercado real e ajustar adequadamente os parâmetros de acordo com as condições específicas do mercado.

Código-fonte da estratégia
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("EMA-Based Net Volume Oscillator with Trend Change", shorttitle="NVO Trend Change", overlay=false, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input parameters
maType = input.string("WMA", "Moving Average Type", options=["WMA", "EMA", "SMA", "HMA"])
maLength = input.int(21, "MA Length", minval=1)
emaOverlayLength = input.int(9, "EMA Overlay Length", minval=1)
oscillatorMultiplier = input.float(1.0, "Oscillator Multiplier", minval=0.1, step=0.1)
showHistogram = input.bool(true, "Show Histogram")

stopLossPerc = input.float(1.0, "Stop Loss (%)", tooltip="Set 999 to disable")
takeProfitPerc = input.float(2.0, "Take Profit (%)", tooltip="Set 999 to disable")

// Calculate Net Volume Oscillator
priceRange = high - low
multiplier = priceRange > 0 ? (close - low) / priceRange : 0.5
var float effectiveUpVol = 0.0
var float effectiveDownVol = 0.0

if close > close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else if close < close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else
    effectiveUpVol := 0.0
    effectiveDownVol := 0.0

netVolume = effectiveUpVol - effectiveDownVol
dailyNetOscillator = volume > 0 ? (netVolume / volume) * 100 : 0

// Apply selected Moving Average
var float oscillator = na
if maType == "WMA"
    oscillator := ta.wma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "EMA"
    oscillator := ta.ema(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "SMA"
    oscillator := ta.sma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "HMA"
    oscillator := ta.hma(dailyNetOscillator, maLength) * oscillatorMultiplier

// EMA Overlay
emaOverlay = ta.ema(oscillator, emaOverlayLength)

// Rate of Change (ROC) for Oscillator
roc = ta.roc(oscillator, 1)  // 1-period rate of change

// Trading logic
longCondition = oscillator > emaOverlay
shortCondition = oscillator < emaOverlay

// Exit conditions
exitLong = oscillator < emaOverlay and strategy.position_size > 0
exitShort = oscillator > emaOverlay and strategy.position_size < 0

// Execute trades
if longCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)
if exitLong
    strategy.close("Long")

if shortCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)
if exitShort
    strategy.close("Short")

// Stop Loss and Take Profit
stopLossLong = stopLossPerc != 999 ? strategy.position_avg_price * (1 - stopLossPerc/100) : na
takeProfitLong = takeProfitPerc != 999 ? strategy.position_avg_price * (1 + takeProfitPerc/100) : na

stopLossShort = stopLossPerc != 999 ? strategy.position_avg_price * (1 + stopLossPerc/100) : na
takeProfitShort = takeProfitPerc != 999 ? strategy.position_avg_price * (1 - takeProfitPerc/100) : na

if (not na(stopLossLong) and not na(takeProfitLong) and strategy.position_size > 0)
    strategy.exit("Long SL/TP", "Long", stop=stopLossLong, limit=takeProfitLong)

if (not na(stopLossShort) and not na(takeProfitShort) and strategy.position_size < 0)
    strategy.exit("Short SL/TP", "Short", stop=stopLossShort, limit=takeProfitShort)

// Plotting
plot(oscillator, "Net Volume Oscillator", color.blue)
plot(emaOverlay, "EMA Overlay", color.orange)
hline(0, "Zero Line", color.gray)

// Histogram with Trend Change Visualization
var color histogramColor = na
if oscillator > 0
    histogramColor := roc >= 0 ? color.new(color.green, 70) : color.new(color.lime, 70)  // Green for bullish, light green for weakening
else if oscillator < 0
    histogramColor := roc >= 0 ? color.new(color.red, 70) : color.new(color.maroon, 70)  // Red for bearish, light red for weakening

plot(showHistogram ? oscillator : na, style=plot.style_histogram, color=histogramColor, title="Histogram")