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

Autora:ChaoZhang, Data: 2023-11-23 13:38:02
Tags:

img

Resumo

A estratégia de cruzamento da média móvel é uma estratégia de negociação baseada em médias móveis. Ela usa o cruzamento de uma média móvel rápida e uma média móvel lenta como sinais de compra e venda. Quando o MA rápido cruza acima do MA lento de baixo, um sinal de compra é gerado. Quando o MA rápido cruza abaixo do MA lento de cima, um sinal de venda é gerado.

Estratégia lógica

A estratégia usa a função sma para calcular médias móveis simples de um período especificado como o MA rápido e o MA lento.

Quando o MA rápido cruza acima do MA lento de baixo, a função crossunder detecta o sinal de cruzamento e gera um sinal de compra.

A estratégia realiza a negociação automatizada através de sinais de pista e sinais de saída. A entrada longa é acionada quando o MA rápido cruza acima do MA lento, e a entrada curta é acionada quando o MA rápido cruza abaixo do MA lento. Os sinais de saída correspondentes também são gerados em cruzamentos reversos.

Análise das vantagens

  • As médias móveis têm a capacidade de rastrear as tendências de forma eficaz e captar o ímpeto dos preços
  • As estratégias de MA são simples e diretas, fáceis de compreender e implementar
  • Os parâmetros podem ser otimizados para se adaptarem aos diferentes ambientes de mercado
  • A estratégia automatiza a negociação sem intervenção manual, reduzindo os custos comerciais

Riscos e soluções

  • Oscilações de preços podem causar múltiplos sinais falsos e alta frequência de negociação.
  • A otimização de parâmetros é crucial e pode afetar significativamente o desempenho.
  • Os indicadores podem ser combinados para filtrar ou complementar os sinais comerciais.
  • O stop loss pode controlar a perda de uma única negociação.

Orientações de otimização

  • As médias móveis adaptativas podem ser utilizadas para ajustar dinamicamente os parâmetros de MA para um melhor acompanhamento.
  • Os filtros adicionais, como os volumes de negociação, podem evitar sinais falsos quando a tendência não é clara.
  • A combinação de outros indicadores como as Bandas de Bollinger como filtros ou condições suplementares pode melhorar o desempenho da estratégia.
  • A estratégia de stop loss controla as perdas de transações individuais dentro de níveis aceitáveis.

Conclusão

A estratégia de cruzamento de MA é uma estratégia clássica e simples de seguir tendências. Ele usa principalmente cruzamento de MA como sinais de negociação com lógica e implementação fáceis. Ele pode ser adaptado através de ajuste de parâmetros. Mas também tem desvantagens como susceptibilidade a oscilações e inversões de tendência, alta frequência de sinal, etc. Estes podem ser melhorados através de filtros, parâmetros dinâmicos, stop loss, etc. A estratégia tem um amplo espaço de otimização e direções, e é uma das estratégias de negociação quantitativa fundamentais.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-17 04:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "MA Close Strategy", shorttitle = "MA Close",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

MASource   = input(defval = open, title = "MA Source")
MaLength   = input(defval = 18, title = "MA Period", minval = 1)

StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(true,"UseStopLoss")
stopLoss = input(50, title = "Stop loss percentage(0.1%)") 

window() => time >=  timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false

MA = sma(MASource,MaLength)

plot(MA, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)

long = crossunder(MA, close)
short = crossover(MA, close)

if (long)
    strategy.entry("LongId", strategy.long, when = long)
    strategy.exit("ExitLong", from_entry = "LongId", when = short)

if (short)
    strategy.entry("ShortId", strategy.short, when = short)
    strategy.exit("ExitShort", from_entry = "ShortId", when = long)

if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)


Mais.