Stratégie de négociation quantitative de l'indice de latence zéro pour l'adaptation

Auteur:ChaoZhang est là., Date: le 19 février 2024 15:38:02
Les étiquettes:

自适应零滞后指数移动平均线量化交易策略

Résumé

La stratégie de négociation quantitative adaptative à zéro lag exponentiel est une stratégie de négociation quantitative développée sur la base de l'idée d'Ehlers d'une moyenne mobile exponentielle à zéro lag. La stratégie utilise une moyenne mobile indicielle comme indicateur de base et ajoute une méthode d'adaptation de mesure instantanée de fréquence pour optimiser les paramètres de cycle de la moyenne mobile de l'indice.

Les principes stratégiques

L'idée centrale de la stratégie est tirée de la théorie du filtre à retardement zéro de John Ehlers. Bien qu'une moyenne mobile indicielle soit un indicateur technique bien connu, il y a un problème de retardement inhérent. Ehlers élimine efficacement le retard en ajoutant un facteur de correction d'erreur dans la formule de calcul de la moyenne mobile indicielle, ce qui permet à la moyenne mobile indicielle à retardement zéro de suivre plus sensiblement les changements de prix.

Dans la stratégie EMA adaptative à zéro décalage, nous utilisons une méthode de mesure de fréquence instantanée pour optimiser les paramètres cycliques des moyennes mobiles de l'indice à zéro décalage. La mesure de fréquence instantanée est divisée en deux méthodes, la méthode des conjonctions et la méthode de la symétrie orthogonale, qui permettent de mesurer les cycles dominants des variations de la séquence de prix. Nous suivons en temps réel les meilleurs cycles calculés par ces deux méthodes de mesure, et nous définissons dynamiquement les paramètres cycliques des moyennes mobiles de l'indice à zéro décalage, ce qui les rend plus adaptés à l'environnement du marché actuel.

Lorsque la ligne rapide (l'indice de décalage zéro moyenne mobile) traverse la ligne lente (l'indice de décalage ordinaire moyenne mobile) plus longtemps, la ligne inférieure est vide, ce qui forme un signal de stratégie de trading similaire à celui de l'intersection d'une moyenne mobile.

Les avantages stratégiques

La stratégie d'EMA à retardement zéro d'adaptation combine un filtre à retardement zéro et une méthode d'optimisation du cycle d'adaptation avec les avantages suivants:

  1. Éliminer les retards et rendre le signal plus sensible et plus fiable
  2. S'adapter aux paramètres cycliques pour s'adapter à un environnement de marché plus large
  3. Moins de paramètres stratégiques, plus facile à tester et à optimiser
  4. Des points de freinage fixes peuvent être configurés, le risque est facile à contrôler.

Risque stratégique

Il existe également des risques liés à l'adaptation à la stratégie EMA à retard zéro, principalement:

  1. Les paramètres cycliques optimisés pour l'adaptation peuvent échouer dans un environnement de marché spécifique.
  2. Une mauvaise configuration d'un point d'arrêt de perte fixe peut entraîner des pertes ou des pertes excessives
  3. Les tests d'optimisation des paramètres insuffisants peuvent entraîner de mauvaises performances sur le disque.

Pour contrôler ces risques, nous devons tester pleinement les paramètres de paramètres dans différents environnements du marché, ajuster les points de rupture appropriés et vérifier pleinement les simulations de l'environnement de marché dans le retrait.

Optimisation stratégique

L'adaptation à la stratégie de l'EMA à retard zéro laisse encore beaucoup de place à l'optimisation, notamment en ce qui concerne:

  1. Essayez d'utiliser différentes méthodes de mesure du cycle d'adaptation, telles que la fréquence de fluctuation et l'ADMA.
  2. Ajoutez des conditions de filtrage supplémentaires telles que le volume des transactions, les paires de moyennes mobiles, etc.
  3. Optimiser les stratégies d'arrêt-perte, comme le trailing stop, le Chandelier Exit, etc
  4. Modification dynamique de la taille des positions avec gestion des risques
  5. Confirmation de plusieurs cycles pour améliorer la qualité du signal

Ces moyens d'optimisation permettent d'améliorer encore le taux de réussite, le taux de rentabilité, les indicateurs d'ajustement au risque, etc.

Résumé

L'idée d'une stratégie EMA adaptative à zéro décalage, qui combine avec succès un filtre zéro décalage et une optimisation des cycles dynamiques, est une stratégie de trading quantifiée avec moins de paramètres, facile à utiliser et à optimiser. Elle présente des caractéristiques de sensibilité et de forte adaptabilité, et fonctionne mieux sur les marchés tendance. Avec des moyens de gestion des pertes et des positions appropriés, sa stabilité et sa rentabilité peuvent être améliorées.


/*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)


En savoir plus