Estratégia de negociação do sistema de média móvel

Autora:ChaoZhang, Data: 2024-01-05 15:36:00
Tags:

img

Resumo

Este artigo discute uma estratégia de negociação baseada em uma média móvel simples. A estratégia compara o preço de fechamento com uma média móvel de 17 períodos, indo longo quando o preço de fechamento cruza acima da média móvel e indo curto quando cruza abaixo.

Estratégia lógica

Calculo da média móvel

A estratégia utiliza os seguintes parâmetros para calcular a média móvel:

  • Fonte de MA: Default to average de OHLC (OHLC4)
  • Tipo MA: Default to Simple Moving Average (SMA)
  • Duração do MA: padrão para 17

Com base nestes parâmetros, a função getMAType() é chamada para calcular a SMA de 17 períodos dos preços de fechamento.

Geração de sinais comerciais

Em seguida, compare a relação entre o preço de fechamento e a média móvel:

  • Fechar > Média móvel: sinal longo
  • Fechar < Média móvel: sinal curto

Quando o preço de fechamento cruza acima da média móvel de baixo, é gerado um sinal longo.

Execução de operações

Durante o período de backtest, abrir posições longas quando aparecerem sinais longos e abrir posições curtas quando aparecerem sinais curtos.

Análise das vantagens

A maior vantagem desta estratégia é que a lógica é muito simples e clara. Com apenas um indicador, ele julga a reversão da tendência com base na mudança de direção do indicador. A estratégia é fácil de entender e implementar, adequada para iniciantes aprenderem.

Além disso, as médias móveis pertencem a indicadores de tendência, que podem efetivamente acompanhar as alterações da tendência e evitar interferências do ruído do mercado a curto prazo.

Ao ajustar os parâmetros, pode adaptar-se a diferentes ciclos e a diferentes produtos.

Análise de riscos

Em primeiro lugar, esta estratégia baseia-se apenas num único indicador, pelo que os critérios de avaliação são relativamente únicos, o que pode gerar mais sinais falsos.

Além disso, como sistema de tendência, não funciona bem nos mercados de gama e lateral.

Além disso, sem stop loss ou take profit, existe o risco de expansão das perdas.

As soluções são incorporar outros indicadores, otimizar combinações de parâmetros para reduzir sinais falsos, adicionar stop loss e take profit para controlar riscos e otimizar drawdowns.

Orientações de otimização

Aqui estão algumas ideias para otimizar a estratégia:

  1. Ajustar os parâmetros da média móvel, otimizar os números dos períodos, por exemplo, mudar para 30 ou 50 períodos.

  2. Tente diferentes tipos de médias móveis, como EMA, VIDYA etc. Eles têm sensibilidade variável às mudanças de preço.

  3. Adicionar outros indicadores em combinação, por exemplo, MACD para avaliar a força; RSI para reduzir falsos sinais.

  4. Adicionar mecanismos de stop loss: definir percentagem fixa ou stop loss de trailing baseado em ATR para controlar o montante da perda de uma única negociação.

  5. Adicionar mecanismos de lucro, definir percentagem de lucro para maximizar os lucros.

Estas otimizações podem tornar o desempenho da estratégia mais estável e evitar atrasos excessivos.

Resumo

Este artigo analisa uma estratégia de negociação simples baseada em uma média móvel de 17 períodos. A estratégia tem fontes de sinal simples, fáceis de entender e implementar, pertencente a um sistema típico de tendência. Através de uma interpretação aprofundada da estratégia, seus prós e contras são analisados e múltiplas dimensões de ideias de otimização são propostas. Acredita-se que, através de otimização e enriquecimento contínuos, esta estratégia possa evoluir gradualmente e alcançar retornos estáveis também na negociação ao vivo.


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

//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)

Mais.