A estratégia de negociação de média móvel dupla é uma estratégia de negociação quantitativa comum. Esta estratégia usa duas médias móveis com períodos de tempo diferentes para gerar sinais de negociação com base em seu cruzamento. Especificamente, quando a média móvel de curto prazo cruza acima da média móvel de longo prazo, ela é considerada um sinal de compra; quando a média móvel de curto prazo cruza abaixo da média móvel de longo prazo, ela é considerada um sinal de venda.
O princípio central desta estratégia é: a média móvel de curto prazo reflete a tendência de curto prazo do preço do ativo, e a média móvel de longo prazo reflete a tendência de longo prazo do preço do ativo. Quando a linha de curto prazo cruza acima da linha de longo prazo, indica que a tendência de curto prazo se tornou alta, neste momento você pode comprar. Quando a linha de curto prazo cruza abaixo da linha de longo prazo, indica que a tendência de curto prazo se tornou baixa, neste momento você pode vender. Siga a tendência, capture o ponto de virada da tendência de preço.
Especificamente, a estratégia define duas médias móveis: uma média móvel de curto prazo de 5 dias para capturar tendências de preços de curto prazo; e uma média móvel de longo prazo de 15 dias para julgar tendências de preços de longo prazo.
Em comparação com outras estratégias, a estratégia da média móvel dupla tem as seguintes vantagens:
A estratégia de média móvel dupla também apresenta alguns riscos, nomeadamente:
Soluções:
A estratégia pode ser otimizada nas seguintes direcções:
Combine com outros indicadores como MACD, KDJ para filtrar falsos sinais.
Introduzir a média móvel adaptável, ajustando dinamicamente os parâmetros com base na volatilidade do mercado para melhorar a robustez.
Otimizar os parâmetros da média móvel para encontrar a melhor combinação e melhorar o desempenho da estratégia.
Adicionar um mecanismo de stop loss para limitar as perdas e melhorar o controlo do risco.
Combinação de vários prazos, utilizando sinais de linhas diárias e semanais para melhorar a estabilidade.
Mudança de estado de Markov, usar diferentes parâmetros em diferentes estados de mercado para melhorar a adaptabilidade.
Em geral, a estratégia de negociação de média móvel dupla é bastante eficaz e estável. O princípio de negociação é simples de entender e implementar, os parâmetros são flexíveis para se adaptar às tendências do mercado. Enquanto isso, existem algumas limitações como gerar sinais falsos e dificuldade em lidar com flutuações drásticas do mercado. Estes podem ser abordados através da introdução de outras ferramentas e otimização de parâmetros.
//@version=3 strategy("CS: 2 Moving Averages Script - Strategy (Testing)", overlay=true) // === GENERAL INPUTS === // short ma ma1Source = input(defval = close, title = "MA 1 Source") ma1Length = input(defval = 5, title = "MA 1 Period", minval = 1) // long ma ma2Source = input(defval = close, title = "MA 2 Source") ma2Length = input(defval = 15, title = "MA 2 Period", minval = 1) // === SERIES SETUP === /// a couple of ma's.. ma1 = ema(ma1Source, ma1Length) ma2 = ema(ma2Source, ma2Length) // === PLOTTING === fast = plot(ma1, title = "MA 1", color = red, linewidth = 2, style = line, transp = 30) slow = plot(ma2, title = "MA 2", color = green, linewidth = 2, style = line, transp = 30) // === LOGIC === enterLong = crossover(ma1, ma2) exitLong = crossover(ma2, ma1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // Entry // strategy.entry(id="Long Entry", long=true, when=enterLong and window()) strategy.entry(id="Short Entry", long=false, when=exitLong and window())