Diese Strategie erzeugt Handelssignale basierend auf den Überschreitungen zwischen der schnellen EMA-Linie und der langsamen EMA-Linie. Wenn die schnelle EMA-Linie über die langsame EMA-Linie kreuzt, wird ein Kaufsignal erzeugt. Wenn die schnelle EMA-Linie unter die langsame EMA-Linie kreuzt, wird ein Verkaufssignal erzeugt. Diese Strategie nutzt den Vorteil des gleitenden Durchschnitts, um den Markttrend effektiv zu verfolgen und Handelssignale während der Trendinitiation zu erzeugen.
Die Kernindikatoren dieser Strategie sind eine schnelle EMA-Linie und eine langsame EMA-Linie. Die Strategie setzt zwei EMA-Linien mit unterschiedlichen Parametern auf, wobei 10 für eine schnelle EMA und 20 für eine langsame EMA sind. Die 10-tägige EMA-Linie reagiert schneller auf Preisänderungen, während die 20-tägige Linie langsamer reagiert. Wenn die kurzfristige EMA-Linie über die langfristige EMA-Linie überschreitet, bedeutet dies, dass die kurzfristige Durchschnittslinie die langfristige Linie nach oben führt, was bedeutet, dass der Markt in den Bullenzustand wechseln kann. Zu diesem Zeitpunkt wird ein Kaufsignal generiert. Im Gegenteil, wenn die kurze EMA unter die lange EMA fällt, bedeutet dies, dass die kurze EMA ihre Führungskraft vor der langen EMA verliert, was bedeutet, dass der Markt in den Bärenzustand wechseln kann. Dementsprech wird ein Verkaufssignal generiert.
Durch die Nutzung der Crossover-Logik zwischen schnellen und langsamen EMA-Linien erfasst diese Strategie die Wechselpunkte des Markttrends rechtzeitig und erzeugt entsprechend Handelssignale. In der Zwischenzeit hat die EMA selbst die Fähigkeit, falsche Signale auszufiltern und übermäßigen Handel während der Marktkonsolidierung zu vermeiden. Dies ermöglicht es der Strategie, Marktwendepunkte zu erfassen und gleichzeitig falsche Trades zu reduzieren, was zu einer höheren Rentabilität führt.
Um diesen Risiken entgegenzuwirken, können Optimierungen wie das Hinzufügen von Filterregeln, die Kombination von MACD, um falsche Signale zu vermeiden, die Verwendung von adaptivem EMA zur Beschleunigung der Reaktion usw. eingeführt werden.
Die möglichen Richtungen für eine weitere Optimierung sind:
Diese Strategie erfasst wichtige Marktwendepunkte durch die Crossover-Logik von doppelten EMA-Linien, was sie für den Live-Handel wirksam macht. Mit zusätzlichen Filtern, unterstützenden Indikatoren und Stop-Loss-Optimierungen kann die Stabilität der Strategie weiter verbessert werden.
/*backtest start: 2023-01-15 00:00:00 end: 2024-01-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Backtest single EMA cross", overlay=true) qty = input(100000, "Buy quantity") testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testStartMin = input(0, "Backtest Start Minute") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, testStartMin) testStopYear = input(2099, "Backtest Stop Year") testStopMonth = input(1, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? #00FF00 : na testPeriod() => true ema1 = input(10, title="Select EMA 1") ema2 = input(20, title="Select EMA 2") expo = ema(close, ema1) ma = ema(close, ema2) avg_1 = avg(expo, ma) s2 = cross(expo, ma) ? avg_1 : na //plot(s2, style=plot.style_line, linewidth=3, color=color.red, transp=0) p1 = plot(expo, color=#00FFFF, linewidth=2, transp=0) p2 = plot(ma, color=color.orange, linewidth=2, transp=0) fill(p1, p2, color=color.white, transp=80) longCondition = crossover(expo, ma) shortCondition = crossunder(expo, ma) if testPeriod() strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor =#FFFFFF , style=shape.labelup, size = size.normal, location=location.belowbar, color = #1B8112, transp = 0) plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = #FFFFFF, style=shape.labeldown, size = size.normal, location=location.abovebar, color = #FF5733, transp = 0)