A estratégia de cruzamento de EMA dupla é uma estratégia típica de tendência. Ela usa duas linhas de EMA de períodos diferentes e gera sinais de negociação com base em seu cruzamento. Quando a EMA mais rápida cruza acima da EMA mais lenta, um sinal de compra é gerado. Quando a EMA mais rápida cruza abaixo da EMA mais lenta, um sinal de venda é gerado. Esta estratégia pode rastrear tendências de médio e longo prazo e capturar oportunidades de negociação nos estágios de iniciação da tendência.
Os principais componentes desta estratégia são:
Defina comprimentos para a EMA mais rápida e a EMA mais lenta.
Calcule a EMA mais rápida e a EMA mais lenta.
Determine situações de cruzamento da EMA para gerar sinais de negociação. Quando a EMA mais rápida cruza acima da EMA mais lenta, um sinal de compra é gerado. Quando a EMA mais rápida cruza abaixo da EMA mais lenta, um sinal de venda é gerado.
Entrar em negócios com base em sinais. Quando se vai long, as posições curtas existentes são fechadas primeiro antes de abrir posições longas.
Quando se vai long, o stop loss é acionado se o preço cair abaixo do mínimo anterior por uma porcentagem definida.
As posições longas são fechadas quando a EMA mais rápida cruza abaixo da EMA mais lenta. As posições curtas são fechadas quando a EMA mais rápida cruza acima da EMA mais lenta.
A lógica é simples e intuitiva. O cruzamento da EMA determina a direção e a força da tendência. A EMA mais rápida reage rapidamente às mudanças de preço de curto prazo, enquanto a EMA mais lenta responde às tendências de longo prazo de forma constante. O cruzamento das duas linhas é uma maneira clássica de detectar mudanças de tendência.
As vantagens desta estratégia são as seguintes:
O conceito é simples, fácil de compreender e implementar.
Pode acompanhar eficazmente as tendências de médio e longo prazo e captar as oportunidades com antecedência.
A configuração de EMA dupla evita o ruído das flutuações de curto prazo do mercado.
Tem regras claras de entrada, de saída e regras de stop loss.
Só precisa de alguns parâmetros, não é propenso a sobreajustes, fácil ajuste de parâmetros adequado para iniciantes.
Bons resultados de backtest, viáveis para negociação ao vivo. Pode ser usado isoladamente ou combinado com outras estratégias.
Alguns riscos desta estratégia:
O cruzamento de EMA dupla é propenso a gerar sinais falsos e flipsaws. Parâmetros precisam ser ajustados para filtrar sinais inválidos.
Não consegue lidar bem com situações de variação e inversão de tendência, precisa de confirmação de outros indicadores.
A estratégia EMA dupla tende a perseguir máximos e vender mínimos.
Os resultados dos testes de regresso podem ser sobreajustados até certo ponto.
Não haver um stop loss oportuno pode conduzir a grandes perdas.
Os custos de transacção podem afetar a rendibilidade real, devendo ser tidos em conta os factores da Comissão para diferentes produtos.
Algumas formas de melhorar a estratégia:
Otimize os parâmetros do período EMA para encontrar a melhor combinação, usando otimização de avanço e aprendizado de máquina.
Adicionar indicadores de filtro de tendência como ADX, CCI etc. para evitar a negociação em tendências incertas.
Adicione indicadores de volume como o volume de negociação, no volume do saldo para garantir que a negociação real esteja impulsionando os sinais.
Implementar um stop loss dinâmico para ajustar automaticamente as paradas com base na volatilidade do mercado.
Combinar produtos correlacionados para utilizar a correlação para a gestão de riscos.
Introduzir aprendizado de máquina para otimização de parâmetros, engenharia de recursos, filtragem de sinais, etc.
Considere os custos de transação, ajuste as paradas e o tamanho para reduzir a frequência do comércio.
Personalizar os parâmetros com base nas características do produto para melhorar a adaptabilidade.
Conceber um quadro estratégico composto, combinado com outras estratégias para melhorar a robustez.
Estas melhorias podem tornar a estratégia mais robusta e rentável para a negociação ao vivo.
Esta estratégia usa duplo crossover EMA para gerar sinais de negociação e pode efetivamente rastrear tendências de médio e longo prazo. As vantagens estão em sua simplicidade e bons resultados de backtest, tornando-o fácil de usar para iniciantes. Mas os riscos existem e devem ser gerenciados por meio de otimização de parâmetros, adição de indicadores, paradas dinâmicas, otimização de custos comerciais, etc. A estratégia pode ser usada isoladamente ou combinada com outros para maior praticidade.
/*backtest start: 2022-10-23 00:00:00 end: 2023-10-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(true,"UseStopLoss") window() => time >= timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false stopLoss = input(20, title = "Stop loss percentage(0.1%)") maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1) maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50) longEMA = crossover(maFast, maSlow) exitLong = crossunder(maFast, maSlow) shortEMA = crossover(maSlow, maFast) exitShort = crossover(maFast, maSlow) if (longEMA) strategy.entry("LongId", strategy.long, when=window()) if (shortEMA) strategy.entry("ShortId", strategy.short, when=window()) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)