A estratégia de negociação da média móvel é uma estratégia de negociação quantitativa relativamente comum. Esta estratégia gera sinais de negociação calculando médias móveis de diferentes períodos e de acordo com suas situações de cruzamento. Especificamente, calcula as médias móveis exponenciais (EMA) de 4 períodos, 8 períodos e 20 períodos. Quando a EMA de curto prazo cruza acima da EMA de longo prazo, vá longo; quando a EMA de curto prazo cruza abaixo da EMA de longo prazo, vá curto.
A lógica central desta estratégia é a seguinte:
Através deste método, aproveitamos o cruzamento entre diferentes médias móveis de período para julgar os sinais de mercado e usar a direção da média móvel do período mais longo para filtrar falsos sinais, construindo uma estratégia de negociação estável.
As principais vantagens desta estratégia são:
Há também alguns riscos com esta estratégia:
As principais soluções são:
A estratégia pode ser otimizada nos seguintes aspectos:
Optimização do período: Determinar a combinação óptima de períodos de MA de acordo com diferentes variedades.
Optimização da perda de parada: definir pontos de perda de parada razoavelmente para controlar a perda única.
Optimização de parâmetros: Optimize dinamicamente parâmetros usando algoritmos genéticos, cadeias de Markov, etc.
Fusão do modelo: integrar com LSTM, RNN e outros modelos de aprendizagem profunda para extrair mais Alpha.
Optimização da carteira: Combinar com outras estratégias de indicadores técnicos para construir carteiras de estratégia.
Em geral, a estratégia de cruzamento da média móvel é uma estratégia quantitativa relativamente clássica e comumente usada. Esta estratégia tem uma lógica simples e é fácil de entender e implementar, com certa estabilidade. Mas também há alguns problemas, como gerar sinais falsos, incapacidade de se adaptar às mudanças do mercado, etc. Esses problemas podem ser melhorados por meio de otimização de parâmetros, otimização de stop loss, fusão de modelos e outros métodos.
/*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)