Diese Strategie identifiziert Kauf- und Verkaufssignale, indem sie das Crossover von zwei gleitenden Durchschnitten des MACD-Indikators berechnet.
Die Strategie berechnet zunächst die schnelle Linie (12-Perioden-EMA), die langsame Linie (26-Perioden-EMA) und die MACD-Differenz.
Um falsche Signale auszufiltern, überprüft der Code auch das Signal der vorherigen Kerze. Das aktuelle Signal wird nur ausgelöst, wenn die vorherige Kerze ein entgegengesetztes Signal hat (Kauf vs. Verkauf oder umgekehrt).
Darüber hinaus werden auf dem Diagramm Pfeilformen angezeigt, um Kauf- und Verkaufssignale anzuzeigen.
Zu den Vorteilen dieser Strategie gehören:
Einige Risiken dieser Strategie:
Einige Möglichkeiten zur Verbesserung der Strategie:
Die doppelte gleitende Durchschnitts-Crossover-Pfeilstrategie ist ziemlich einfach und praktisch. Durch die Verwendung von Crossover von zwei gleitenden Durchschnitten und MACD-Differenzfilterung identifiziert sie Eingänge und Ausgänge während mittelfristiger und langfristiger Trends und vermeidet fehlende Preisumkehrungen. Die Pfeilsignale liefern auch klare Betriebsführung. Weitere Verbesserungen der Stabilität und Rentabilität können durch Parameter-Tuning, zusätzliche Filter und adaptive Optimierung erreicht werden.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Daniels stolen code strategy(shorttitle="Daniels Stolen Code", title="Daniels Stolen Code", overlay=true, calc_on_order_fills=true, pyramiding=0) //Define MACD Variables fast = 12, slow = 26 fastMACD = ema(hlc3, fast) slowMACD = ema(hlc3, slow) macd = fastMACD - slowMACD signal = sma(macd, 9) hist = macd - signal currMacd = hist[0] prevMacd = hist[1] currPrice = hl2[0] prevPrice = hl2[1] buy = currPrice > prevPrice and currMacd > prevMacd sell = currPrice < prevPrice and currMacd < prevMacd neutral = (currPrice < prevPrice and currMacd > prevMacd) or (currPrice > prevPrice and currMacd < prevMacd) //Plot Arrows timetobuy = buy==1 and (sell[1]==1 or (neutral[1]==1 and sell[2]==1) or (neutral[1]==1 and neutral[2]==1 and sell[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and sell[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and sell[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and sell[6]==1)) timetosell = sell==1 and (buy[1]==1 or (neutral[1]==1 and buy[2]==1) or (neutral[1]==1 and neutral[2]==1 and buy[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and buy[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and buy[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and buy[6]==1)) plotshape(timetobuy, color=blue, location=location.belowbar, style=shape.arrowup) plotshape(timetosell, color=red, location=location.abovebar, style=shape.arrowdown) //plotshape(neutral, color=black, location=location.belowbar, style=shape.circle) //Test Strategy // strategy.entry("long", true, 1, when = timetobuy and time > timestamp(2017, 01, 01, 01, 01)) // buy by market if current open great then previous high // strategy.close("long", when = timetosell and time > timestamp(2017, 01, 01, 01, 01)) strategy.order("buy", true, 1, when=timetobuy==1 and time > timestamp(2019, 01, 01, 01, 01)) strategy.order("sell", false, 1, when=timetosell==1 and time > timestamp(2019, 01, 01, 01, 01)) // strategy.entry(id = "Short", long = false, when = enterShort()) // strategy.close(id = "Short", when = exitShort()) //strategy.entry("long", true, 1, when = open > high[1]) // enter long by market if current open great then previous high // strategy.exit("exit", "long", profit = 10, loss = 5) // ge