Tendência de média móvel dupla de acordo com a estratégia

Autora:ChaoZhang, Data: 2024-03-22 13:56:44
Tags:

img

Resumo

Esta estratégia utiliza o cruzamento de duas médias móveis para determinar mudanças nas tendências do mercado e toma decisões de compra/venda com base na direção da tendência.

Princípio da estratégia

O núcleo desta estratégia é composto por duas médias móveis: uma MA rápida (período de inadimplência 32) e uma MA lenta (também período de inadimplência 32), ajustável através de parâmetros.

  • Quando o MA rápido cruza acima do MA lento, vá longo
  • Quando o MA rápido cruza abaixo do MA lento, vá curto
  • Quando já se detém uma posição longa, se a MA rápida cruzar abaixo da MA lenta, fechar longa e ficar curta
  • Quando já se mantém uma posição curta, se o MA rápido cruzar acima do MA lento, fechar curto e ir longo

Através deste método de cruzamento MA, a estratégia pode seguir a tendência, mantendo posições longas em tendências ascendentes e posições curtas em tendências descendentes, até que apareça um sinal de reversão.

Análise das vantagens

  1. Seguimento de tendências: Ao utilizar cruzamento de MA para identificar tendências, a estratégia pode capturar e acompanhar de forma eficaz as principais tendências do mercado.
  2. Simples e fáceis de usar: a lógica da estratégia é clara, usando apenas dois MA. As configurações de parâmetros são simples e fáceis de entender e dominar.
  3. Ampla aplicabilidade: a estratégia é amplamente aplicável a diferentes instrumentos e prazos e pode ser utilizada em vários mercados.
  4. Stop-loss oportuno: quando a tendência se inverte, a estratégia pode fechar posições prontamente para controlar as perdas.

Análise de riscos

  1. Mal desempenho em mercados variados: quando o mercado está em um padrão lateral, sinais cruzados frequentes levarão a negociações e perdas excessivas.
  2. Resposta inadequada a movimentos extremos: a estratégia pode reagir muito lentamente a situações extremas (como subidas ou descidas rápidas), levando a grandes perdas.
  3. Dificuldade na otimização de parâmetros: a otimização dos parâmetros MA requer uma grande quantidade de dados históricos e backtesting.

Para abordar esses riscos, pode-se considerar a adição de filtros apropriados, como ATR ou filtros de faixa verdadeira média, para reduzir o excesso de negociação em mercados variados; definir stop-loss razoáveis para controlar as perdas de negociação única; e otimizar continuamente os parâmetros para se adaptar ao mercado.

Direcção de otimização

  1. Confirmação da tendência: Após a geração de um sinal de negociação, podem ser incorporados indicadores adicionais de confirmação da tendência, como o MACD ou o DMI, para filtrar ainda mais os sinais.
  2. O valor da taxa de juro é o valor da taxa de juro de cada um dos bancos centrais da União.
  3. Dimensão da posição: ajuste dinâmico do tamanho da posição com base na força da tendência, volatilidade e outros indicadores.
  4. Análise de quadros de tempo múltiplos: considerar um sistema de MA de quadros de tempo múltiplos, como a combinação de MA diários e de 4 horas, para filtrar e confirmar uns aos outros e melhorar a precisão da identificação de tendências.
  5. Parâmetros adaptativos: introduzir métodos de otimização de parâmetros adaptativos, tais como algoritmos genéticos, para permitir que os parâmetros da estratégia se adaptem às diferentes condições do mercado.

As otimizações acima mencionadas podem melhorar a capacidade da estratégia de lidar com mercados complexos, mas deve-se tomar cuidado para evitar a otimização excessiva que pode levar à adaptação da curva e a um desempenho futuro pobre.

Resumo

A estratégia de dupla MA segue as tendências através de crossovers de MA. É simples, fácil de usar e amplamente aplicável.

A estratégia pode ser otimizada através da introdução de mais indicadores de filtragem, stop-losses dinâmicos, dimensionamento de posição, análise de vários prazos e parâmetros adaptativos.

Em geral, esta estratégia pode servir como uma estratégia básica de acompanhamento de tendências, mas é difícil de ser isolada e é mais adequada como parte de um portfólio de estratégias.


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

//study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true)
strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15)

// Backtest Date Range
start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530'))
end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530'))
backtest_range = true

// Inputs
maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA')
sslLen = input(title='SSL Length', defval=32)
showCross = input(title='Show Crossover?', defval=true)
showEntry = input(title='Show Entry?', defval=true)
showTrend = input(title='Show Trend Colors?', defval=true)

// Calc MA for SSL Channel
calc_ma(close, len, type) =>
    float result = 0
    if type == 'SMA'  // Simple
        result := ta.sma(close, len)
        result
    if type == 'EMA'  // Exponential
        result := ta.ema(close, len)
        result
    if type == 'WMA'  // Weighted
        result := ta.wma(close, len)
        result    
    result

// Add SSL Channel
maHigh = calc_ma(high, sslLen, maType)
maLow = calc_ma(low, sslLen, maType)
Hlv = int(na)
Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? maHigh : maLow
sslUp = Hlv < 0 ? maLow : maHigh
ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red)
ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime)

// Conditions
longCondition = ta.crossover(sslUp, sslDown)
shortCondition = ta.crossover(sslDown, sslUp)

// Strategy
if shortCondition
    strategy.close('Long', comment='Long Exit', alert_message='JSON')

if longCondition
    strategy.close('Short', comment='Short Exit', alert_message='JSON')

if backtest_range and longCondition
    strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON')

if backtest_range and shortCondition
    strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON')


// Plots
fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')


Mais.