A estratégia de cruzamento da média móvel é uma estratégia quantitativa de negociação baseada em médias móveis simples (SMA).
Especificamente, esta estratégia calcula a SMA de 9 períodos e 45 períodos. Quando o preço cruza acima de ambas as linhas SMA, um sinal de compra é gerado. Quando o preço cruza abaixo de ambas as linhas, um sinal de venda é acionado.
A lógica central desta estratégia baseia-se nos princípios
Em particular, esta estratégia usa as médias móveis simples de 9 períodos e 45 períodos. A linha de 9 períodos representa tendências de curto prazo, enquanto a linha de 45 períodos capta movimentos de longo prazo. Quando o preço cruza acima de ambas as linhas SMA, ele indica que o preço está em canais ascendentes tanto a curto quanto a longo prazo, desencadeando assim uma entrada longa.
Do ponto de vista do código, a estratégia primeiro calcula os valores de SMA de 9 períodos e 45 períodos. Em seguida, usa as funções ta.crossover e ta.crossunder para detectar cruzes douradas e cruzes mortas entre as duas linhas MA. Quando os sinais de compra e venda são acionados, as funções de gráficos desenham triângulos e triângulos invertidos no gráfico de preços.
Além disso, a lógica de stop-loss é implementada para gerenciar saídas de negociações. Especificamente, os preços altos e baixos da barra anterior são extraídos como o preço de stop-loss após a abertura de novas negociações. Isso permite que a estratégia bloqueie ganhos e evite grandes perdas.
A configuração de média móvel dupla capta mudanças de tendência de médio a longo prazo, enquanto filtra ruídos de curto prazo, melhorando a qualidade do sinal.
O mecanismo de stop-loss controla eficazmente os riscos e bloqueia os lucros.
Lógica simples e fácil de implementar, adequada para iniciantes.
Alta utilização do capital para ganhos compostos.
As estratégias de MA dupla tendem a gerar surpresas e sinais inválidos durante mercados agitados.
Colocação de stop loss conservadora incapaz de rastrear as tendências de forma eficaz.
A selecção de parâmetros subótima pode conduzir a excesso de negociação ou a uma frequência de negociação insuficiente.
Incapaz de se adaptar a grandes inversões de tendência.
Soluções:
Otimizar os parâmetros de MA para reduzir os falsos sinais
Implementar paradas dinâmicas de tendência
Adicionar filtros usando outros indicadores
Desempenho manual em reversões importantes
Outras melhorias da estratégia:
Usar MAs adaptativos ou exponenciais para melhor captar tendências.
Adicionar um filtro de volatilidade para evitar sinais falsos durante os mercados variáveis.
Realizar a otimização dos parâmetros para obter as melhores combinações de parâmetros.
Incorporar mecanismos de acompanhamento da tendência na lógica de stop-loss.
Adicionar análise suporte-resistência para evitar sinais em torno dos níveis-chave.
Aproveitar o aprendizado de máquina para filtrar ainda mais a qualidade do sinal.
O sistema de cruzamento da média móvel é uma abordagem simples, mas eficaz, de seguir tendências. Ao filtrar o ruído e rastrear tendências de médio prazo, ele gera sinais de qualidade. Com perdas de parada adequadas, permite a negociação de tendências gerenciadas pelo risco. A lógica simples também o torna ideal para iniciantes.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SMA Crossover Strategy", overlay=true) // Input parameters fast_length = input(9, title="Fast SMA Length") slow_length = input(45, title="Slow SMA Length") // Calculate moving averages fast_sma = ta.sma(close, fast_length) slow_sma = ta.sma(close, slow_length) // Buy condition buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma) // Sell condition sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma) // Calculate stop loss levels prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on) prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on) // Plot signals on the chart plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small) // Strategy exit conditions long_stop_loss = sell_condition ? prev_low : na short_stop_loss = buy_condition ? prev_high : na strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss) strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss) strategy.entry("Long", strategy.long, when=buy_condition) strategy.entry("Short", strategy.short, when=sell_condition)