Diese Strategie erzeugt Handelssignale durch Berechnung von drei gleitenden Durchschnitten verschiedener Zeiträume und Kombination von Preisdurchbrüchen. Sie gehört zu einer typischen Trendfolgestrategie. Die Strategie zielt darauf ab, mittelfristigen Markttrends zu folgen und kann durch dynamische Anpassung von Parametern an verschiedene Produkte und Handelsumgebungen angepasst werden.
Die Strategie umfasst drei gleitende Durchschnitte: MA1, MA2 und MA3. MA1 und MA2 bilden einen Handelskanal, und ihr Crossover erzeugt Handelssignale; MA3 wird zum Filtern von Signalen verwendet.
Wenn der schnelle gleitende Durchschnitt MA1 den mittelfristigen gleitenden Durchschnitt MA2 überschreitet, zeigt dies die Stärkung des kurzfristigen Trends an. Wenn der Preis zu diesem Zeitpunkt über dem langfristigen gleitenden Durchschnitt MA3 liegt, wird ein langes Signal erzeugt; umgekehrt, wenn der MA1 unter den MA2 überschreitet und der Preis unter dem MA3 liegt, wird ein kurzes Signal erzeugt.
Die Rolle von MA3 besteht darin, kurzfristiges Marktlärm auszufiltern und erst nach Feststellung, dass der Trend in die mittelfristige und langfristige Phase eingetreten ist, Signale zu erzeugen.
Kann MA-Perioden für verschiedene Produkte optimieren; Stop-Loss optimieren, um einzelne Verluste zu kontrollieren; andere technische Indikatoren kombinieren, um die Signalgültigkeit zu bestätigen und falsche Signale zu reduzieren.
Diese Strategie erzeugt Handelssignale durch Berechnung von drei gleitenden Durchschnitten und Beobachtung ihrer Kreuzungen. Mit der Idee, schnelle, mittlere und langsame Linien zu kombinieren, um Trends zu bestimmen, ist es eine typische Trend-Folgende Strategie. Die Strategie kann durch Parameteroptimierung an verschiedene Produkte angepasst werden, riskiert jedoch Whipsaws und fehlende Wendungen. Zukünftige Verbesserungen könnten andere technische Indikatoren einführen, um die Signalgültigkeit zu beurteilen, dynamische Parameteroptimierungsmechanismen zu entwickeln usw., um die Strategie flexibler zu machen.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 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/ // © Meesemoo //@version=4 strategy("Custom MA Strategy Tester", overlay = true) MA1Period = input(13, title="MA1 Period") MA1Type = input(title="MA1 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA1Source = input(title="MA1 Source", type=input.source, defval=close) MA1Visible = input(title="MA1 Visible", type=input.bool, defval=true) MA2Period = input(50, title="MA2 Period") MA2Type = input(title="MA2 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA2Source = input(title="MA2 Source", type=input.source, defval=close) MA2Visible = input(title="MA2 Visible", type=input.bool, defval=true) MA3Period = input(200, title="MA3 Period") MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "DEMA", "TEMA"]) MA3Source = input(title="MA3 Source", type=input.source, defval=close) MA3Visible = input(title="MA3 Visible", type=input.bool, defval=true) ShowCrosses = input(title="Show Crosses", type=input.bool, defval=true) MA1 = if MA1Type == "SMA" sma(MA1Source, MA1Period) else if MA1Type == "EMA" ema(MA1Source, MA1Period) else if MA1Type == "WMA" wma(MA1Source, MA1Period) else if MA1Type == "RMA" rma(MA1Source, MA1Period) else if MA1Type == "HMA" wma(2*wma(MA1Source, MA1Period/2)-wma(MA1Source, MA1Period), round(sqrt(MA1Period))) else if MA1Type == "DEMA" e = ema(MA1Source, MA1Period) 2 * e - ema(e, MA1Period) else if MA1Type == "TEMA" e = ema(MA1Source, MA1Period) 3 * (e - ema(e, MA1Period)) + ema(ema(e, MA1Period), MA1Period) MA2 = if MA2Type == "SMA" sma(MA2Source, MA2Period) else if MA2Type == "EMA" ema(MA2Source, MA2Period) else if MA2Type == "WMA" wma(MA2Source, MA2Period) else if MA2Type == "RMA" rma(MA2Source, MA2Period) else if MA2Type == "HMA" wma(2*wma(MA2Source, MA2Period/2)-wma(MA2Source, MA2Period), round(sqrt(MA2Period))) else if MA2Type == "DEMA" e = ema(MA2Source, MA2Period) 2 * e - ema(e, MA2Period) else if MA2Type == "TEMA" e = ema(MA2Source, MA2Period) 3 * (e - ema(e, MA2Period)) + ema(ema(e, MA2Period), MA2Period) MA3 = if MA3Type == "SMA" sma(MA3Source, MA3Period) else if MA3Type == "EMA" ema(MA3Source, MA3Period) else if MA3Type == "WMA" wma(MA3Source, MA3Period) else if MA3Type == "RMA" rma(MA3Source, MA3Period) else if MA3Type == "HMA" wma(2*wma(MA3Source, MA3Period/2)-wma(MA3Source, MA3Period), round(sqrt(MA3Period))) else if MA3Type == "DEMA" e = ema(MA3Source, MA3Period) 2 * e - ema(e, MA3Period) else if MA3Type == "TEMA" e = ema(MA3Source, MA3Period) 3 * (e - ema(e, MA3Period)) + ema(ema(e, MA3Period), MA3Period) p1 = plot(MA1Visible ? MA1 : na, color=color.green, linewidth=1) p2 = plot(MA2Visible ? MA2 : na, color=color.yellow, linewidth=1) p3 = plot(MA3Visible ? MA3 : na, color=color.red, linewidth=2) fill(p1, p2, color.silver, transp=80, title="Fill") start = timestamp(2019, 1, 1, 1, 0) end = timestamp(2025, 1, 1, 1, 0) if time >= start and time <= end longCondition = crossover(MA1, MA2) and close > MA3 if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(MA1, MA2) and close < MA3 if (shortCondition) strategy.entry("Short", strategy.short)