Gewichtete quantitative gleitende durchschnittliche Crossover-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 12.06.2023 12:05 Uhr
Tags:

img

Übersicht

Diese Strategie heißtGewichtete quantitative gleitende Durchschnitts-Crossover-StrategieDie Grundidee besteht darin, schnelle und langsame Linien basierend auf Preis, Handelsvolumen und anderen Indikatoren zu entwerfen und Kauf- und Verkaufssignale zu erzeugen, wenn zwischen ihnen ein goldenes Kreuz und ein totes Kreuz auftreten.

Strategie Logik

Der Kernindikator dieser Strategie ist der quantitative gleitende Durchschnitt (QMA). QMA misst die Trendrichtung, indem er den gewichteten Durchschnittspreis über einen bestimmten Zeitraum berechnet. Im Gegensatz zum regulären gleitenden Durchschnitt werden die Gewichte (Gewicht = Preis * Handelsvolumen) der Preise in QMA im Laufe der Zeit abnehmen. So haben die neuesten Preise größere Gewichte, die schneller auf die Marktänderung reagieren können.

Insbesondere erzeugt diese Strategie eine schnelle QMA-Linie mit 25 Tagen und eine langsame QMA-Linie mit 29 Tagen. Sie erzeugt ein Kaufsignal, wenn die schnelle Linie über die langsame Linie überschreitet, und ein Verkaufssignal, wenn die schnelle Linie unter die langsame Linie überschreitet.

Analyse der Vorteile

Im Vergleich zum regulären gleitenden Durchschnitt hat diese Strategie folgende Vorteile:

  1. Schneller auf den Markt reagieren, damit er kurzfristige Chancen nutzen kann.
  2. Kombination mehrerer Dimensionen, einschließlich Preis und Handelsvolumen, wodurch es stabiler wird.
  3. Flexible Einstellungen von Parametern zur Anpassung an verschiedene Marktumgebungen.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Hohe Handelshäufigkeit von kurzfristigen Geschäften, was zu erhöhten Transaktionskosten und Verschiebungen führen kann.
  2. Überanpassung durch übermäßige Parameteroptimierung.
  3. Der Indikatoreffekt kann beeinträchtigt werden, wenn das Handelsvolumen unzureichend ist.

Die oben genannten Risiken könnten durch eine angemessene Anpassung der Häufigkeit, eine strenge Vorwärtsanalyse und die Einbeziehung anderer Indikatoren gemindert werden.

Verbesserungsrichtlinien

Diese Strategie kann noch weiter optimiert werden:

  1. Dynamische Anpassung der Parameter der QMA, damit sie sich an die Marktvolatilität anpasst.
  2. Filtern Sie Handelschancen mit Indikatoren wie Volatilität und Handelsvolumen.
  3. Hinzufügen von Stop-Loss-Strategien zur Kontrolle von Einzelverlusten.

Schlussfolgerung

Im Allgemeinen handelt es sich um eine stabile kurzfristige Handelsstrategie. Im Vergleich zu einem einzelnen Preisdurchschnitt kann sein Indikator die Angebots-Nachfrage-Beziehung auf dem Markt besser widerspiegeln. Mit der richtigen Parameter-Ausrichtung und dem Risikomanagement kann diese Strategie langfristig stabil operieren und solide Gewinne erzielen.


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


Mehr