Handelsstrategie des gleitenden Durchschnitts des Golden Cross

Schriftsteller:ChaoZhang, Datum: 2023-12-11
Tags:

img

Übersicht

Die Golden Cross Moving Average Trading Strategie ist eine klassische quantitative Handelsstrategie. Diese Strategie verwendet gleitende Durchschnitte verschiedener Zeiträume, um Markttrends für lange und kurze Positionen zu bestimmen. Wenn der kurzfristige gleitende Durchschnitt über den längerfristigen gleitenden Durchschnitt überschreitet, wird es als Kaufsignal betrachtet. Wenn der kurzfristige gleitende Durchschnitt unter dem langfristigen gleitenden Durchschnitt überschreitet, wird er als Verkaufssignal betrachtet.

Strategie Logik

Diese Strategie basiert auf drei einfachen gleitenden Durchschnitten (SMA) für verschiedene Zeiträume: 50-Tage-, 100-Tage- und 200-Tage.

  1. Eintrittssignal: Wenn der gleitende 50-Tage-Durchschnitt den gleitenden 100-Tage-Durchschnitt überschreitet, gehen Sie lang.

  2. Ausstiegssignal: Wenn der gleitende 50-Tage-Durchschnitt unter den gleitenden 100-Tage-Durchschnitt fällt, schließen Positionen; oder wenn der geschlossene Preis unter dem gleitenden 100-Tage-Durchschnitt liegt, exit; oder wenn der gleitende 100-Tage-Durchschnitt unter den gleitenden 200-Tage-Durchschnitt fällt, exit.

  3. Profit- und Stop-Loss-Aufnahme: Set Trailing-Profit-Aufnahme und Fixed-Stop-Loss.

Diese Strategie nutzt die Fähigkeit der gleitenden Durchschnittswerte, um die durchschnittlichen Preistrends des Marktes effektiv zu bestimmen. Die Überschneidung von kurzfristigen und langfristigen Durchschnittswerten wird als der Markt, der in einen Aufwärtstrend oder einen Abwärtstrend eintritt, angesehen, daher die Long- oder Exit-Signale. Dies ermöglicht es der Strategie, die Markttrends effektiv zu erfassen.

Vorteile

  1. Einfache Implementierung, nur drei gleitende Durchschnitte aus verschiedenen Perioden.

  2. Bewegliche Durchschnitte haben Geräuschfilterfähigkeiten, die die Auswirkungen von Marktzufälligkeit auf Trades reduzieren und Signale zuverlässiger machen.

  3. Bewegliche Durchschnittswerte spiegeln effektiv Veränderungen der durchschnittlichen Marktpreisentwicklung wider und verwenden Crossovers zwischen kurz- und langfristigen Linien, um wesentliche Trendänderungen zu bestimmen.

  4. Die gleitenden Durchschnittsperioden können für verschiedene Risikokontrollniveaus angepasst werden.

Risiken

  1. Kann viele falsche Signale erzeugen, häufige Crossovers können auftreten, wenn die kurz- und langfristigen Durchschnitte zu nahe liegen und zu übermäßigen ungültigen Signalen führen.

  2. Bewegliche Durchschnitte reagieren langsam auf Preisänderungen und können nicht sofort auf Marktnachrichten und wichtige Ereignisse reagieren.

  3. Die Geräuschfilterung bedeutet auch, dass Sie Gewinne aus geringfügigen Marktschwankungen verpassen.

  4. Subjektive Parameterwahl: Die geeigneten gleitenden Durchschnittsperioden sind weitgehend subjektiv und abhängig vom spezifischen Markt.

Möglichkeiten zur Verbesserung

  1. Fügen Sie Filter hinzu, um falsche Signale zu reduzieren, z. B. Preisbereichsfilter, um Signale auf Bewegungen über einer bestimmten Größenordnung zu begrenzen.

  2. Einbeziehung anderer Indikatoren für Kombinationsstrategien, die die Signalgenauigkeit verbessern können, z. B. Volatilitäts- oder Volumenindikatoren.

  3. Hinzufügen von modularen Optimierungsmodulen zur dynamischen Optimierung gleitender Durchschnittszeiten auf Basis von Algorithmen für maschinelles Lernen, die eine Anpassung an sich ändernde Marktbedingungen ermöglichen.

  4. Einbeziehung fortgeschrittener Deep-Learning-Modelle anstelle von gleitenden Durchschnitten für überlegene Feature-Extraktions- und Modellierungsfähigkeiten.

Schlussfolgerung

Die Golden Cross Moving Average Trading Strategie ist eine typische Trend-Folge-Strategie. Sie spiegelt die durchschnittlichen Marktpreistendenzen einfach und praktisch wider und ist für Anfänger geeignet. Sie hat jedoch auch einige Mängel, die durch Verbesserung der Signalkwalitat, Kombination mit anderen technischen Indikatoren, Einführung adaptiver Mechanismen usw. verbessert werden können, um sich an komplexere Märkte anzupassen. Insgesamt ist dies eine Strategie mit hohem Referenz- und Lernwert.


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


Mehr