Sistema de cruzamento da média móvel

Autora:ChaoZhang, Data: 2024-01-03 16:22:18
Tags:

img

Resumo

Esta é uma estratégia de tendência baseada em sinais de cruzamento de média móvel. Quando a média móvel rápida cruza acima da média móvel lenta de baixo, um sinal de compra é gerado. Quando a média móvel rápida cruza abaixo da média móvel lenta de cima, um sinal de venda é gerado.

Estratégia lógica

A estratégia usa duas médias móveis, uma média móvel simples de 20 períodos e uma média móvel simples de 30 períodos. Quando o MA de 20 períodos cruza acima do MA de 30 períodos, um sinal de compra é gerado.

As próprias médias móveis servem como indicadores de tendência, representando a direção da tendência do mercado de forma eficaz. O princípio de cruzamento permite que a estratégia capture pontos de reversão da tendência em tempo hábil e gere sinais de negociação. Os períodos de 20 e 30 dias são definidos adequadamente para refletir a tendência do mercado sem ser muito sensível ao ruído.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. A lógica é simples e clara, fácil de compreender e implementar, adequada para iniciantes;
  2. A negociação ao longo da tendência evita posições contrárias à tendência e perdas desnecessárias;
  3. As médias móveis têm um efeito de filtragem para eliminar o ruído do mercado e evitar falsos sinais;
  4. As definições dos parâmetros são razoáveis para não causarem demasiada sensibilidade.

Análise de riscos

Os principais riscos desta estratégia incluem:

  1. As ordens de stop loss frequentes podem ser desencadeadas durante a consolidação do mercado quando ocorre frequentemente um cruzamento da média móvel;
  2. Perda de alguns lucros devido ao atraso das médias móveis durante tendências fortes;
  3. A estabilidade pode ser afectada por configurações de parâmetros inadequadas.

Soluções:

  1. Ajustar os períodos da média móvel, utilizar médias móveis de triângulos, etc., para suavizar as curvas e reduzir a frequência de cruzamento;
  2. Usar outros indicadores para determinar a tendência, evitar negociações durante a consolidação;
  3. Otimize os parâmetros para encontrar a melhor combinação.

Orientações de otimização

Os principais aspectos para otimizar a estratégia:

  1. Ensaiar diferentes tipos de médias móveis, como a média móvel ponderada, a média móvel triangular, etc.;
  2. Adicionar outros indicadores técnicos para evitar sinais durante a consolidação;
  3. Incorporar outras técnicas de análise como ondas de Elliott, teoria do canal para determinar a tendência;
  4. Adotar modelos de aprendizagem de máquina para otimizar os parâmetros de forma dinâmica;
  5. Utilize ferramentas quant e aplique técnicas de stop loss / take profit para refinar a gestão de dinheiro.

Conclusão

O sistema de cruzamento da média móvel é uma estratégia simples e eficaz de tendência. A lógica é clara e fácil de entender, muito adequada para iniciantes aprenderem. Ele gera sinais de negociação baseados em cruzamento da média móvel e lucros da negociação ao longo da tendência. A estratégia pode ser otimizada de muitas maneiras para se tornar mais estável e eficiente.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
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/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time =true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Mais.