Estratégia quantitativa de combinação dinâmica EMAS em movimento


Data de criação: 2024-01-22 12:34:33 última modificação: 2024-01-22 12:34:33
cópia: 1 Cliques: 536
1
focar em
1617
Seguidores

Estratégia quantitativa de combinação dinâmica EMAS em movimento

Visão geral

A estratégia é uma estratégia de combinação de médias móveis dinâmicas com múltiplos períodos de tempo. Ela usa médias móveis indexadas de diferentes comprimentos (EMA) para julgamento de tendências e entrada e saída. A barra MAX no nome da estratégia indica que vários EMAs são usados, e a barra dinâmica indica que o comprimento do EMA é ajustável.

Princípio da estratégia

A estratégia usa 7 EMAs de diferentes velocidades, do mais rápido ao mais lento: 3 EMAs de 15 ciclos, 19 ciclos, 50 ciclos, 100 ciclos, 150 ciclos e 200 ciclos. Estes 7 EMAs formam uma matriz de escala, e o preço de fechamento deve romper os 7 EMAs em sequência para determinar se há um sinal de posição longa ou curta, garantindo a entrada de força após a reversão da tendência.

Além disso, a estratégia também combina os dois termos de alta de inovação de preços e de preço de fechamento quebrando o máximo histórico para confirmar sinais de posição longa, usando baixa de inovação e preço de fechamento quebrando o mínimo histórico para confirmar sinais de posição curta, evitando assim a falsa ruptura.

A condição de equilíbrio requer que o preço de fechamento se rompa de um EMA rápido para um EMA lento, indicando uma reversão de tendência; ou o preço mais baixo ou mais alto da linha K mais recente quebra de 4 EMAs, indicando que a transação deve ser imediatamente equilibrada.

Análise de vantagens

  • Usando 7 EMAs de diferentes velocidades para formar uma escala, é possível determinar com mais precisão o ponto de viragem da tendência
  • Combinação de alta de inovação e alta histórica para julgar a posição longa, baixa de inovação e baixa histórica para julgar a posição curta, evitando falsas rupturas
  • As condições de dupla liquidação são mais rigorosas e permitem a parada de perdas em tempo hábil.

Análise de Riscos

  • Não há paralisação e há risco de perdas enormes.
  • Condições de duplo equilíbrio podem causar saída prematura
  • EMAs de curto prazo tendem a criar mais ruído, aumentando a frequência de negociação e os custos de comissões

Solução:

  1. Parar de paragem estática e paragem móvel
  2. Ajustar a duração dos EMAs de liquidação para reduzir a rigidez das condições de dupla liquidação
  3. Aumentar a duração das EMAs e reduzir a frequência das transações

Direção de otimização

  • Aumentar as estratégias de stop loss, como o stop loss de percentagem fixa, o stop loss móvel, etc.
  • Ajustar os parâmetros do EMA para encontrar a melhor combinação de parâmetros
  • Adicionar filtros para outros indicadores, como MACD, ATR, KDJ, etc., para melhorar a qualidade do sinal
  • Combinação de estratégias de bandas de ondas para capturar oscilações secundárias na tendência
  • Considere o módulo de gestão de fundos

Resumir

A estratégia é clara, com 7 EMAs de diferentes velocidades para avaliar a tendência, e possui condições de dupla parada, o que permite um julgamento mais sensível à reversão da tendência. No entanto, a estratégia em si não estabelece um stop loss, existe um grande risco de perdas e, além disso, é suscetível a problemas de saída prematura.

Código-fonte da estratégia
/*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=4
strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true  )
Length = input(3, minval=1)
Length2 = input(15, minval=1)
Length3 = input(19, minval=1)
//Length33 = input(25, minval=1)
Length4 = input(50, minval=1)
Length44 = input(100, minval=1)
Length5 = input(150, minval=1)
Length6 = input(171, minval=1)
Length66 = input(172, minval=1)

xPrice = input(close)

xEMA1 = ema(xPrice, Length)
xEMA2 = ema(xPrice, Length2)
xEMA3 = ema(xPrice, Length3)
//xEMA33 = ema(xPrice, Length33)
xEMA4 = ema(xPrice, Length4)
xEMA44 = ema(xPrice, Length44)
xEMA5 = ema(xPrice, Length5)
xEMA6 = ema(xPrice, Length6)
xEMA66 = ema(xPrice, Length66)

// plot(xEMA1, color=color.white)
// plot(xEMA2, color=color.red)
// plot(xEMA3, color=color.green)
// plot(xEMA4, color=color.purple)
// plot(xEMA44, color=color.gray)
// plot(xEMA5, color=color.maroon)
// plot(xEMA6, color=color.blue)
// plot(xEMA66, color=color.orange)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



long = close >  xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3  and xEMA3 > xEMA4  and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6  and xEMA6> xEMA66  and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond
short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3  and xEMA3 < xEMA4  and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and  xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond

notlong = close < xEMA1
strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)


exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4
exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4)
exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4
exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4)

strategy.close("long", when = exitlong1 or exitlong2)
strategy.close("short", when= exitshort1 or exitshort2)