Tendência na sequência de uma estratégia baseada no cruzamento da média móvel

Autora:ChaoZhang, Data: 2024-01-31 15:17:31
Tags:

img

Resumo

Esta estratégia gera sinais de negociação através do cálculo de diferentes tipos de médias móveis (Simple Moving Average SMA, Exponential Moving Average EMA, Hull Moving Average HMA e Weighted Moving Average VWMA) e detectando pontos de cruzamento entre eles, para determinar a tendência do mercado e segui-la.

Estratégia lógica

A ideia central desta estratégia é julgar a tendência do mercado comparando duas médias móveis. Especificamente, permite configurar dois MA com tipos e comprimentos diferentes através de parâmetros de entrada. O primeiro MA tem um período mais longo para representar a tendência principal, enquanto o segundo MA tem um período mais curto para a tendência de curto prazo atual.

Quando o MA de curto prazo cruza o MA de longo prazo de baixo, ele sinaliza que a tendência de curto prazo está se fortalecendo e o mercado está entrando em uma tendência ascendente. Assim, um sinal de compra é gerado neste ponto de cruzamento. Por outro lado, quando o MA de curto prazo cruza abaixo do MA de longo prazo, ele sugere que a tendência de curto prazo está enfraquecendo e o mercado está se revertendo para baixo.

Ao detetar tais cruzamento de MA, esta estratégia segue a tendência do mercado para o comércio.

Vantagens

  • Utiliza o método de cruzamento MA clássico e prático para determinar as principais tendências
  • Suporta combinações de vários tipos de autorizações, proporcionando flexibilidade
  • Lógica simples e clara, fácil de entender e automatizar
  • Parâmetros configuráveis adaptados às diferentes condições do mercado

Análise de riscos

  • Os MAs têm um efeito de atraso, os sinais podem surgir em ou perto de pontos de virada quando a ação do preço já ocorreu
  • Os julgamentos de tendência podem ser imprecisos, causando perdas desnecessárias
  • Os resultados variam significativamente com as diferentes definições dos parâmetros MA

Soluções:

  • Usar períodos de MA mais curtos para uma melhor sensibilidade
  • Adicionar outros filtros para verificação cruzada para evitar erros
  • Métodos de otimização de parâmetros, por exemplo, força bruta, aprendizado de máquina, algoritmos genéticos
  • Dimensão da posição de controlo e stop loss corretamente

Orientações para melhorias

  • Adicionar outros indicadores como filtros para melhorar a precisão
  • Parâmetros de MA de adaptação automática com base na evolução das condições de mercado
  • Utilize o aprendizado de máquina para otimização automatizada de parâmetros
  • Refinar a estratégia de stop loss

Conclusão

Esta estratégia baseia-se na idéia clássica de usar MA crossovers para a detecção de tendências principais. Com combinações MA flexíveis, é simples de implementar e adequado para automação de negociação algorítmica.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)


Mais.