Duale gleitende Durchschnitts- und Supertrend-Strategie


Erstellungsdatum: 2023-09-28 15:12:50 zuletzt geändert: 2023-09-28 15:12:50
Kopie: 0 Klicks: 923
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf der Kreuzung der beweglichen Durchschnittslinie der 21st und 55st Tage, um Kauf- und Verkaufssignale zu erzeugen, und kombiniert mit einem Supertrend-Indikator, um falsche Signale zu filtern.

Strategieprinzip

Der Code definiert zunächst die bewegliche Mittellinie zwischen der 21-stufigen Linie ((EMA1)) und der 55-stufigen Linie ((EMA2)). Bei einer EMA1 wird ein Kaufsignal erzeugt, wenn die EMA2 auf der EMA1 durchschritten wird; bei einer EMA2 unter der EMA1 wird ein Verkaufsignal erzeugt.

Um falsche Signale zu filtern, wurde ein Supertrend-Indikator hinzugefügt. Der Supertrend-Indikator basiert auf der durchschnittlichen realen ATR-Wellenlänge und kombiniert die jüngsten Höchst- und Tiefpunkte des Preises, um die Richtung des Trends zu bestimmen.

Auf diese Weise wird nur dann ein Kaufsignal erzeugt, wenn der Trend als aufwärts auf EMA1 durchbricht; nur dann, wenn der Trend als abwärts auf EMA1 durchbricht, wird ein Verkaufssignal erzeugt. Durch die Filterung der Supertrendindikatoren können falsche Signale beim Trendwechsel vermieden werden.

Darüber hinaus wurden 200- und 233-Tage-Linien hinzugefügt, um den langfristigen Trend zu beurteilen. Die Handelssignale werden nur erzeugt, wenn die langfristige Trendrichtung übereinstimmt.

Strategische Vorteile

  1. Dual Moving Average kombiniert mit Supertrend-Indikatoren, um Trends zu erkennen und falsche Signale zu filtern.

  2. Durch die Anpassung der Moving Average Parameter kann die Sensitivität der Strategie an die verschiedenen Marktumgebungen angepasst werden.

  3. Die Einführung eines langfristigen Durchschnittsurteils vermeidet die Gefahr, dass die langfristigen Trends nicht konsistent sind.

  4. Die Regeln sind klar und verständlich, die Parameter sind leicht anpassbar und eignen sich für quantitative Transaktionen.

  5. Das ist ein sehr einfacher Weg, um zu kaufen.

Strategisches Risiko

  1. Bei einer Dual Moving Average Strategy kann es leicht zu Fehlsignalen an Trendwendepunkten kommen. Es ist wichtig, die potenziellen Umdrehungen zu erkennen.

  2. Eine falsche Einstellung der Moving Average Parameter kann zu Trends führen oder zu viele falsche Signale erzeugen. Die Parameter müssen für verschiedene Märkte angepasst werden.

  3. Die Frequenz der Transaktionen ist möglicherweise höher und die Kosten für die Transaktionen müssen kontrolliert werden.

  4. Die Parameter des Supertrend-Indikators müssen optimiert werden, da sie das richtige Signal filtern oder das falsche Signal speichern können.

  5. Die langfristige Durchschnittslinie kann zu einer Verzögerung des Signals führen, und es ist notwendig, die Zeit für eine Trendwende vernünftigerweise zu verstehen.

Strategieoptimierung

  1. Versuche verschiedene Kombinationen von beweglichen Durchschnittslinien, um die optimale Parameter zu finden.

  2. Optimierung der Parameter für Supertrend-Indikatoren, um Filtereffekte und Verzögerungen auszugleichen.

  3. Zusätzliche Hilfsindikatoren, wie z. B. die Transaktionsmenge, werden hinzugefügt, um das Signal weiter zu verifizieren.

  4. Die potentiellen Wendepunkte werden in Kombination mit Emotionsindikatoren, Nachrichtenseiten und anderen Faktoren beurteilt.

  5. Dynamische Optimierung der Parameter mit Hilfe von Machine Learning.

Zusammenfassen

Die Strategie integriert die Vorteile der beiden Moving Averages und Supertrend-Indikatoren, um Trends zu finden und Fehlsignale zu filtern. Die Effektivität der Strategie kann durch Parameteroptimierung und Hilfsindikator-Verifizierung kontinuierlich verbessert werden. Obwohl ein gewisses Risiko besteht, kann dies durch Risikomanagement gesteuert werden.

Strategiequellcode
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"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/
// © bhavikmota

//@version=4
strategy("EMA & Supertrend", overlay = true)

//length = input(9, minval=1)
//ema1 = ema(close, length)
//ema2 = ema(ema1, length)
//ema3 = ema(ema2, length)

//shortest = ema(close, 20)
//short = ema(close, 50)
//longer = ema(close, 100)
//longest = ema(close, 200)


//for Ema1
len1 = input(21, minval=1)
//src1 = input(close)
ema1 = ema(close,len1)
plot(ema1, color=color.red, linewidth=1)

//for Ema2
len2 = input(55, minval=1)
//src2 = input(close)
ema2 = ema(close,len2)
plot(ema2, color=color.green, linewidth=1)

//for Ema3
len3 = input(200, minval=1)
//src3 = input(close)
ema3 = ema(close,len3)
plot(ema3, color=color.blue, linewidth=1)

//for Ema4
len4 = input(233, minval=1)
//src4 = input(close)
ema4 = ema(close,len4)
plot(ema4, color=color.black, linewidth=1)


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=true)
highlighting = input(title="Highlighter 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)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


//Trading logic

Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover
Exitlong = crossunder(close,ema2) // candle closes below supertrend

Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover
Exitshort = crossover(close,ema2) // candle closes above supertrend

//Execution Logic - Placing Order

start = timestamp(2008,1,1,0,0)

if time>= start
    strategy.entry("long", strategy.long, when=Enterlong)
    strategy.close("long",when=Exitlong)
//strategy.entry("short",strategy.short,100,when=Entershort)
//strategy.close("short",when=Exitshort)