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

Autora:ChaoZhang, Data: 2024-02-27 16:21:02
Tags:

img

Resumo

Esta estratégia é uma estratégia de cruzamento de média móvel típica que usa dois conjuntos de médias móveis, uma rápida e outra lenta. Quando a média móvel rápida cruza a média móvel lenta, um sinal de compra é gerado. Quando a média móvel rápida cruza abaixo da média móvel lenta, um sinal de venda é gerado.

Estratégia lógica

A lógica central baseia-se em cruzes entre linhas médias móveis rápidas e lentas para determinar entradas e saídas.

Especificamente, são calculados dois conjuntos de médias móveis rápidas e lentas:

  • 1a EMA rápida, duração 8 dias
  • 2a EMA rápida, duração 21 dias
  • 1o SMA lento, comprimento 50 dias
  • 2o SMA lento, comprimento 200 dias

Os crossovers são então verificados entre as EMAs rápidas e as SMAs lentas:

  • Se a EMA de 8 dias cruzar a SMA de 50 dias, sinal de cruz de ouro
  • Se a EMA de 8 dias cruzar abaixo da SMA de 50 dias, sinal cruzado de morte

Para filtrar os falsos sinais, é necessária uma segunda travessia EMA/SMA para confirmação:

  • Apenas quando a EMA de 21 dias cruza também a SMA de 50 dias, o sinal de negociação é acionado

Ao requerer dois cruzamento MA rápido/lento, muitos sinais falsos podem ser filtrados e a confiabilidade melhorada.

Quando compras gatilhos de sinal, vai longo. Quando vendes gatilhos de sinal, vai curto.

A estratégia também define a tomada de lucro e a parada de perda com base na percentagem de entrada do preço de entrada uma vez numa posição.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. O projeto de MA duplo filtra falsos sinais e melhora a precisão
  2. A combinação de EMA e SMA utiliza a sensibilidade da EMA e a suavidade da SMA
  3. Atividades de captação de lucro e de stop loss
  4. Lógica simples fácil de entender e modificar
  5. Parâmetros personalizáveis adequados a diferentes ambientes de mercado

Análise de riscos

Riscos da estratégia:

  1. Os estratos de MA tendem a produzir muitos pequenos ganhos/perdas em mercados agitados
  2. Pode enfrentar grandes perdas em mercados de forte tendência
  3. O mau ajuste dos parâmetros também leva a um baixo desempenho

Para controlar os riscos:

  1. Ajustar parâmetros para diferentes condições de mercado
  2. Optimizar com base em backtests para se adequar ao mercado-alvo
  3. Usar stop loss para limitar o tamanho da perda

Orientações para melhorias

A estratégia pode ser melhorada através de:

  1. Testar mais combinações de MA rápida/lenta para encontrar o melhor
  2. Usando aprendizado de máquina ou algos genéticos para otimização automática
  3. Adição de um filtro de tendência para evitar transações contra-tendência
  4. Adicionar stop loss para bloquear os lucros
  5. Incorporando filtros de volume ou volatilidade para confirmar sinais
  6. Combinação com outros estratos/produtos para utilizar uma baixa correlação

Conclusão

Em resumo, a estratégia dupla de cruzamento de MA gera sinais com cruzes de MA rápidas / lentas, conjuntos de lucro e stop loss para controlar riscos, e é simples, intuitiva e fácil de implementar.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JMLSlop

//@version=4

src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)

// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len) 

//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)

//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)

//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)

// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01


plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")

// Orders config
takeProfitPrice =
     (strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na

longStopPrice  = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)

longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
    strategy.entry("Enter L", strategy.long)

shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
    strategy.entry("Enter S", strategy.short)


if (strategy.position_size > 0)
    strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)


Mais.