Estratégia de negociação de reversão de média móvel dupla

Autora:ChaoZhang, Data: 2023-11-10 11:18:38
Tags:

img

Resumo

Esta estratégia é projetada com base na cruz de ouro e cruz morta de médias móveis rápidas e lentas. Quando o MA rápido cruza acima do MA lento, vá longo. Quando o MA rápido cruza abaixo do MA lento, vá curto. Esta estratégia é adequada para negociação de médio a longo prazo e pode capturar inversões de tendência no mercado.

Estratégia lógica

A estratégia usa a média móvel exponencial (EMA) para calcular as linhas rápidas e lentas. O comprimento do MA rápido é de 10 períodos e o comprimento do MA lento é de 30 períodos. A estratégia primeiro calcula o EMA rápido e o EMA lento, em seguida, traça as linhas e mostra diferentes fundos coloridos para indicar a direção da tendência.

Quando o fechamento de hoje está acima da MA rápida e a MA rápida está acima da MA lenta, o fundo é verde, indicando uma tendência ascendente.

Em uma tendência ascendente, se houver um candelabro vermelho (fechar abaixo do aberto) e ontem também foi um candelabro vermelho, vá longo.

Em uma tendência descendente, se houver um candelabro verde (fechar acima do aberto) e ontem também foi um candelabro verde, vá curto.

Após a abertura de uma posição em cada direção, se o tempo de retenção exceder 1008000000 milissegundos (cerca de 2 semanas), forçar o fechamento da posição para evitar o impasse.

Análise das vantagens

  • O sistema dual EMA pode filtrar eficazmente o ruído do mercado e identificar pontos de reversão da tendência
  • MAs rápidos e lentos combinados com cores de candelabro fornecem sinais de entrada confiáveis
  • Estratégias de stop loss e take profit reduzem as perdas para operações individuais
  • Mecanismo de fechamento de posição forçada evita grandes perdas de bloqueios

Análise de riscos

  • O sistema EMA é menos sensível a picos de preços, pode perder algumas oportunidades de negociação
  • Ajustes inadequados dos parâmetros MA rápidos e lentos podem causar sinais falsos
  • O ponto de stop loss demasiado apertado aumenta o risco de liquidação.
  • A definição inadequada do tempo de fechamento forçado pode conduzir a uma saída prematura ou a uma retenção prolongada

Orientações de otimização

  • Testar a rentabilidade dos sistemas EMA sob diferentes parâmetros para otimizar os comprimentos MA rápidos e lentos
  • Considere adicionar outros indicadores como o MACD para confirmação para melhorar a precisão do sinal
  • Perda de paragem de ligação às alterações diárias de volume
  • Ajustar dinamicamente o tempo de fechamento forçado com base na volatilidade do mercado

Conclusão

Em geral, esta estratégia é bastante equilibrada, usando EMA dupla para tendência e filtros de candelabro com regras adicionais para evitar sinais falsos.


/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 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/
// © yeainshukla

//@version=5


strategy('BuyRedSellGreen4H', overlay = true)
greenCandle = close > open
redCandle = open > close

start  = timestamp(2023,9,18,0,00)
end = timestamp(2023,12,31,0,00)


fastLength = input.int(10, title="Fast Average Length")
slowLength = input.int(30, title="Slow Average Length")

averageData = input.source(close, title="Average Data Source")

// Calculate exponential moving averages
fastAverage = ta.ema(averageData, fastLength)
slowAverage = ta.ema(averageData, slowLength)

// Plot averages
plot(fastAverage, color=color.navy, title="Fast EMA")
plot(slowAverage, color=color.fuchsia, linewidth=2, title="Slow EMA")

// Show the moving average trend with a coloured background
backgroundColor = if close > fastAverage and fastAverage > slowAverage
    color.new(color.green, 85)
else if close < fastAverage and fastAverage < slowAverage
    color.new(color.red, 85)
else
    color.new(color.orange, 90)

bgcolor(backgroundColor, title="EMA Background")


if time >= start and time < end
    if(close < open) 
        if(close[1] < open[1])
            strategy.entry("Enter Long", strategy.long)
            strategy.exit("Exit Long", from_entry="Enter Long")
            strategy.close("Enter Short")

    else
        if(close[1] > open[1])
            strategy.entry("Enter Short", strategy.short)
            strategy.exit("Exit Short", from_entry="Enter Short")
            strategy.close("Enter Long")
    if strategy.position_size < 0 or strategy.position_size > 0// short and long is opened.
        if((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) > 1008000000)
            strategy.close("Enter Short")
            strategy.close("Enter Long")

Mais.