Diese Strategie bestimmt die Trendrichtung basierend auf der Kreuzung von EMA-Linien mit verschiedenen Perioden und erzeugt entsprechend lange und kurze Signale. Sie verwendet hauptsächlich zwei gleitende Durchschnitte - 10-Tage-EMA und 20-Tage-EMA. Wenn die 10-Tage-EMA unter die 20-Tage-EMA fällt, wird ein kurzes Signal ausgelöst. Wenn die 10-Tage-EMA über die 20-Tage-EMA fällt, wird ein langes Signal ausgelöst. Diese Strategie gehört zu mittelfristigen Handelsstrategien.
Die Strategie nutzt zwei EMA-Linien, darunter die 10-Tage-EMA und die 20-Tage-EMA. Die EMA-Linien können den Preistrend effektiv widerspiegeln. Wenn die kurzfristige EMA-Linie über die längerfristige EMA-Linie kreuzt, zeigt sie an, dass sich der Preistrend von Niedergang zu Aufstieg wandelt, was ein langes Signal ist. Wenn die kurzfristige EMA-Linie unter die längerfristige EMA-Linie kreuzt, zeigt sie an, dass sich der Preistrend von Aufstieg zu Abstieg wandelt, was ein kurzes Signal ist.
Die Strategie kombiniert auch die maximalen und minimalen Werte von Kursschwankungen, um einige Handelssignale zu filtern. Handelssignale werden erst ausgelöst, nachdem die Kursschwankungen ein bestimmtes Maß erreicht haben. Dies kann einige falsche Signale bis zu einem gewissen Grad filtern.
Insbesondere wird durch die Verfolgung der Zeit, in der die maximalen und minimalen Werte erreicht werden, beurteilt, ob sich ein Kurstrend gebildet hat.
Die Strategie weist folgende Vorteile auf:
Diese Strategie birgt auch einige Risiken:
Die Risiken können durch folgende Maßnahmen gemildert werden:
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Zusammenfassend ist diese EMA-Crossover-Strategie eine einfache und praktische Trendfolgestrategie. Sie verwendet EMA-Linien, um die Haupttrendrichtung zu bestimmen, kombiniert mit der Preisschwankungsfilterung für die Entscheidungsfindung.
/*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)