
Diese Strategie ist eine typische Trend-Tracking-Strategie, die durch die Berechnung von Moving Averages für drei verschiedene Perioden und in Verbindung mit einem Preisbruch ein Handelssignal erzeugt. Die Strategie zielt darauf ab, die mittelfristigen Trends des Marktes zu verfolgen und kann durch dynamische Anpassung der Parameter für verschiedene Sorten und Handelsumgebungen verwendet werden.
Die Strategie besteht aus drei Moving Averages: MA1, MA2 und MA3 zwischen MA1 und MA2 entsteht ein Handelskanal, dessen Kreuzung ein Handelssignal erzeugt; MA3 dient zum Filtern von Signalen .
Wenn ein schneller Durchschnittswert MA1 über dem mittelfristigen Durchschnittswert MA2 durchbricht, zeigt dies eine Stärkung des kurzfristigen Trends an, wobei ein Mehr-Signal erzeugt wird, wenn der Preis höher als der langfristige Durchschnitt MA3 ist. Im Gegensatz dazu erzeugt ein Fehlsignal, wenn ein MA1 unter dem MA2 durchbricht und der Preis unter dem MA3 ist.
Die MA3 filtert kurzfristigen Marktrauschen aus und gibt nur dann ein Signal, wenn ein Trend in die mittlere oder lange Phase eingeschaltet ist. Die Strategie passt die Parameter der drei Moving Averages dynamisch an, um die optimale Kombination von Parametern in verschiedenen Märkten zu finden.
Durch die Anpassung der MA-Zyklen kann die Auswahl der verschiedenen Sorten optimiert werden. Die Stop-Loss-Strategie kann optimiert werden, um den Einzelschaden zu kontrollieren. Die Signalwirksamkeit kann in Kombination mit anderen technischen Indikatoren bestätigt werden, um die Wahrscheinlichkeit eines Fehlsignals zu verringern.
Diese Strategie ist eine typische Trend-Tracking-Strategie, die durch die Berechnung von drei Moving Averages und die Beobachtung der Kreuzung von Handelssignalen erzeugt wird. Die Strategie kann durch Parameteroptimierung für verschiedene Sorten verwendet werden, aber es besteht die Gefahr, dass sie ausgesetzt ist und den Wendepunkt verpasst wird. In Zukunft kann die Strategie durch die Einführung anderer technischer Kennzahlen optimiert werden, um die Signalwirksamkeit zu beurteilen und eine Dynamikparameteroptimierungsmechanik zu entwickeln.
/*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)