
Diese Strategie basiert auf der Kreuzung der EMA-Grenzlinie in verschiedenen Perioden, um die Richtung des Trends zu bestimmen, und basiert darauf, um mehr Shorting-Signal zu erstellen. Sie verwendet hauptsächlich 2 Mittellinien, die 10-Tage- und 20-Tage-Linie.
Die Strategie verwendet zwei EMA-Mittellinien, einschließlich der 10- und der 20-Tage-Linie. Die EMA-Mittellinien spiegeln die Trendrichtung der Preise sehr gut wider. Wenn die kurzfristige EMA-Linie von unten nach oben die langfristige EMA-Linie durchquert, ist dies ein Mehrwertsignal. Wenn die kurzfristige EMA-Linie von oben nach unten die langfristige EMA-Linie durchquert, ist dies ein Fehlwertsignal.
Die Strategie kombiniert die Maximal- und Minimalwerte der Schwankungen, um einen Teil des Handelssignals zu filtern. Das Handelssignal wird nur ausgegeben, wenn die Preisschwankungen einen bestimmten Umfang erreicht haben. Dies kann zum Teil falsche Signale filtern.
Die Strategie beurteilt, ob ein Preistrend entsteht, indem sie den Höchst- und Minimalwert des Preises aufzeichnet. Ein echtes Handelssignal wird erst ausgesendet, wenn der Höchst- oder Minimalwert eine bestimmte Zeit erreicht hat.
Die Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Das Risiko kann durch folgende Maßnahmen verringert werden:
Die Strategie kann in folgenden Richtungen weiter optimiert werden:
Die EMA-Cross-Strategie ist insgesamt eine einfache und praktische Trend-Tracking-Strategie. Sie nutzt die EMA-Gewinnlinie, um die Richtung des großen Trends zu bestimmen, und kombiniert die Preisfluktuations-Filtersignale, um Handelsentscheidungen zu treffen. Die Strategie ist leicht zu verstehen und die Parameter anzupassen, um mittel- und kurzfristige Geschäfte anzupassen.
/*backtest
start: 2024-01-15 00:00:00
end: 2024-01-22 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("PierceMAStrat", overlay=true)
lenMA0 = input(title="Length 0",defval=2)
lenMA1=input(title="Length 1",defval=10)
lenMA2=input(title="Length 2", defval=20)
lenMA3 = input(title = "Length3", defval =50)
emaLen0 = ema(close, lenMA0)
emaLen1 = ema(close, lenMA1)
emaLen2 = ema(close, lenMA2)
emaLen3 = ema(close, lenMA3)
ascent = if emaLen1[1] < emaLen1[0]
true
else
false
descent = if emaLen1[1] > emaLen1[0]
true
else
false
TimeSinceAscensionStart = if ascent == true
barssince(descent == true)
else
0
StartUp = if TimeSinceAscensionStart < 1
true
else
false
StartDown = if TimeSinceAscensionStart < 1
false
else
true
AscentBarCounter = barssince(StartUp == true)
DescentBarCounter = barssince(StartDown == true)
MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10
true
else
false
MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5
true
else
false
longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3
true
else
false
shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3
true
else
false
//longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3))
//shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3)
if longCond == true
strategy.entry("LONG", strategy.long)
if shortCond == true
strategy.entry("SHORT", strategy.short)
plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small)
plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small)
//plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny)
//plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny)
//plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small)
//plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small)
//plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small)
//plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small)
//plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small)
//plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS")
plot(emaLen1, color=green, transp=0, linewidth=2)
plot(emaLen2, color=red, transp=30, linewidth=2)
plot(emaLen3, color=blue, transp=30, linewidth=2)