Diese Strategie ist eine dynamische gleitende Durchschnittskombinationsstrategie, die auf mehreren Zeitrahmen arbeitet. Sie verwendet exponentielle gleitende Durchschnitte (EMA) unterschiedlicher Länge für das Trendbeurteilen und Ein-/Ausgangssignale.
Die Strategie verwendet 7 EMAs, die sich mit unterschiedlichen Geschwindigkeiten bewegen, von der schnellsten bis zur langsamsten: 3-Perioden-EMA, 15-Perioden-EMA, 19-Perioden-EMA, 50-Perioden-EMA, 100-Perioden-EMA, 150-Perioden-EMA und 200-Perioden-EMA. Diese 7 EMAs sind in einer trapezförmigen Formation angeordnet. Um lange und kurze Signale zu erzeugen, muss der Schlusskurs diese EMAs sukzessiv durchbrechen, um einen starken Trendbeitrag nach der Umkehr zu gewährleisten.
Darüber hinaus beinhaltet die Strategie auch den Preisbruch der jüngsten Höchstwerte und den Preisbruch der nahen historischen Höchstwerte, um lange Signale zu bestätigen, und verwendet den Preisbruch der jüngsten niedrigen und nahen historischen Tiefs, um kurze Signale zu bestätigen. Dies hilft, falsche Ausbrüche zu vermeiden.
Die Ausstiegsregeln verlangen, dass der Schlusskurs die schnelleren EMAs sukzessive in Richtung der langsameren EMAs durchbricht, was auf eine Trendumkehr hinweist.
Lösungen:
Die Strategie hat eine klare Logik der Verwendung von 7 EMAs unterschiedlicher Geschwindigkeiten zur Bestimmung von Trends und doppelten Ausstiegsregeln zur Erkennung von Umkehrungen. Aber es gibt keinen Stop-Loss-Mechanismus, der zu einem großen Verlustrisiko führt, und es kann vorzeitig aussteigen. Verbesserungen können in Aspekten wie Hinzufügen von Stop-Loss, Parameter-Tuning, Indikatorfilterung vorgenommen werden, um es in ein solides Handelssystem zu verwandeln.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true ) Length = input(3, minval=1) Length2 = input(15, minval=1) Length3 = input(19, minval=1) //Length33 = input(25, minval=1) Length4 = input(50, minval=1) Length44 = input(100, minval=1) Length5 = input(150, minval=1) Length6 = input(171, minval=1) Length66 = input(172, minval=1) xPrice = input(close) xEMA1 = ema(xPrice, Length) xEMA2 = ema(xPrice, Length2) xEMA3 = ema(xPrice, Length3) //xEMA33 = ema(xPrice, Length33) xEMA4 = ema(xPrice, Length4) xEMA44 = ema(xPrice, Length44) xEMA5 = ema(xPrice, Length5) xEMA6 = ema(xPrice, Length6) xEMA66 = ema(xPrice, Length66) // plot(xEMA1, color=color.white) // plot(xEMA2, color=color.red) // plot(xEMA3, color=color.green) // plot(xEMA4, color=color.purple) // plot(xEMA44, color=color.gray) // plot(xEMA5, color=color.maroon) // plot(xEMA6, color=color.blue) // plot(xEMA66, color=color.orange) 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 = 2000, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true long = close > xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4 and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6 and xEMA6> xEMA66 and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4 and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond notlong = close < xEMA1 strategy.entry("long",1,when=long) strategy.entry("short",0,when=short) exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4 exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4) exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4 exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4) strategy.close("long", when = exitlong1 or exitlong2) strategy.close("short", when= exitshort1 or exitshort2)