Estratégia de negociação quantitativa baseada em crossover de EMA duplo


Data de criação: 2023-11-21 11:41:40 última modificação: 2023-11-21 11:41:40
cópia: 0 Cliques: 620
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa baseada em crossover de EMA duplo

Visão geral

A estratégia de julgar a tendência do mercado através do cálculo do cruzamento da linha média de EMA de dois períodos diferentes, e, em conformidade, gerar um sinal de negociação. Quando o curto período EMA atravessou o longo período EMA, o mercado entrou em uma tendência ascendente, a estratégia vai abrir mais posições; Quando o curto período EMA atravessou o longo período EMA, o mercado entrou em uma tendência decrescente, a estratégia vai sair de equilíbrio.

Princípio da estratégia

A estratégia aplica principalmente a teoria do jogo da bifurcação da linha média EMA. A linha média EMA dupla é dividida em EMA longa e EMA curta. O parâmetro EMA curto é definido como 10 dias e o parâmetro EMA longo como 21 dias.

Quando a curta EMA atravessa a EMA longa, gera um sinal de compra; quando a curta EMA abaixo atravessa a EMA longa, gera um sinal de venda. A estratégia simultaneamente define um limiar de taxa de crescimento, apenas abrindo uma posição a mais quando a taxa de crescimento excede o limiar, e apenas se posicionando quando a queda excede o limiar.

Especificamente, a condição de compra é a EMA curta mais alta do que a EMA longa, e a taxa de crescimento do preço da ação é maior do que o limite positivo definido; a condição de liquidação é a EMA curta mais baixa do que a EMA longa, e a taxa de crescimento do preço da ação é menor do que o limite negativo definido.

Vantagens estratégicas

  • A teoria da forca-de-ouro em duas EMAs é relativamente simples e confiável
  • Aumentar a definição de limiares de crescimento para evitar erros de negociação em situações de crescimento fraco
  • Perda máxima controlada
  • Parâmetros de linha média EMA flexíveis para diferentes períodos

Análise de Riscos

  • A EMA média está atrasada e pode ter perdido o ponto de reversão do preço
  • O cruzamento de linhas médias tem um certo atraso, o que pode levar a perder o melhor momento para abrir uma posição.
  • Optimização dependente de parâmetros, configuração incorreta de parâmetros pode causar transações frequentes ou falta de sinais

Direção de otimização

  • Combinação com outros indicadores de otimização, como MACD, KD, etc., para melhorar a precisão do sinal
  • Aumentar as estratégias de stop-loss, como o rastreamento de stop-loss, para maximizar os lucros
  • Optimizar os parâmetros do ciclo EMA, definindo os melhores parâmetros para diferentes variedades
  • Optimização de ajuste de parâmetros dinâmicos combinando dados em tempo real com métodos de aprendizado de máquina

Resumir

A estratégia é simples e confiável, julgando a tendência dos preços através do cruzamento de duas EMAs e definindo o limiar da taxa de crescimento para emitir um sinal de negociação. Em comparação com o cruzamento de uma única linha média, os falsos sinais podem ser filtrados. No entanto, a linha média da EMA em si tem problemas de atraso e, em combinação com outros indicadores ou modelagem dinâmica, pode aumentar ainda mais a eficácia da estratégia.

Código-fonte da estratégia
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)