Quantitative Handelsstrategie basierend auf gewichtetem gleitendem Durchschnitt-Crossover


Erstellungsdatum: 2023-12-06 12:05:01 zuletzt geändert: 2023-12-06 12:05:01
Kopie: 0 Klicks: 626
1
konzentrieren Sie sich auf
1619
Anhänger

Quantitative Handelsstrategie basierend auf gewichtetem gleitendem Durchschnitt-Crossover

Überblick

Diese Strategie heißtGewichtung der Quantifizierung der Moving Average-Kreuzung(Weighted Quantitative Moving Average Crossover Strategy), dessen Grundidee es ist, mehrere Indikatoren wie Preis, Handelsvolumen und andere zu kombinieren, um eine schnelle und eine langsame Linie zu entwerfen und ein Kauf- und Verkaufssignal zu senden, wenn Gold- und Todesforken auftreten.

Strategieprinzip

Der Kern der Strategie ist der quantitative Moving Average (QMA). Der QMA misst die Trendrichtung durch die Berechnung eines gewichteten Durchschnittspreises über einen bestimmten Zeitraum. Er unterscheidet sich von einem gewöhnlichen Moving Average darin, dass das Gewicht der Preise (Wage = Preis)*Der Wert der Aktien, die in den letzten Jahren gehandelt wurden, ist im Laufe der Zeit zurückgegangen.

Die Strategie erstellt eine schnelle QMA-Linie und eine langsame QMA-Linie. Die Schnelle Linie-Parameter sind auf 25 Tage und die langsame Linie-Parameter auf 29 Tage festgelegt. Es wird ein Kaufsignal erzeugt, wenn die Schnelle Linie die langsame Linie von unten durchquert.

Analyse der Stärken

Im Vergleich zum normalen Moving Average hat diese Strategie folgende Vorteile:

  1. Schneller auf die Märkte reagieren, um kurzfristige Chancen zu nutzen
  2. Mehrdimensionale Kombination von Preisen und Transaktionsvolumen, um eine höhere Stabilität zu erreichen
  3. Die Parameter sind flexibel eingestellt, um sich an unterschiedliche Marktumstände anzupassen

Risikoanalyse

Die Strategie birgt auch Risiken:

  1. Kurzleitungen sind häufig und können zu hohen Transaktionskosten und Schlupfpunkten führen.
  2. PARAMETERS Überoptimierung, die zu einer Kurvenpassung führen kann
  3. Der Indikator kann bei geringer Handelsmenge einen Rabatt erzielen

Diese Risiken können durch eine angemessene Frequenz-Anpassung der Parameter, eine strenge Walk-Forward-Analyse und in Kombination mit anderen Indikatoren gemindert werden.

Optimierungsrichtung

Die Strategie kann noch weiter optimiert werden:

  1. Dynamische Anpassung der QMA-Parameter, um sie an die Schwankungen des Marktes anzupassen
  2. Filterung der Eintrittschancen durch Indikatoren wie Volatilität und Handelsvolumen
  3. Erhöhung der Stop-Loss-Strategie und Kontrolle von Einzelschäden

Zusammenfassen

Diese Strategie ist im Allgemeinen eine kurzfristige Handelsstrategie mit hoher Stabilität. Ihre Indikatoren spiegeln die Marktversorgung und -nachfrage besser wider als die einzelnen Preisdurchschnitte. Durch die Einführung von Parameteranpassungen und Risikokontrollen kann diese Strategie langfristig stabil funktionieren und gute Erträge erzielen.

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

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA