Uma estratégia de cruzamento de impulso baseada em média móvel exponencial

Autora:ChaoZhang, Data: 2024-01-23 14:18:26
Tags:

img

Resumo

Esta estratégia determina a direção da tendência com base no cruzamento das linhas EMA com diferentes períodos e gera sinais longos e curtos em conformidade. Ele usa principalmente duas médias móveis - EMA de 10 dias e EMA de 20 dias. Quando a EMA de 10 dias cruza abaixo da EMA de 20 dias, um sinal curto é acionado. Quando a EMA de 10 dias cruza acima da EMA de 20 dias, um sinal longo é acionado. Esta estratégia pertence a estratégias de negociação de médio prazo.

Princípios de estratégia

A estratégia utiliza duas linhas EMA, incluindo a EMA de 10 dias e a EMA de 20 dias. As linhas EMA podem refletir a tendência dos preços de forma eficaz. Quando a linha EMA de curto prazo cruza acima da linha EMA de longo prazo, ela indica que a tendência de preço está se transformando de queda para alta, o que é um sinal longo. Quando a linha EMA de curto prazo cruza abaixo da linha EMA de longo prazo, ela indica que a tendência de preço está se transformando de alta para baixa, o que é um sinal curto.

A estratégia também combina os valores máximos e mínimos das flutuações de preços para filtrar alguns sinais de negociação.

Especificamente, ao rastrear o tempo em que os valores máximos e mínimos são atingidos, a estratégia julga se uma tendência de preço se formou.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Usar linhas EMA para determinar a direcção da tendência pode acompanhar os movimentos do mercado de forma eficaz
  2. A combinação de linhas EMA de períodos diferentes pode capturar oportunidades de negociação a médio prazo
  3. A filtragem de sinais por valores extremos pode eliminar algum ruído e evitar a perda de oportunidades comerciais
  4. A lógica é simples e clara, fácil de entender e modificar
  5. Os parâmetros podem ser ajustados para diferentes produtos e preferências comerciais, mostrando uma forte adaptabilidade

Análise de riscos

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

  1. As próprias linhas da EMA apresentam um efeito de atraso, podendo perder as inversões de tendência a curto prazo
  2. A filtragem de ruído é imperfeita, alguns trocos errados podem ocorrer
  3. Os parâmetros devem ser adequadamente ajustados para se adequarem aos diferentes ambientes de mercado

Os riscos podem ser mitigados através de:

  1. Adição de outros indicadores de confirmação de sinal para evitar problemas de atraso da linha EMA
  2. Otimizar as condições de filtragem de valores extremos para melhorar a confiabilidade do sinal
  3. Ajuste dos parâmetros com base nos resultados dos backtests para otimizar a estratégia

Orientações para melhorar

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Incorporar outros indicadores técnicos como o MACD e o KD para melhorar a precisão do sinal
  2. Otimizar os parâmetros da linha EMA para melhor adaptá-los a produtos específicos
  3. Refinar parâmetros de valores extremos para melhor avaliar as flutuações de preços
  4. Adicionar mecanismos de stop loss para controlar a perda máxima por transação
  5. Teste a estratégia em diferentes produtos para avaliar a adaptabilidade

Resumo

Em resumo, esta estratégia de cruzamento da EMA é uma estratégia simples e prática de tendência. Ela usa linhas da EMA para determinar a direção da tendência principal, combinada com filtragem de flutuação de preços para tomar decisões de negociação. É fácil de entender e ajustar parâmetros, adaptável à negociação de médio prazo. Com melhorias adicionais, isso pode se tornar uma estratégia quantitativa que vale a pena manter a longo prazo.


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

//@version=2
strategy("PierceMAStrat", overlay=true)

lenMA0 = input(title="Length 0",defval=2)
lenMA1=input(title="Length 1",defval=10)
lenMA2=input(title="Length 2", defval=20)
lenMA3 = input(title = "Length3", defval =50)




emaLen0 = ema(close, lenMA0)
emaLen1 = ema(close, lenMA1)
emaLen2 = ema(close, lenMA2)
emaLen3 = ema(close, lenMA3)

    
ascent = if emaLen1[1] < emaLen1[0]
    true
else
    false
    
descent = if emaLen1[1] > emaLen1[0]
    true
else
    false
    
TimeSinceAscensionStart = if ascent == true
    barssince(descent == true)
else
    0
    

StartUp = if TimeSinceAscensionStart < 1
    true
else
    false

StartDown = if TimeSinceAscensionStart < 1
    false
else
    true


AscentBarCounter = barssince(StartUp == true)

DescentBarCounter = barssince(StartDown == true)

MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10
    true
else
    false
    
MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5
    true
else
    false
    
longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3
    true
else
    false
shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3
    true
else
    false


//longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3))
//shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3)



if longCond == true
    strategy.entry("LONG", strategy.long)

if shortCond == true
    strategy.entry("SHORT", strategy.short)
    


plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small)
plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small)
//plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny)
//plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny)

//plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small)
//plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small)
//plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small)
//plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small)
    
//plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS")
plot(emaLen1, color=green, transp=0, linewidth=2)
plot(emaLen2, color=red, transp=30, linewidth=2)
plot(emaLen3, color=blue, transp=30, linewidth=2)



Mais.