Quantitative Handelsstrategie auf der Grundlage eines doppelten gleitenden Durchschnitts-Crossovers

Schriftsteller:ChaoZhang, Datum: 2024-02-21 14:28:28
Tags:

img

Übersicht

Diese Strategie heißt Quantitative Trading Strategy Based on Double Moving Average Crossover. Die Hauptidee dieser Strategie besteht darin, die Kreuzsignale zwischen schnellen und langsamen gleitenden Durchschnittslinien zu verwenden, um Preistrends zu bestimmen und entsprechend Kauf- und Verkaufsentscheidungen zu treffen.

Strategieprinzip

Die Kernindikatoren dieser Strategie sind die schnellen und langsamen gleitenden Durchschnittslinien. Die Strategie verwendet die Crossover-Beziehung zwischen den schnellen und langsamen gleitenden Durchschnittslinien, um Preistrends zu bestimmen und auf dieser Grundlage Handelsentscheidungen zu treffen.

Insbesondere wird der schnell gleitende Durchschnittslinie-Parameter auf 24 Perioden und der langsam gleitende Durchschnittslinie-Parameter auf 100 Perioden gesetzt. Wenn die schnellgleitende Durchschnittslinie über die langsam gleitende Durchschnittslinie von unten geht, zeigt sie an, dass die Preise einen Aufwärtstrend betreten, und die Strategie wird zu diesem Zeitpunkt ein Kaufsignal ausstellen. Wenn die schnellgleitende Durchschnittslinie unter die langsam gleitende Durchschnittslinie von oben geht, zeigt sie an, dass die Preise einen Abwärtstrend betreten, und die Strategie wird zu diesem Zeitpunkt ein Verkaufssignal ausstellen.

Durch die Beurteilung der Kreuzungsrichtung der schnellen und langsamen gleitenden Durchschnittslinien können Preisentwicklungsänderungen wirksam erfasst werden, um bei Kauf- und Verkaufsentscheidungen zu helfen.

Vorteile der Strategie

Diese Strategie hat folgende Vorteile:

  1. Das Prinzip ist einfach und leicht zu verstehen, leicht umzusetzen.

  2. Die Parameter der schnellen und langsamen gleitenden Durchschnitte können an die tatsächlichen Bedingungen angepasst werden, wodurch die Strategie flexibler wird.

  3. Eine starke Fähigkeit, Trendveränderungen zu erfassen.

  4. Sie kann die Konsolidierung effektiv filtern und ungültige Geschäfte reduzieren.

Risiken der Strategie

Diese Strategie birgt auch einige Risiken:

  1. Als Trend-Tracking-Indikatoren liegen Crossover-Signale von Doppel gleitenden Durchschnitten oft um einen bestimmten Zeitraum zurück, was zu einem gewissen Grad an Opportunitätskosten führen kann.

  2. Es ist leicht, falsche Signale in schwankenden Märkten zu erzeugen. Doppel gleitende Durchschnitte funktionieren am besten, wenn die Preise einen klaren Trend zeigen.

  3. Die falsche Einstellung der Parameter kann die Strategieleistung beeinträchtigen. Wenn die Parameter des schnellen und langsamen gleitenden Durchschnitts falsch eingestellt werden, beeinträchtigt dies die Empfindlichkeit bei der Erfassung von Trend-Kreuzungen.

Entsprechende Lösungen

  1. Der gleitende Durchschnittszeitraum wird angemessen verkürzt, um die Empfindlichkeit der Crossover-Signale zu erhöhen.

  2. Hinzufügen von Volatilitäts- oder Volumenindikatoren zur Filtration, um ungültige Trades in schwankenden Märkten zu reduzieren.

  3. Parameteroptimierung, um die besten Parameterkombinationen zu finden.

