Diese Strategie basiert auf dem Crossover-Prinzip von gleitenden Durchschnitten zum Handel. Sie verwendet zwei gleitende Durchschnitte und erzeugt Kaufsignale, wenn der kurzfristige gleitende Durchschnitt über den langfristigen gleitenden Durchschnitt von unten kreuzt. Verkaufssignale werden erzeugt, wenn der Preis unter einen anderen gleitenden Durchschnitt bricht. Diese Strategie eignet sich für Trending-Märkte, die in der Lage sind, einige Lärmgeschäfte effektiv auszufiltern und den Haupttrend zu erfassen.
Diese Strategie verwendet benutzerdefinierte kurzfristige und langfristige gleitende Durchschnittszeiten, Ausgangsgliederungszeiten und gleitende Durchschnittsberechnungsmethoden.
Wenn der kurzfristige gleitende Durchschnitt über den langfristigen gleitenden Durchschnitt von unten kreuzt, wird ein Kaufsignal generiert. Dies zeigt an, dass der kurzfristige Trend in einen Aufwärtstrend umgestellt wurde und wir kaufen können.
Wenn der Schlusskurs unter den Exit-Drehdurchschnitt fällt, wird ein Verkaufssignal generiert. Dies zeigt eine Trendumkehr an, so dass wir die Position verlassen sollten.
Daher stammen die Handelssignale der Strategie aus der Überschneidung von kurzfristigen und langfristigen gleitenden Durchschnitten und der Beziehung zwischen dem Schlusskurs und dem Ausgangsgliederungsdurchschnitt.
Die Vorteile dieser Strategie sind:
Einfach und einfach umzusetzen.
Anpassungsfähige Parameter passen sich unterschiedlichen Marktbedingungen an.
Die gleitenden Durchschnitte filtern das Geräusch aus und erfassen den Haupttrend.
Kann andere technische Indikatoren wie Trend, Unterstützung/Widerstand zur weiteren Optimierung enthalten.
Kontrollierbares Risiko-Rendite-Verhältnis, hat einen Stop-Loss-Mechanismus.
Die Risiken sind:
Anfällig für falsche Signale auf nicht-trendigen Konsolidierungsmärkten.
Eine falsche Einstellung der Parameter kann zu fehlenden Trends oder zu vielen ungültigen Trades führen.
Eine unsachgemäße Stop-Loss-Platzierung könnte die Verluste erhöhen.
Versagte Ausbrüche können Verluste verursachen.
Die Parameter müssen rechtzeitig angepasst werden, um den Marktveränderungen gerecht zu werden.
Lösungen umfassen die Optimierung von Parametern, die Einbeziehung anderer Filter, die Anpassung von Stops, das Warten auf eine Trendbestätigung vor dem Handel usw.
Diese Strategie kann verbessert werden, indem
Entwicklung von Mechanismen zur Tendenzbestimmung und Handel nur nach Tendenzbestätigung.
Filter wie Lautstärke oder Volatilität hinzufügen, um Signale zu filtern.
Dynamische Optimierung der gleitenden Durchschnittsperioden.
Optimierung des Stop-Loss-Mechanismus für einen Trailing-Stop.
Einbeziehung von Unterstützung/Widerstand und anderen Indikatoren zur weiteren Bestätigung der Signale.
Anpassung der Parameter anhand verschiedener Produkte und Zeitrahmen.
Insgesamt ist diese gleitende Durchschnitts-Crossover-Strategie ein einfaches und praktisches Trendfolgensystem. Sie kann an die Marktbedingungen angepasst werden, indem Parameter angepasst werden und die Haupttrendrichtung in den Trending-Märkten erfasst wird. Allerdings sollten Risiken wie Trendfehlidentifikation beachtet werden, und eine ständige Optimierung ist erforderlich, um sich an sich ändernde Märkte anzupassen. Im Allgemeinen hat diese Strategie eine gute Lebensfähigkeit.
/*backtest start: 2022-10-30 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h 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/ // © TwoChiefs //@version=4 strategy("John EMA Crossover Strategy", overlay=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2020, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// //CREATE USER-INPUT VARIABLES periodShort = input(13, minval=1, title="Enter Period for Short Moving Average") smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"]) periodLong = input(48, minval=1, title="Enter Period for Long Moving Average") smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"]) periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average") smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"]) src1 = close pivot = (high + low + close) / 3 //MA CALCULATION FUNCTION ma(smoothing, src, length) => if smoothing == "RMA" rma(src, length) else if smoothing == "SMA" sma(src, length) else if smoothing == "EMA" ema(src, length) else if smoothing == "WMA" wma(src, length) else if smoothing == "VWMA" vwma(src, length) else if smoothing == "SMMA" na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length else if smoothing == "HullMA" wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length))) //ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE shortMA=ma(smoothingShort, pivot, periodShort) longMA=ma(smoothingLong, pivot, periodLong) exitMA=ma(smoothingExit, pivot, periodExit) //PLOT THOSE VARIABLES plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average") plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average") plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average") //BUY STRATEGY buy = crossover(shortMA,longMA) ? true : na exit = crossunder(close,exitMA) ? true : na strategy.entry("long",true,when=buy and time_cond) strategy.close("long",when=exit and time_cond) if (not time_cond) strategy.close_all()