
A estratégia de negociação de cruzamento de médias móveis é uma estratégia de negociação quantitativa mais comum. A estratégia gera sinais de negociação por meio da computação de médias móveis de diferentes períodos e de sua intersecção. Concretamente, é a computação de médias móveis de índices de 4 ciclos, 8 ciclos e 20 ciclos (EMA), que são feitas quando a EMA de curto prazo atravessa a EMA de longo prazo e feitas em branco quando a EMA de curto prazo quebra a EMA de longo prazo.
A lógica central da estratégia é:
Com este método, utilizamos a interseção entre diferentes médias periódicas para julgar os sinais do mercado, enquanto usamos a direção da média periódica mais longa para filtrar os sinais de erro e construir uma estratégia de negociação estável.
A estratégia tem as seguintes vantagens:
A estratégia também apresenta alguns riscos:
Os principais soluções são:
A estratégia pode ser melhorada em vários aspectos:
Otimização do ciclo: determinação da melhor combinação de ciclos de MA para diferentes variedades Optimização de stop loss: configuração razoável de stop loss e controle de perda individual
Integração de modelos: integração com modelos de aprendizagem profunda como LSTM, RNN e outros para extrair mais Alpha
Optimização de portfólio: construção de um portfólio de estratégias com outros indicadores
A estratégia de cruzamento de média móvel é uma estratégia de negociação quantitativa mais clássica e comum. A lógica da estratégia é simples, fácil de entender e implementar, com uma certa estabilidade. Mas também há alguns problemas, como a produção de falsos sinais, a incapacidade de se adaptar às mudanças no mercado, etc. Esses problemas podem ser melhorados por meio de métodos como otimização de parâmetros, otimização de stop loss e integração de modelos.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub", overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
//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=.0,default_qty_value=10000)
testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriod() => true
ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)
go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]
go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]
if testPeriod()
strategy.entry("simpleBuy", strategy.long, when=go_long)
strategy.exit("simpleBuy", "simpleSell",when=exit_long)
strategy.entry("simpleSell", strategy.short,when=go_short)
strategy.exit("simpleSell", "simpleSell",when=exit_short)