Estratégia de média móvel dupla

Autora:ChaoZhang, Data: 2024-01-17 17:45:45
Tags:

img

Resumo

Esta estratégia emprega médias móveis duplas, especificamente de 8 períodos e 21 períodos.

A estratégia também incorpora a inclinação da linha da média móvel para filtrar alguns períodos não-trend e produzir sinais apenas quando uma tendência é mais aparente.

Princípios

O núcleo desta estratégia reside no cruzamento das médias móveis de curto e longo prazo. O MA mais curto pode capturar mudanças de tendência mais rapidamente, enquanto o MA mais longo tem melhores efeitos de filtragem de ruído. O estabelecimento de uma tendência de alta é sugerido quando o MA mais curto cruza o MA mais longo, levando a um sinal longo; o estabelecimento de uma tendência de queda é sugerido quando o MA mais curto cruza abaixo do MA mais longo, levando a um sinal curto.

A estratégia também define um limiar de inclinação. Somente quando a inclinação é maior que o valor do limiar positivo, um sinal longo será gerado. Somente quando a inclinação é menor que o valor do limiar negativo, um sinal curto será gerado. Isso ajuda a filtrar zonas onde não existe uma tendência pronunciada, resultando em sinais de negociação de maior qualidade.

Especificamente, a lógica para gerar sinais de negociação é:

  1. Calcular as médias móveis simples de 8 e 21 períodos
  2. Detectar sinais de cruzamento entre os dois
  3. Calcule a inclinação da linha média móvel de 21 períodos usando a função arctangente atan
  4. Só gerar sinais longos quando a inclinação exceder um limiar positivo pré-definido
  5. Só gerar sinais curtos quando a inclinação cair abaixo de um limiar negativo pré-definido

Análise das vantagens

As vantagens desta estratégia incluem:

  1. A ideia da estratégia é simples e fácil de compreender/aplicar
  2. Incorporar o índice de inclinação ajuda a filtrar períodos não tendência e melhora a qualidade do sinal
  3. A utilização de médias móveis duplas permite que ambos aproveitem os seus pontos fortes, melhorando a robustez
  4. Os parâmetros podem ser ajustados de acordo com diferentes instrumentos de negociação
  5. A implementação simples do programa facilita a otimização adicional

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. Podem ocorrer mais sinais falsos durante as violentas flutuações do mercado
  2. O crossover em si tende a produzir alguns sinais falsos.
  3. Há algum grau de atraso, incapaz de capturar instantaneamente inversões de tendência

Algumas formas de otimizar com base nestes riscos:

  1. Ajustar os parâmetros da MA às características do mercado
  2. Otimizar o limiar de inclinação para melhorar a robustez
  3. Adicionar mecanismos de stop loss para controlar perdas individuais
  4. Incorporar outros indicadores para filtrar sinais
  5. Empregar configuração de parâmetros adaptativos para melhorar a robustez

Orientações de otimização

Algumas orientações para otimizar a estratégia:

  1. Aplicar MAs adaptativas, ajustando os parâmetros com base na volatilidade
  2. Incorporar análise de volume para evitar erros durante a consolidação
  3. Adicionar um índice de volatilidade para melhorar a qualidade e a puntualidade
  4. Adicionar aprendizado de máquina para otimização automática de parâmetros
  5. Aproveitar a aprendizagem profunda para descobrir padrões não-lineares mais complexos

Conclusão

Em resumo, essa estratégia de MA dupla é simples e prática. Ao capturar diferentes características de tendência através dos dois parâmetros de período e combiná-los para gerar sinais de negociação. Enquanto isso, incorporar o limiar de inclinação melhora a qualidade do sinal. Esta estratégia pode servir como uma base para extensões, com amplo espaço e potencial de otimização.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by sixpathssenin
//@version=4
strategy(title="Dual Moving Average",initial_capital=10000,overlay=true)

ma1= sma(close,8)
ma2= sma(close,21)

angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13)

i_lookback   = input(2,     "Angle Period", input.integer, minval = 1)
i_atrPeriod  = input(10,    "ATR Period",   input.integer, minval = 1)
i_angleLevel = input(6,     "Angle Level",  input.integer, minval = 1)
i_maSource   = input(close, "MA Source",    input.source)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)

plot(ma1,color=#FF0000)
plot(ma2,color=#00FF00)

crosso=crossover(ma1,ma2) 
crossu=crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)


if(long)
    strategy.entry("Long",strategy.long)
if(short)
    strategy.entry("short",strategy.short)
    


Mais.