Golden Cross Optimierte Moving Average Crossover-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-19 13:37:33
Tags:

img

Übersicht

Diese Strategie optimiert die konventionelle gleitende Durchschnitts-Crossover-Strategie, indem sie drei gleitende Durchschnitte mit verschiedenen Perioden setzt und ein goldenes Kreuzmuster mit 9-Perioden-, 50-Perioden- und 100-Perioden-Gleibenden Durchschnitten erstellt. Sie erzeugt Kaufsignale, wenn der kurzfristige MA über den mittelfristigen MA überschreitet, während der langfristige MA im Aufwärtstrend ist.

Strategie Logik

Die Strategie verwendet drei gleitende Durchschnitte mit Perioden von 9, 50 und 100. Der 9-Perioden-MA ist der kurzfristige MA, der 50-Perioden-MA ist der mittelfristige MA und der 100-Perioden-MA ist der langfristige MA. Handelssignale werden durch das Crossover zwischen dem kurzfristigen MA und dem mittelfristigen MA erzeugt. Insbesondere, wenn der langfristige MA in einem Aufwärtstrend (über dem mittelfristigen MA) ist, wird ein Kaufsignal ausgelöst, wenn der kurzfristige MA über den mittelfristigen MA überschreitet. Ein Verkaufssignal wird ausgelöst, wenn der kurzfristige MA unter den mittelfristigen MA überschreitet.

Analyse der Vorteile

Im Vergleich zur herkömmlichen Doppel gleitenden Durchschnitts-Crossover-Strategie fügt diese Strategie die Bedingung hinzu, mittelfristige und langfristige Trends zu beurteilen, bevor Handelssignale generiert werden, was einige ungültige Signale effektiv herausfiltern kann. Wenn langfristige Trends unklar sind, wird die Strategie keine Signale generieren, um eine Konsolidierung zu vermeiden. Gleichzeitig eignet sich diese Strategie zur Erfassung von Trendbewegungen auf kurze und mittlere Sicht und reduziert die Möglichkeit eines aggressiven Eintrags.

Risikoanalyse

Bei der Festlegung von Parametern für diese Strategie muss die Kombination von gleitenden Durchschnittsperioden angepasst werden. Verschiedene Periodenkombinationen haben Auswirkungen auf die Wirksamkeit der Strategie. Wenn die Periodenparameter nicht richtig festgelegt werden, besteht die Gefahr, dass zu viele falsche Signale generiert werden. Darüber hinaus müssen sich Händler der potenziellen systemischen Risiken bewusst sein und Verluste rechtzeitig stoppen, um Risiken zu mindern.

Optimierungsrichtlinien

Es sollte in Erwägung gezogen werden, andere Indikatoren einzubeziehen, die bei der Beurteilung von Markttrends wie MACD, BOLL usw. helfen, und strengere Einstiegsbedingungen festzulegen oder Volatilitätsindikatoren einzubeziehen, um adaptive gleitende Durchschnitte zu konstruieren, damit sich die Parameter automatisch anhand der Marktbedingungen anpassen können, um die Strategie weiter zu optimieren.

Schlussfolgerung

Diese Strategie basiert auf dem herkömmlichen Doppel gleitenden Durchschnitts-Crossover und fügt langfristige MA-Urteil und Filterbedingungen hinzu, die falsche Signale effektiv filtern können und für die Erfassung von kurz- bis mittelfristigen Trendbewegungen geeignet sind.


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

//@version=4
strategy("Golden Cross, SMA 100, Moving Average Strategy (by Coinrule)", shorttitle="Golden_Cross_Strat_MA100_optimized", overlay=true, initial_capital = 1000,process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Input
switch1=input(true, title="Enable Bar Color?")
switch2=input(false, title="Show Fast Moving Average")
switch3=input(true, title="Show Slow Moving Average")

//Calculate Moving Averages
movingaverage_fast = sma(close, input(9))
movingaverage_slow = sma(close, input(100))
movingaverage_normal= sma(close, input(50))

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// Calculation
bullish_cross = crossover(movingaverage_fast, movingaverage_normal)
bearish_cross = crossunder(movingaverage_fast, movingaverage_normal)

//Entry and Exit
if bullish_cross and window() and movingaverage_slow > movingaverage_normal
    strategy.entry("long", strategy.long)

strategy.close("long", when = bearish_cross and window())

// Colors
bartrendcolor = close > movingaverage_fast and close > movingaverage_slow and change(movingaverage_slow) > 0 ? color.green : close < movingaverage_fast and close < movingaverage_slow and change(movingaverage_slow) < 0 ? color.red : color.blue
barcolor(switch1?bartrendcolor:na)

// Output
plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)

bgcolor(color = showDate and window() ? color.gray : na, transp = 90)

Mehr