O recurso está a ser carregado... Carregamento...

Estratégia de cruzamento da média móvel

Autora:ChaoZhang, Data: 2023-11-03 17:23:54
Tags:

img

Resumo

A estratégia de cruzamento da média móvel é uma estratégia de análise técnica muito clássica e comumente usada. A ideia central desta estratégia é usar o cruzamento entre as médias móveis de diferentes períodos como sinais de negociação. Quando a média móvel de curto prazo cruza acima da média móvel de longo prazo de baixo, um sinal de compra é gerado. Quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo de cima, um sinal de venda é gerado.

Estratégia lógica

Esta estratégia utiliza dados de entrada para definir o tipo (SMA, EMA, WMA, RMA) e o período da média móvel, bem como o intervalo de tempo de backtesting.

Os diferentes tipos de médias móveis são calculados na função variável. A média móvel calculada é guardada na variável ma.

Quando o preço de fechamento cruza acima de ma, um sinal de compra é gerado.

Para definir um stop loss, é calculado o intervalo verdadeiro médio de 14 períodos atr.

A lógica específica de entrada e saída é a seguinte:

Entrada longa: cruzes próximas acima de ma e dentro do intervalo de tempo do backtest, ponto de stop loss é o ponto de entrada próximo
Saída longa: fechar cruzes abaixo de ma menos 2 vezes atr para saída stop loss ou preço mais alto excede o ponto de entrada fechar mais 2 vezes atr para saída take profit

Entrada curta: fechar cruzes abaixo de ma e dentro do intervalo de tempo do backtest, ponto de stop loss é ponto de entrada fechado
Saída curta: fechar cruzes acima de ma mais 2 vezes atr para saída de stop loss ou fechar o preço mais baixo abaixo do ponto de entrada menos 2 vezes atr para saída de take profit

Vantagens da estratégia

  1. A ideia estratégica é simples e clara, fácil de compreender e implementar
  2. Amplamente utilizado, adequado para diferentes mercados e produtos
  3. Configurações de parâmetros flexíveis, tipo e período de média móvel ajustáveis
  4. Usar o ATR para evitar perdas para ajudar a controlar os riscos

Riscos da Estratégia

  1. As estratégias de média móvel tendem a gerar negociações frequentes e stop loss, reduzindo o potencial de lucro
  2. Em mercados extremamente voláteis, as médias móveis podem gerar sinais enganosos
  3. O intervalo de perda de parada do ATR pode ser muito amplo ou muito estreito, não evitando grandes perdas

Para enfrentar os riscos, podem ser realizadas otimizações nos seguintes aspectos:

  1. Ajustar o período da média móvel, usar médias móveis de período mais longo
  2. Adicionar condições de filtragem para evitar negociações frequentes em mercados voláteis
  3. Otimizar os parâmetros ATR ou utilizar outros métodos de stop loss
  4. Combinar indicadores de tendência para determinar a tendência geral, evitar negociações contrárias à tendência

Orientações de otimização

Esta estratégia pode ser otimizada nos seguintes aspectos:

  1. Adicionar condições de filtro como volume, volatilidade para evitar quebras irracionais
  2. Utilize o ATR adaptativo para que o intervalo de stop loss mude com a volatilidade do mercado
  3. Combinar Stoch, RSI e outros indicadores para confirmação multifatorial para melhorar a qualidade do sinal
  4. Adicionar a determinação da tendência para evitar a negociação contra-tendência
  5. Use o tempo de saída para evitar manter perdedores por muito tempo
  6. Otimizar os parâmetros da média móvel para encontrar as melhores combinações de parâmetros

Resumo

A estratégia de cruzamento de média móvel é uma estratégia de análise técnica muito típica e comumente usada. A ideia central da estratégia é simples e fácil de implementar, adequada para vários mercados, e é uma das estratégias de negociação quantitativa de nível de entrada. No entanto, a estratégia também tem alguns problemas como gerar sinais frequentes e ser propensa a parar de perder. Com otimizações adequadas, o desempenho pode ser muito melhorado.


/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)

type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])

length = input(28)
source = close



// === INPUT BACKTEST RANGE ===
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2000, title = "From Year", minval = 2000)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(9999, 1, 1, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"



variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v5 = wma(src, len)                                                  // Weighted
    v7 = rma(src, len)                                                  // Smoothed
    type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)


atr = security(syminfo.tickerid, "D", atr(14))

range = valuewhen(cross(close,ma), (atr*2), na)

ep = valuewhen(cross(close,ma), close, na)

plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)

strategy.entry("Long Entry", true, when = crossover(close,ma)  and window() , stop  = ep ) 
strategy.exit("Long Exit", "Long Entry", stop  = ep-range) 
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) 

strategy.entry("Short Entry", false, when = crossunder(close,ma)  and window() , stop  = ep ) 
strategy.exit("Short Exit", "Short Entry", stop  = ep+range) 
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] ) 


Mais.