Quantitative Handelsstrategie auf der Grundlage der empirischen Abwicklung

Schriftsteller:ChaoZhang, Datum: 2023-12-22 14:41:34
Tags:

img

Übersicht

Diese Strategie basiert auf der Empirical Mode Decomposition (EMD) -Methode, um die Preisreihen zu zerlegen und Merkmale aus verschiedenen Frequenzbändern zu extrahieren, kombiniert mit dem Mittel zur Erzeugung von Handelssignalen.

Strategie Logik

  1. Verwenden Sie die EMD-Methode, um den Preis zu filtern und Preisschwankungen zu extrahieren
  2. Berechnen Sie den gleitenden Durchschnitt von Spitzen- und Tiefsequenzen
  3. Erzeugen von Handelssignalen, wenn die mittlere Linie einen bestimmten Prozentsatz der Spitzen- und Tiefenlinien überschreitet
  4. Long oder Short auf Basis von Handelssignalen

Analyse der Vorteile

  1. Die EMD-Methode kann die Preisreihen effektiv zerlegen und nützliche Merkmale extrahieren
  2. Die Spitzen- und Tiefenlinien steuern die Handelsstrategie nur, wenn die Kursschwankung größer ist als eine bestimmte Amplitude
  3. In Kombination mit der mittleren Linie, kann es effektiv falsche Ausbrüche filtern

Risikoanalyse

  1. Eine unsachgemäße Auswahl der Parameter der EMD-Methode kann zu einer Überanpassung führen
  2. Es braucht einen langen Zyklus, um ein Transaktionssignal zu bilden, und kann sich nicht an den Hochfrequenzhandel anpassen
  3. Nicht in der Lage, mit dramatischen Preisschwankungen mit den Marktbedingungen umzugehen

Optimierungsrichtlinien

  1. Optimierung der Parameter des EMD-Modells zur Verbesserung der Marktanpassungsfähigkeit
  2. Kombination anderer Indikatoren als Stop-Loss- und Take-Profit-Signale
  3. Versuchen Sie verschiedene Preisreihen als Strategie-Eingabe

Zusammenfassung

Diese Strategie nutzt die empirische Modus-Zersetzungsmethode, um Merkmale aus der Preisreihe zu extrahieren und erzeugt auf der Grundlage der extrahierten Merkmale Handelssignale, um eine stabile mittelfristige und langfristige Handelsstrategie zu realisieren. Der Vorteil dieser Strategie besteht darin, dass sie periodische Merkmale in den Preisen effektiv identifizieren und Handelsordern während großer Schwankungen ausstellen kann. Es gibt jedoch auch bestimmte Risiken und eine weitere Optimierung ist erforderlich, um sich komplexeren Marktumgebungen anzupassen.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/04/2017
// The related article is copyrighted material from Stocks & Commodities Mar 2010
// You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect...
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Empirical Mode Decomposition")
Length = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
xPrice = hl2
beta = cos(3.1415 * (360 / Length) / 180)
gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
alpha = gamma - sqrt(gamma * gamma - 1)
xBandpassFilter = 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
xMean = sma(xBandpassFilter, 2 * Length)
xPeak =  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
xValley =  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
xAvrPeak = sma(xPeak, 50)
xAvrValley = sma(xValley, 50)
nAvrPeak = Fraction * xAvrPeak
nAvrValley = Fraction * xAvrValley
pos = iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
	     iff(xMean < nAvrPeak and xMean < nAvrValley, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(xMean, color=red, title="Mean")
plot(nAvrPeak, color=blue, title="Peak")
plot(nAvrValley, color=blue, title="Valley")

Mehr