Estratégia de Crossover de Média Móvel de Momentum


Data de criação: 2024-01-23 14:18:26 última modificação: 2024-01-23 14:18:26
cópia: 1 Cliques: 537
1
focar em
1617
Seguidores

Estratégia de Crossover de Média Móvel de Momentum

Visão geral

Esta estratégia baseia-se no cruzamento das linhas médias da EMA em diferentes períodos para determinar a direção da tendência e, com base nisso, estabelecer um sinal de curto prazo. Usam-se principalmente 2 linhas médias, respectivamente, a linha de 10 dias e a linha de 20 dias.

Princípio da estratégia

A estratégia usa 2 linhas médias EMA, incluindo a linha de 10 e 20 dias. A linha média EMA é um bom reflexo da direção da tendência dos preços. Quando a linha de EMA curta dura de baixo para cima atravessa a linha de EMA longa, a tendência dos preços sobe e desce e é um sinal de falta.

Esta estratégia combina os valores máximos e mínimos de flutuação para filtrar parte do sinal de negociação. O sinal de negociação é emitido somente depois que a flutuação dos preços atinge um determinado nível. Isso pode filtrar alguns sinais falsos.

Concretamente, a estratégia determina se uma tendência de preço se formou, rastreando o máximo e o mínimo dos preços. O verdadeiro sinal de negociação só é emitido quando o máximo ou o mínimo atingem um determinado tempo.

Análise de vantagens estratégicas

A estratégia tem as seguintes vantagens:

  1. Usando a linha média da EMA para determinar a direção da tendência, você pode acompanhar com eficácia o movimento do mercado
  2. A combinação de EMAs de diferentes períodos permite capturar oportunidades de negociação em linhas médias e curtas
  3. Filtração de sinais de extremos para eliminar parte do ruído e evitar oportunidades de negociação perdidas
  4. A lógica da estratégia é simples, clara, fácil de entender e modificar.
  5. Parâmetros ajustáveis de acordo com diferentes variedades e preferências de negociação, adaptável

Análise de risco estratégico

A estratégia também apresenta alguns riscos:

  1. A EMA em si é atrasada e pode perder uma reversão de preço de curto prazo
  2. Filtragem de sinais de ruído incompleta, pode haver algum tipo de transação errada
  3. Parâmetros a serem adequadamente ajustados para adaptar-se a diferentes cenários de mercado

O risco pode ser reduzido através das seguintes medidas:

  1. Confirmação de sinais em combinação com outros indicadores para evitar o atraso da linha média do EMA
  2. Otimização de condições de filtragem de extremos para aumentar a confiabilidade do sinal
  3. Ajustar parâmetros de acordo com os resultados de feedback, estratégias de otimização

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

A estratégia pode ser melhorada em várias direções:

  1. A adição de outros indicadores técnicos para aumentar a precisão do sinal de negociação, como MACD, KD, etc.
  2. Optimizar os parâmetros da linha média da EMA para melhor adaptá-la às variedades específicas.
  3. Optimizar os parâmetros de valor máximo e mínimo, melhorando o julgamento das flutuações de preços.
  4. Adição de estratégias de stop loss para controlar a perda máxima de uma única transação.
  5. Teste as diferentes variedades com esta estratégia para avaliar a sua adequação.

Resumir

A estratégia de cruzamento EMA é uma estratégia de acompanhamento de tendências simples e práticas. Ela usa a média EMA para determinar a direção da grande tendência e, em combinação com os sinais de filtragem de flutuação de preços, forma decisões de negociação.

Código-fonte da estratégia
/*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)