Dies ist eine Handelsstrategie, die auf einem doppelten gleitenden Durchschnitts-Crossover basiert. Sie verwendet die Wechselwirkungen zwischen schnellen und langsamen gleitenden Durchschnitten, um Markttrends zu bestimmen und Handelssignale zu generieren. Wenn der schnelle MA über den langsamen MA überschreitet, wird ein Kaufsignal generiert. Wenn der schnelle MA unter dem langsamen MA überschreitet, wird ein Verkaufssignal generiert.
Diese Strategie nutzt hauptsächlich die Trendverfolgungsfähigkeit von gleitenden Durchschnitten. Gleitende Durchschnitte sind die durchschnittlichen Preise, die über einen bestimmten Zeitraum auf der Grundlage historischer Schlusskurs berechnet werden. Sie können kleinere Schwankungen innerhalb des Tages glätten und größere Zeitrahmentrends widerspiegeln. Der schnelle MA verwendet einen kürzeren Zeitraum und kann schneller auf Preisänderungen reagieren, während der langsame MA einen längeren Zeitraum verwendet und den langfristigen Trend darstellt. Die schnelle MA-Überquerung über den langsamen MA zeigt an, dass die kurzfristige Dynamik den langfristigen Trend nach oben durchbricht und einen Aufwärtstrend anfängt. Umgekehrt bedeutet die schnelle MA-Überquerung unter dem langsamen MA, dass der langfristige Trend unter Druck steht und der Preis fallen kann.
Diese Strategie erzeugt Handelssignale, indem sie gleitende Durchschnitte verschiedener Zykluslängen festlegt und ihre Kreuzungen verwendet. Wenn der kurzfristige MA über den langfristigen MA überschreitet, signalisiert er eine Verbesserung der kurzfristigen Dynamik und erzeugt ein Kaufsignal. Wenn der kurzfristige MA unter den langfristigen MA überschreitet, zeigt er einen schwächenden kurzfristigen Trend an und erzeugt ein Verkaufssignal.
Die doppelte MA-Crossover-Strategie nutzt die Trend-Tracking-Fähigkeit von gleitenden Durchschnitten und erzeugt Signale basierend auf ihren Kreuzungen. Obwohl sie einfach und intuitiv ist, hat sie auch einige Mängel. Diese können durch Parameter-Tuning, Hinzufügen von Bestätigungen, Algorithmusoptimierung usw. überwunden werden, um sie in ein robustes System zu verwandeln.
/*backtest start: 2023-01-01 00:00:00 end: 2023-04-14 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/ // © KivancOzbilgic //@version=4 strategy("pomila", overlay=true) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 999) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if (longCondition) strategy.entry("BUY", strategy.long, when = window()) shortCondition = sellSignal if (shortCondition) strategy.entry("SELL", strategy.short, when = window()) buy1= barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)