Estratégia de negociação de reversão de média móvel de tendência composta

MA EMA TEMA DEMA WMA SMA
Data de criação: 2025-02-20 17:20:42 última modificação: 2025-02-27 17:23:21
cópia: 0 Cliques: 394
2
focar em
319
Seguidores

Estratégia de negociação de reversão de média móvel de tendência composta Estratégia de negociação de reversão de média móvel de tendência composta

Visão geral

A estratégia é um sistema de acompanhamento de tendências e inversão de negociação baseado em linha de equilíbrio composta. Identifica oportunidades de negociação através da combinação de médias móveis de diferentes períodos, em combinação com a reação dos preços à linha de equilíbrio. O núcleo da estratégia é o julgamento do momento de negociação observando a relação entre os preços e a linha de equilíbrio e a reação dos preços ao retorno a um determinado depreciamento.

Princípio da estratégia

A estratégia usa uma combinação de vários tipos de médias móveis (EMA, TEMA, DEMA, WMA, SMA) para construir uma média composta através de duas médias ponderadas ou aritméticas de dois períodos diferentes (default 20 e 30). A estratégia espera que o preço volte para perto da média (com controle de parâmetros percentuais de reação) após a tendência ser estabelecida.

Vantagens estratégicas

  1. O sistema tem uma boa adaptabilidade, com suporte a vários tipos de linha média, sendo possível escolher a linha média mais adequada de acordo com as diferentes características do mercado.
  2. A combinação da linha média reduz a possibilidade de falsos sinais de uma única linha média periódica.
  3. A estratégia adiciona o conceito de porcentagem de reação, evitando o simples cruzamento de transações em linha e aumentando a confiabilidade das transações.
  4. Quando a direção da tendência é clara, pode-se obter um melhor preço de negociação esperando a entrada de um retorno.

Risco estratégico

  1. Em mercados em turbulência, pode haver frequentes falsos sinais, o que aumenta os custos de negociação.
  2. O atraso da linha média composta pode causar atrasos nos horários de entrada e saída.
  3. A percentagem de resposta fixa pode precisar de ser ajustada em diferentes cenários de mercado.
  4. No entanto, em mercados que mudam de tendência rapidamente, pode haver uma retracção maior.

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

  1. Pode-se introduzir indicadores de volatilidade para ajustar dinamicamente a percentagem de resposta, de modo a que a estratégia se adapte melhor a diferentes circunstâncias de mercado.
  2. Adição de um fator de volume de transação para confirmar a eficácia da inversão de preços.
  3. Considerar a adição de mecanismos de suspensão e parada para melhor controlar o risco.
  4. Pode-se aumentar o julgamento da intensidade da tendência, usando configurações de parâmetros mais radicais em tendências fortes.
  5. Considerar a inclusão de um julgamento de mercado, usando diferentes conjuntos de parâmetros em diferentes características de mercado.

Resumir

Trata-se de uma estratégia que combina o seguimento de tendências e a ideia de negociação inversa para capturar oportunidades de negociação por meio de uma combinação de linha média e mecanismo de reação de preços. A principal vantagem da estratégia reside na sua flexibilidade e capacidade de filtrar sinais falsos, mas também requer atenção para a otimização de parâmetros em diferentes ambientes de mercado.

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

//@version=5
strategy("Ultrajante MA Reaction Strategy", overlay=true, initial_capital=10000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ===== Custom Functions for DEMA and TEMA =====
dema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    2 * ema1 - ema2

tema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    ema3 = ta.ema(ema2, length)
    3 * ema1 - 3 * ema2 + ema3

// ===== Configuration Parameters =====

// MA Type Selection
maType = input.string(title="MA Type", defval="EMA", options=["SMA", "EMA", "WMA", "DEMA", "TEMA"])

// Parameters for composite periods
periodA = input.int(title="Period A", defval=20, minval=1)
periodB = input.int(title="Period B", defval=30, minval=1)
compMethod = input.string(title="Composite Method", defval="Average", options=["Average", "Weighted"])

// Reaction percentage (e.g., 0.5 means 0.5%)
reactionPerc = input.float(title="Reaction %", defval=0.5, step=0.1)

// ===== Composite Period Calculation =====
compPeriod = compMethod == "Average" ? math.round((periodA + periodB) / 2) : math.round((periodA * 0.6 + periodB * 0.4))

// ===== Moving Average Calculation based on selected type =====
ma = switch maType
    "SMA"  => ta.sma(close, compPeriod)
    "EMA"  => ta.ema(close, compPeriod)
    "WMA"  => ta.wma(close, compPeriod)
    "DEMA" => dema(close, compPeriod)
    "TEMA" => tema(close, compPeriod)
    => ta.ema(close, compPeriod)  // Default value

plot(ma, color=color.blue, title="MA")

// ===== Trend Definition =====
trendUp = close > ma
trendDown = close < ma

// ===== Reaction Threshold Calculation =====
// In uptrend: expect the price to retrace to or below a value close to the MA
upThreshold = ma * (1 - reactionPerc / 100)
// In downtrend: expect the price to retrace to or above a value close to the MA
downThreshold = ma * (1 + reactionPerc / 100)

// ===== Quick Reaction Detection =====
// For uptrend: reaction is detected if the low is less than or equal to the threshold and the close recovers and stays above the MA
upReaction = trendUp and (low <= upThreshold) and (close > ma)
// For downtrend: reaction is detected if the high is greater than or equal to the threshold and the close stays below the MA
downReaction = trendDown and (high >= downThreshold) and (close < ma)

// ===== Trade Execution =====
if upReaction
    // Close short position if exists and open long position
    strategy.close("Short", comment="Close Short due to Bullish Reaction")
    strategy.entry("Long", strategy.long, comment="Long Entry due to Bullish Reaction in Uptrend")

if downReaction
    // Close long position if exists and open short position
    strategy.close("Long", comment="Close Long due to Bearish Reaction")
    strategy.entry("Short", strategy.short, comment="Short Entry due to Bearish Reaction in Downtrend")

// ===== Visualization of Reactions on the Chart =====
plotshape(upReaction, title="Bullish Reaction", style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small, text="Long")
plotshape(downReaction, title="Bearish Reaction", style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small, text="Short")