Duale gleitende Durchschnittsstrategie


Erstellungsdatum: 2023-10-07 15:18:44 zuletzt geändert: 2023-10-07 15:18:44
Kopie: 0 Klicks: 641
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Dies ist eine Handelsstrategie, die auf zwei beweglichen Durchschnittslinien basiert. Sie beurteilt Markttrends und erzeugt Handelssignale anhand der Kreuzung von schnellen und langsamen beweglichen Durchschnittslinien. Ein Kaufsignal wird erzeugt, wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie überschreitet; ein Verkaufssignal wird erzeugt, wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie unterschreitet.

Grundsätze

Die Strategie nutzt vor allem die Trend-Tracking-Funktion der Moving Average. Die Moving Average ist ein durchschnittlicher Preis, der basierend auf den historischen Schlusspreisen in einem bestimmten Zeitraum berechnet wird. Es kann kleine Schwankungen innerhalb eines Tages ausweiten und die Preisentwicklung in einem größeren Zeitrahmen widerspiegelt. Die schnelle Durchschnittliche verwendet kürzere Perioden und reagiert schneller auf Preisänderungen.

Die Strategie bildet ein Handelssignal, indem sie eine bewegliche Durchschnittslinie mit unterschiedlichen Periodenlängen aufstellt. Wenn die kurze Periode über der langen Periode geht, ist die Kurzzeit positiv und erzeugt ein Kaufsignal. Wenn die kurze Periode unter der langen Periode geht, ist die Kurzzeit schwächer und erzeugt ein Verkaufssignal.

Vorteile

  • Der Einsatz von Doppel-Einheitlichkeits-Kreuzungen als einfacher und effektiver technischer Indikator für Trendänderungen
  • Einheitliche Linie filtert Marktlärm und verhindert, dass sie eingeklemmt wird
  • Anpassung der Parameter für die schnelle und langsame Durchschnittszyklusphase an unterschiedliche Situationen
  • Trendsignale und Wendepunkte visuell darstellen
  • Einfach zu verstehen und flexibel anpassen

Die Gefahr

  • Bei der Doppel-Linien-Cross-Strategie gibt es eine Verzögerung, die den Preiswendepunkt verfehlen könnte.
  • Nicht für Erschütterungen geeignet, um mehr Fehlsignale zu erzeugen
  • Falsche Parameter für die Durchschnittsphase können zu einer Überempfindlichkeit oder Langsamkeit führen
  • Es ist notwendig, andere Indikatoren zu kombinieren, um Hintergrundtrends und den Zeitpunkt der Aktion zu bestimmen.

Optimierungsrichtung

  • Beurteilung der Ertragswirkung verschiedener Parameter für eine lineare Periode und Auswahl der optimalen Parameter
  • Hinzufügen von anderen Kennzeichen, um die Filtersignale zu filtern, wie z. B. Kanal-Kennzeichen, K-Linienformationen usw.
  • Optimierte Stop-Loss-Strategie in Verbindung mit Volatilitätsindikatoren
  • Automatische Optimierung von Parametern und Handelsregeln basierend auf maschinellen Lernalgorithmen
  • Hinzufügung eines algorithmischen Handelsmoduls für automatische Bestellungen

Zusammenfassen

Die Doppel-Gleichgewichts-Kreuzungsstrategie nutzt die Trendverfolgungsfunktion der beweglichen Durchschnittslinie, um die Richtung des Marktes zu bestimmen und Handelssignale zu erzeugen. Die Strategie ist einfach und problemlos. Die Mängel können durch Anpassung der Parameter, die Kombination anderer Indikatoren und die Optimierung der Algorithmen ausgeglichen werden, um sie zu einem stabilen und zuverlässigen Handelssystem zu machen.

Strategiequellcode
/*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)