Strategie für eine doppelte Kreuzung von gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2023-10-07 15:18:44
Tags:

Übersicht

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.

Grundsätze

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.

Vorteile

  • Die Verwendung von MA-Kreuzungen zur Bestimmung von Trendänderungen ist eine einfache und wirksame Technik
  • MAs können Marktlärm wirksam filtern und Schlagzeilen vermeiden
  • Die Anpassung schneller und langsamer MA-Perioden kann sich an unterschiedliche Marktbedingungen anpassen.
  • Sichtbar zeigt Trendsignale und Wendepunkte an
  • Einfach zu verstehen, flexible Parameter-Tuning

Risiken

  • Bei Dual-MA-Kreuzfahrten gibt es Zeitverzögerungen und es kann vorkommen, dass die Wendepunkte verfehlt werden.
  • Nicht geeignet für Marktbereiche, kann mehr falsche Signale erzeugen
  • Eine unsachgemäße Einstellung der MA-Periode kann zu Überempfindlichkeit oder Langsamkeit führen.
  • Benötigt andere Indikatoren, um den Trendkontext und den Zeitpunkt zu bestätigen

Optimierungsrichtlinien

  • Beurteilung der Rentabilität verschiedener MA-Periodenparameter und Auswahl der optimalen
  • Fügen Sie andere Filter wie Kanalindikatoren, Kerzenmuster usw. hinzu.
  • Einbeziehung von Volatilitätsindikatoren zur Optimierung von Stop Loss und Take Profit
  • Verwenden Sie Machine-Learning-Algorithmen zur automatischen Optimierung von Parametern und Regeln
  • Hinzufügen von algorithmischen Handelsmodulen zur automatischen Auftragsausführung

Zusammenfassung

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)

Mehr