Richtungen für die Optimierung der Strategie

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Verwenden Sie fortschrittlichere gleitende Durchschnittstechnische Indikatoren wie den linearen gewichteten gleitenden Durchschnitt anstelle des einfachen gleitenden Durchschnitts, um die Nachverfolgungs- und Vorhersagefähigkeit der Indikatoren zu verbessern.

  2. Zusätzliche Hilfsindikatoren wie Volumen- und Volatilitätsindikatoren für die gemeinsame Filterung hinzufügen, um ungültige Signale zu reduzieren.

  3. Optimieren Sie schnelle und langsame gleitende Durchschnittsparameter, um die Anpassungsfähigkeit der Parameter zu verbessern.

  4. Nach dem Markteintritt der Strategie können Stop-Loss-Punkte und Trailing-Stop-Loss so konzipiert werden, dass einzelne Verluste kontrolliert werden.

  5. Neue Technologien wie Deep Learning können verwendet werden, um komplexere Preismuster zu identifizieren, um bewegte Durchschnittsquerschnitte bei der Kauf- und Verkaufsentscheidung zu unterstützen, um bessere Ergebnisse zu erzielen.

Zusammenfassung

Im Allgemeinen ist diese Strategie relativ klassisch und einfach. Sie bestimmt Preistrends auf der Grundlage von doppelten gleitenden Durchschnittsindikatoren, um Chancen zu erkennen, wenn sich die Preise von der Konsolidierung zum Trend bewegen. Die Vorteile sind klare Logik und Einfachheit, die für die Verfolgung von Trending-Märkten geeignet sind. Es gibt aber auch einige Mängel wie Signalverzögerung, die durch Parameter-Tuning und Optimierung verbessert werden müssen, um die Stabilität und Effizienz der Strategie zu erhöhen. Insgesamt ist dies als Grundstrategie ziemlich geeignet, muss aber kontinuierlich optimiert werden, um sich an komplexere Marktumgebungen anzupassen.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

//OBV
src = close
obv = ta.cum(math.sign(ta.change(src)) * volume)
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 20, minval = 1, maxval = 100, group="Smoothing")
Limit = input.float(title = "Limit", defval = 1, minval = 0.1, maxval = 10, group="Smoothing")
smoothingLine_ma = ma(obv,smoothingLength, typeMA)
obv_diff = (obv-smoothingLine_ma)*100/obv

//PVT
var cumVolp = 0.
cumVolp += nz(volume)
if barstate.islast and cumVolp == 0
    runtime.error("No volume is provided by the data vendor.")
srcp = close
vt = ta.cum(ta.change(srcp)/srcp[1]*volume)
smoothingLine_map = ma(vt,smoothingLength, typeMA)
pvt_diff = (vt-smoothingLine_map)*100/vt

// plot(obv_diff+close+100 ,title="OBV_DIFF", color = color.rgb(255, 118, 54))
// plot(pvt_diff+close+80 ,title="PVT_DIFF", color = color.rgb(223, 61, 255))

indicator = (pvt_diff+obv_diff)/2
goLongCondition1 = ta.crossover(indicator,Limit)
timePeriod = time >= timestamp(syminfo.timezone, 2023,1, 1, 0, 0)  // Backtesting Time
notInTrade = strategy.position_size <= 0
if goLongCondition1 and timePeriod and notInTrade
    stopLoss = low * 0.99 // -2%
    takeProfit = high * 1.05 // +5%
    strategy.entry('long', strategy.long )
    strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)






// fastEMA = ta.ema(close, 24)
// slowEMA = ta.ema(close, 100)
// goLongCondition1 = ta.crossover(fastEMA, slowEMA)
// timePeriod = time >= timestamp(syminfo.timezone, 2018, 12, 15, 0, 0)
// notInTrade = strategy.position_size <= 0
// if goLongCondition1 and timePeriod and notInTrade
//     stopLoss = low * 0.97
//     takeProfit = high * 1.12
//     strategy.entry('long', strategy.long)
//     strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
// plot(fastEMA, color=color.new(color.blue, 0))
// plot(slowEMA, color=color.new(color.yellow, 0))

Mehr