Klassische Golden Cross Moving Average-Handelsstrategie


Erstellungsdatum: 2023-12-11 11:37:36 zuletzt geändert: 2023-12-11 11:37:36
Kopie: 0 Klicks: 606
1
konzentrieren Sie sich auf
1621
Anhänger

Klassische Golden Cross Moving Average-Handelsstrategie

Überblick

Die Golden Cross Moving Average Trading Strategy ist eine eher klassische Quantitative Trading-Strategie. Die Strategie nutzt bewegliche Durchschnitte aus verschiedenen Perioden, um zu beurteilen, ob die Markttrends zu kurz gemacht werden. Wenn ein kurzer Moving Average einen längeren Moving Average durchbricht, wird dies als Kaufsignal betrachtet.

Strategieprinzip

Die Strategie basiert auf einfachen Moving Averages (SMA) mit drei verschiedenen Perioden: 50-Tage-, 100-Tage- und 200-Tage-Linien. Die spezifische Handelslogik lautet wie folgt:

  1. Eintrittssignal: Wenn der 50-Tage-Moving-Average auf dem 100-Tage-Moving-Average platziert wird, wird ein zusätzlicher Eintritt durchgeführt.

  2. Ausstiegssignal: Ausstieg, wenn der 50-Tage-Moving Average unter dem 100-Tage-Moving Average liegt; oder Ausstieg, wenn der Schlusskurs unter dem 100-Tage-Moving Average liegt; oder Ausstieg, wenn der 100-Tage-Moving Average unter dem 200-Tage-Moving Average liegt.

  3. Stopp-Loss: Einstellungen für bewegliche Stopps und feste Stopps.

Die Strategie nutzt die Eigenschaften eines Moving Averages, um die Preise des Marktdurchschnitts effektiv zu beurteilen. Wenn ein kurzer Durchschnitt über dem langfristigen Durchschnitt fällt, wird dies als ein Signal für einen Aufwärtstrend in den Markt betrachtet, und so wird mehr getan. Wenn ein kurzer Durchschnitt unter dem langfristigen Durchschnitt fällt, wird dies als ein Abwärtstrend in den Markt betrachtet, und so aus dem Spiel. Auf diese Weise kann der Markttrend effektiv erfasst werden.

Strategische Vorteile

  1. Die Strategie ist einfach zu handhaben und umsetzbar. Die Strategie kann nur mit einem Moving Average aus drei verschiedenen Perioden erstellt werden.

  2. Eine starke Stabilität. Der Moving Average selbst hat eine Noise-Abbau-Funktion, die den Einfluss von zufälligen Marktschwankungen auf den Handel wirksam ausschaltet und das Signal stabiler und zuverlässiger macht.

  3. Der Moving Average ist ein effektiver Indikator für die Entwicklung der Marktpreise und kann große Marktveränderungen anhand der Kreuzung von langen und kurzen Periodenzügen beurteilen.

  4. Hohe Anpassbarkeit. Selbstbestimmung der Periodenkombination von Moving Averages, unterschiedliche Risikokontrollen.

Strategisches Risiko

  1. Es kann zu einer hohen Anzahl von Falschsignalen kommen. Wenn die kurz- und langfristigen Moving Averages zu nahe beieinander liegen, kann es zu einer häufigen Kreuzung kommen, die zu einer hohen Anzahl von ungültigen Signalen führt.

  2. Unmöglichkeit, schnell auf Unerwartete zu reagieren. Der Moving Average reagiert langsam auf Preisänderungen und kann nicht in Echtzeit auf unerwartete Nachrichten und wichtige Ereignisse auf dem Markt reagieren.

  3. Die geräuschfreie Eigenschaft des Moving Averages bedeutet auch, dass es nicht möglich ist, die geringen Schwankungen im Markt zu erfassen und zu profitieren.

  4. Die Einstellung der Parameter ist relativ subjektiv. Die Wahl der Moving Average-Perioden ist relativ subjektiv und es ist notwendig, die optimalen Parameter je nach Markt zu bestimmen.

Richtung der Strategieoptimierung

  1. Erhöhen Sie die Filterbedingungen, um zu viele Falschsignale zu vermeiden. Setzen Sie beispielsweise eine Preisspanne als Filter, um nur dann ein Handelssignal zu erzeugen, wenn eine bestimmte Bandbreite überschritten wird.

  2. In Kombination mit anderen Indikatoren. In Kombination mit anderen Indikatoren, z. B. der Schwankungsrate und der Transaktionsmenge, kann die Genauigkeit des Signals verbessert werden.

  3. Hinzufügung eines Moduls zur Adaptionsoptimierung. Dynamische Optimierung der Periodiparameter des Moving Averages durch Technologien wie Machine Learning, um sie an Veränderungen der externen Marktumgebung anzupassen.

  4. In Kombination mit Deep-Learning-Modellen. Die Moving Average wird durch ein fortgeschritteneres Deep-Learning-Modell ersetzt, das eine stärkere Fähigkeit zur Extrahierung und Modellierung von Merkmalen hat.

Zusammenfassen

Die Gold-Cross-Equilibrium-Trading-Strategie ist eine eher typische Trend-Follow-Strategie. Sie spiegelt die durchschnittliche Trendänderung der Marktpreise wider, ist einfach und praktisch und für Anfänger geeignet. Die Strategie hat jedoch auch einige Mängel, die in mehreren Aspekten optimiert werden können, z. B. durch die Verbesserung der Signalqualität, die Kombination mit anderen technischen Indikatoren und die Einführung von Anpassungsmechanismen, um die Strategie an ein komplexeres Marktumfeld anzupassen.

Strategiequellcode
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)