Estratégia de negociação quantitativa de média móvel exponencial de atraso zero adaptável


Data de criação: 2024-02-19 15:38:02 última modificação: 2024-02-19 15:38:02
cópia: 0 Cliques: 841
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa de média móvel exponencial de atraso zero adaptável

Visão geral

A Adaptive Zero Lag Exponential Moving Average Quantitative Trading Strategy é uma estratégia de negociação quantitativa desenvolvida com base na ideia da Zero Lag Exponential Moving Average de Ehlers. A estratégia usa a média móvel do índice como indicador de base e adiciona o método de adaptação da medição de frequência instantânea para otimizar dinamicamente os parâmetros do período da média móvel do índice.

Princípio da estratégia

O conceito central da estratégia deriva da teoria do filtro de atraso zero de John Ehlers. Apesar de ser um indicador técnico muito conhecido, a média móvel do índice tem problemas inerentes ao atraso. Ehlers pode efetivamente eliminar o atraso, adicionando um fator de correção de erro na fórmula de cálculo da média móvel do índice, permitindo que a média móvel do índice de atraso zero seja mais sensível ao acompanhamento das mudanças de preço.

Na estratégia de EMA de atraso zero auto-adaptável, utilizamos o método de medição de frequência instantânea para otimizar os parâmetros periódicos das médias móveis do índice de atraso zero auto-adaptáveis. A medição de frequência instantânea é dividida em dois tipos de métodos de acorde e de sincronia positiva, que podem medir os períodos dominantes da mudança na sequência de preços.

Quando a linha rápida (a média móvel do índice de atraso zero) atravessa a linha lenta (a média móvel do índice comum), fazendo mais, fazendo vazio ao atravessar, formando assim um sinal de estratégia de negociação semelhante ao cruzamento da média móvel.

Vantagens estratégicas

A estratégia EMA de auto-adaptação zero-retardo combina filtros de zero-retardo e métodos de otimização do ciclo de auto-adaptação, com as seguintes vantagens:

  1. Eliminação do atraso para tornar o sinal mais sensível e confiável
  2. Parâmetros de ciclo de adaptação, adaptando-se ao ambiente de mercado mais amplo
  3. Menos parâmetros de estratégia, fácil de testar e otimizar
  4. Ponto de parada de perda fixo configurável, com risco facilmente controlado

Risco estratégico

A estratégia de EMA de auto-adaptação para o atraso zero também apresenta alguns riscos, como:

  1. Em determinadas circunstâncias de mercado, os parâmetros de ciclo de otimização de adaptação podem não ser válidos
  2. A configuração inadequada do ponto de parada fixo pode causar perdas ou lucros excessivos
  3. Insuficiência de testes de otimização de parâmetros pode levar a fraco desempenho do disco rígido

Para controlar esses riscos, precisamos testar adequadamente as configurações de parâmetros em diferentes ambientes de mercado, ajustar adequadamente os pontos de parada de perdas e fazer a verificação adequada em simulações de ambientes reais na retrospectiva.

Direção de otimização da estratégia

A estratégia de EMA de adaptação a zero atraso tem um amplo espaço de otimização, e as principais direções incluem:

  1. Tente diferentes métodos de medição do ciclo de adaptação, como a taxa de flutuação adaptada MA etc.
  2. Adição de condições de filtragem adicionais, como volume de transação, par de médias móveis, etc.
  3. Otimizar estratégias de stop loss, como trailing stop, Chandelier Exit, etc.
  4. Ajustamento dinâmico do tamanho da posição, em consonância com a gestão de risco
  5. Confirmação de múltiplos períodos de tempo para melhorar a qualidade do sinal

Com esses métodos de otimização, espera-se que a estratégia possa melhorar ainda mais a taxa de vitória, a taxa de lucro, os indicadores de ajuste de risco e muito mais.

Resumir

A estratégia de EMA de atraso zero auto-adaptável, que combina com sucesso o filtro de atraso zero e a idéia de otimização do ciclo dinâmico, é uma estratégia de negociação quantitativa com menos parâmetros, fácil de operar e otimizar. Ela possui características de alta sensibilidade à resposta, auto-adaptável e melhor desempenho em mercados de tendência.

Código-fonte da estratégia
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA v2", shorttitle="AZLEMA", overlay = true)

src = input(title="Source",  defval=close)
Period = input(title="Period",  defval = 20)
adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Off")
GainLimit = input(title="Gain Limit",  defval = 10)
Threshold = input(title="Threshold", type = float, defval=0.05, step=0.01)
fixedSL = input(title="SL Points", defval=70)
fixedTP = input(title="TP Points", defval=5)
risk = input(title='Risk', defval=0.01, step=0.01)

//##############################################################################
//I-Q IFM
//#############################################################################
range = input(title="Max Period",  defval=60, minval=8, maxval=100)

PI = 3.14159265359
imult = 0.635
qmult = 0.338
inphase = 0.0
quadrature = 0.0
re = 0.0
im = 0.0
deltaIQ = 0.0
instIQ = 0.0
lenIQ = 0.0
V = 0.0

P = src - src[7]
inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
if (re!= 0.0)
    deltaIQ := atan(im/re)
for i=0 to range
    V := V + deltaIQ[i]
    if (V > 2*PI and instIQ == 0.0)
        instIQ := i
if (instIQ == 0.0)
    instIQ := nz(instIQ[1])
lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1])

//##############################################################################
//COSINE IFM
//#############################################################################
s2 = 0.0
s3 = 0.0
deltaC = 0.0
instC = 0.0
lenC = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

v1 := src - src[7]
s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
if (s2 != 0)
    v2 := sqrt(s3/s2)
if (s3 != 0)
    deltaC := 2*atan(v2)
for i = 0 to range
    v4 := v4 + deltaC[i]
    if (v4 > 2*PI and instC == 0.0)
        instC := i - 1
if (instC == 0.0)
    instC := instC[1]
lenC := 0.25*instC + 0.75*nz(lenC[1])

if (adaptive == "Cos IFM")
    Period := round(lenC)
if (adaptive == "I-Q IFM")
    Period := round(lenIQ)
if (adaptive == "Average")
    Period := round((lenC + lenIQ)/2)

//##############################################################################
//ZERO LAG EXPONENTIAL MOVING AVERAGE
//##############################################################################
LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold
strategy.initial_capital = 50000
if (time>timestamp(2016, 1, 1 , 0, 0))
    //LONG
    balance = strategy.initial_capital + strategy.netprofit
    lots = ((risk * balance)/fixedSL)*1
    strategy.entry("BUY", strategy.long, qty=lots, oca_name="BUY",  when=buy)
    strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)
    //SHORT
    strategy.entry("SELL", strategy.short, qty=lots, oca_name="SELL", when=sell)
    strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)