Anpassungsfreie Handelsstrategie für den beweglichen Durchschnitt des Null-Lagag-Index

Schriftsteller:ChaoZhang, Datum: 2024-02-19 15:38:02
Tags:

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

Übersicht

Die Adaptive Zero Lag Exponential Moving Average Quantitative Trading Strategy ist eine Quantitative Trading Strategie, die auf der Grundlage von Ehlers' Ideen des Zero Lag Exponential Moving Average entwickelt wurde. Die Strategie verwendet die Index-Moving Average als Basisindikator und fügt eine adaptive Methode der Instantaneous Frequency Measurement hinzu, um die Periodenparameter der Index-Moving Average zu optimieren.

Die Strategie

Der Kerngedanke der Strategie stammt aus John Ehlers' Theorie des Filters mit nuller Verzögerung. Die bewegliche Index-Durchschnittslinie ist zwar ein bekannter technischer Indikator, hat aber Probleme mit Verzögerung. Durch die Einführung eines Fehlerkorrekturfaktors in die Berechnungsformel der beweglichen Index-Durchschnittslinie kann die Verzögerung effektiv beseitigt werden und die beweglichen Index-Durchschnittslinien mit nuller Verzögerung die Preisbewegung sensibler verfolgen können.

In der Adaptive Zero-Lack-EMA-Strategie passen wir die Periodenparameter der beweglichen Durchschnittslinie des Null-Lack-Index mit der Methode der Instant Frequency-Messung an. Die Instant Frequency-Messung ist in zwei Arten aufgeteilt: Stringmethode und Orthographie, die die dominierenden Perioden der Veränderungen der Preissequenz messen. Wir verfolgen die optimalen Perioden, die mit diesen beiden Methoden in Echtzeit berechnet werden, und setzen dynamisch die Periodenparameter der beweglichen Durchschnittslinie des Null-Lack-Index ein, um sie dem aktuellen Marktumfeld besser anzupassen.

Wenn die schnelle Linie (Zero-Lack-Index-Bewegungsgleichlinie) mehr als die langsame Linie (Normal-Index-Bewegungsgleichlinie) durchläuft, wird die untere Linie leer, was ein Handelsstrategie-Signal bildet, das ähnlich wie die Kreuzung der beweglichen Durchschnitte ist.

Strategische Vorteile

Die Adaptive-Zero-Lack-EMA-Strategie kombiniert Filter mit Zero-Lack-Filter und Adaptive-Zyklus-Optimierung mit folgenden Vorteilen:

  1. Verzögerungen beseitigen, Signal empfindlicher und zuverlässiger machen
  2. Anpassung an die Zyklusparameter und an das breitere Marktumfeld
  3. Weniger Strategieparameter, leicht zu testen und zu optimieren
  4. Feststehende Stopp- und Verluststopps können konfiguriert werden, die Risiken sind leicht zu kontrollieren

Strategische Risiken

Es besteht auch ein gewisses Risiko, sich an die Strategie der EMA mit Nullverzögerung anzupassen, vor allem durch:

  1. In bestimmten Marktumgebungen können adaptiv optimierte Zyklusparameter ausfallen.
  2. Eine falsche Einstellung eines festen Stop-Loss-Stopppunkts kann zu übermäßigen Verlusten oder Verlusten führen
  3. Unzureichende Parameteroptimierungstests können zu schlechten Festplattenergebnissen führen

Um diese Risiken zu kontrollieren, müssen wir die Parameter-Einstellungen in verschiedenen Marktumgebungen ausreichend testen, die Stop-Loss-Schlusspunkte angemessen anpassen und im Rücktest so gut wie möglich simulieren, um die reale Umgebung zu simulieren.

Strategische Optimierung

Die EMA-Strategie für die Anpassung an die Null-Stillstands-Ema-Strategie hat noch viel Optimierungsmöglichkeiten.

  1. Versuchen Sie verschiedene Methoden zur Messung der Adaptionszyklen, wie beispielsweise die Adaptions-MA für Schwankungen.
  2. Hinzufügen von zusätzlichen Filterbedingungen wie Handelsvolumen, Moving Average Pairing usw.
  3. Optimierung von Stop-Loss-Anti-Pump-Strategien, wie Trailing Stop, Chandelier Exit, etc.
  4. Dynamische Anpassung der Positionsgröße in Verbindung mit Risikomanagement
  5. Mehrfache Zeitzyklen bestätigen und verbessern die Signalqualität

Durch diese Optimierungsmethoden können Sie die Gewinnquote, die Profitabilität, die Risikobereinigungsindikatoren usw. weiter verbessern.

Zusammenfassung

Die Adaptive Zero-Lack-EMA-Strategie, die sich erfolgreich mit einer Kombination von Zero-Lack-Filtern und Dynamic-Cycle-Optimierung auswirkt, ist eine weniger parametrische, einfach zu bedienende und optimierte, quantitative Handelsstrategie. Sie ist reaktionsempfindlich und anpassungsfähig und funktioniert besser in Trendsmärkten. Mit geeigneten Stop-Loss- und Positionsmanagementmitteln können ihre Stabilität und Profitabilität verbessert werden.


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


Weitere Informationen