Estratégia de ruptura de cruzamento de média móvel dupla

Autora:ChaoZhang, Data: 2023-11-27 16:21:45
Tags:

img

Resumo

Esta estratégia gera sinais de entrada LONG ou SHORT quando a média móvel simples rápida de 30 dias e a média móvel simples lenta de 33 dias do preço da ação se cruzam.

Princípio da estratégia

O núcleo desta estratégia é calcular a MA rápida de 30 dias e a MA lenta de 33 dias. A linha rápida pode responder às mudanças de preço mais rapidamente, enquanto a linha lenta tem um melhor efeito de filtragem. Quando a linha rápida quebra a linha lenta para cima, um sinal de compra é gerado. Isso indica que o preço começa a subir e a linha rápida respondeu enquanto a linha lenta ainda está atrasada. Quando a linha rápida quebra a linha lenta para baixo, um sinal de venda é gerado. Isso indica que o preço começa a diminuir enquanto a linha rápida respondeu, mas a linha lenta ainda está atrasada.

Através de um projeto de cruzamento MA rápido e lento, ele pode gerar sinais de negociação quando uma nova tendência começa e sai em sinais opostos, capturando efetivamente tendências de preços de médio a longo prazo.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Usando uma média móvel simples, é fácil de compreender e implementar
  2. A combinação de linha rápida e linha lenta pode responder rapidamente às mudanças de preço e também tem efeito de filtragem
  3. Os sinais da cruz de ouro e da cruz da morte são simples e claros, fáceis de operar.
  4. Pode capturar eficazmente as tendências de médio a longo prazo
  5. Sair rapidamente dos sinais opostos para controlar os riscos

Análise de riscos

Há também alguns riscos para esta estratégia:

  1. Pode gerar múltiplos sinais falsos quando o preço está limitado a um intervalo, causando excesso de negociação
  2. Não consegue lidar muito bem com oscilações extremas de preços causadas por eventos inesperados
  3. Parâmetros como os períodos de MA podem precisar de otimização, configurações inadequadas afetarão o desempenho da estratégia
  4. Os custos de negociação têm um certo impacto na rendibilidade

Métodos como otimização de parâmetros, definição do nível de stop loss, negociação apenas quando a tendência é clara, etc. podem ser utilizados para controlar e reduzir esses riscos.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os períodos de MA e os tipos de cruzamento para encontrar a combinação de parâmetros ideal
  2. Adicionar outros filtros de indicadores técnicos, por exemplo, volume de negociação, MACD, etc., para reduzir os falsos sinais
  3. Adicionar mecanismo de perda de parada adaptativo em vez de simplesmente oposto sinal de perda de parada
  4. Conjuntos de parâmetros de projeto e regras de parada de perdas para diferentes produtos
  5. Incorporar métodos de aprendizagem de máquina para ajustar dinamicamente parâmetros

Através de testes e otimização, as regras da estratégia podem ser continuamente melhoradas para obter sinais de negociação mais confiáveis em diferentes ambientes de mercado.

Resumo

Em resumo, esta estratégia de ruptura de cruzamento duplo MA é bastante simples e prática. Combinando MA rápido e MA lento, ele pode identificar efetivamente o início das tendências de médio a longo prazo e gerar sinais de negociação relativamente confiáveis. Além disso, sua regra de stop loss é fácil de implementar. Com otimização adicional, esta estratégia pode se tornar um sistema quantitativo de longo prazo que vale a pena.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//future strategy
//strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0)
//strategy.risk.max_position_size(2)
//stock strategy
strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000)
//strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long.




testStartYear = 2010
testStartMonth = 1
testStartDay = 1
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testEndYear = 2039
testEndMonth = 1
testEndDay = 1
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)


testPeriod() =>
    //true
    time >= testPeriodStart and time <= testPeriodEnd ? true : false

fast_length = 30
slow_length = 33

ema1 = 0.0
ema2 = 0.0

volumeSum1 = sum(volume, fast_length)
volumeSum2 = sum(volume, slow_length)

//ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1)
ema1 :=  ema(close,fast_length)
//ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2)
ema2 :=  ema(close,slow_length)



plot(ema1,color=#00ff00, linewidth=3)
plot(ema2, color=#ffff00, linewidth=3)

go_long = crossover(ema1,ema2)
go_short = crossunder(ema1,ema2)

if testPeriod()
    strategy.entry("long_ride", strategy.long, when=go_long)
    strategy.entry("short_ride", strategy.short,when=go_short)
    
        
    strategy.close("long_ride",when=go_short)
    strategy.close("short_ride",when=go_long)
    

Mais.