Trend nach einer auf gleitenden Durchschnitten und MACD basierenden Strategie

Schriftsteller:ChaoZhang, Datum: 15.11.2023
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnitte und den MACD-Indikator, um Trends zu bestimmen und Handelssignale zu generieren. Sie gehört zu einer typischen Trendfolgestrategie. Sie verwendet zwei ZLSMA-gleitende Durchschnitte unterschiedlicher Zeitrahmen, um die Trendrichtung zu bestimmen, und einen MACD-Crossover, um spezifische Kauf- und Verkaufssignale zu generieren. Dies ermöglicht es, mittelfristige und langfristige Trends effektiv zu erfassen und gleichzeitig zu vermeiden, von kurzfristigen Marktlärmen irregeführt zu werden.

Strategie Logik

Die Strategie besteht aus folgenden Hauptbestandteilen:

  1. Schnelle ZLSMA und langsame ZLSMA: Der Vergleich von ZLSMA gleitenden Durchschnitten verschiedener Zeitrahmen bestimmt die allgemeine Trendrichtung. Die schnelle Linie besteht aus 32-Perioden-ZLSMA und die langsame Linie besteht aus 400-Perioden-ZLSMA. Wenn die schnelle Linie über die langsame Linie überschreitet, ist dies ein bullisches Signal und umgekehrt.

  2. MACD-Indikator: Der MACD wird berechnet, indem die langsame Linie (26-Perioden-EMA) von der schnellen Linie (12-Perioden-EMA) subtrahiert wird. Die Signallinie ist eine 9-Perioden-EMA des MACD. Wenn der MACD über die Signallinie geht, ist es ein Kaufsignal, und wenn der MACD unter die Signallinie geht, ist es ein Verkaufssignal.

  3. Handelssignale: Kauf- und Verkaufssignale werden nur generiert, wenn die Trendrichtung des ZLSMA mit den MACD-Crossover-Signalen übereinstimmt. Insbesondere gehen Sie lang, wenn der Bullentrend mit dem MACD-Goldkreuz zusammenfällt, und kurz, wenn der Bärentrend mit dem MACD-Todkreuz zusammenfällt.

  4. Stop-Loss und Take-Profit: Die Strategie beinhaltet derzeit keine Stop-Loss- und Take-Profit-Logik, die weiter optimiert werden muss.

Die Kombination von gleitenden Durchschnitten zur Ermittlung des Haupttrends und MACD zum Zeitpunkt des Eintrags kann falsche Ausbrüche effektiv filtern und verhindern, dass man durch kurzfristige Marktlärm irregeführt wird.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Trends erfassen: Die Verwendung gleitender Durchschnitte für verschiedene Zeitrahmen zur Bestimmung der Trendrichtung ermöglicht es, mit dem Trend zu handeln und mittelfristige bis langfristige Trends effektiv zu erfassen.

  2. Filtern von Lärm: Die Anwendung des MACD-Indikators hilft, kurzfristige Marktgeräusche zu filtern und zu vermeiden, dass Sie von kleinen Märkten in die Irre geführt werden.

  3. Anpassungsfähige Parameter: Die gleitenden Durchschnittsperioden und die MACD-Parameter sind anpassungsfähig und können für verschiedene Märkte optimiert werden.

  4. Einfach umzusetzen: Alle verwendeten Indikatoren sind gemeinsame technische Indikatoren.

  5. Kontrollierbares Risiko: Mit einem klaren Stop-Loss und Take-Profit können das Risiko und der Gewinn jedes Handels kontrolliert werden.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Falsche Trendbestimmung: Wenn der Haupttrend falsch bestimmt wird, können alle Trades zu Verlusten führen.

  2. Unzulässige Parameteroptimierung: Der gleitende Durchschnitt und die MACD-Parameter müssen gründlich getestet und optimiert werden, sonst können die Ergebnisse unbefriedigend sein.

  3. Fehlen eines Stop-Loss: Derzeit ist kein Stop-Loss vorhanden, was das Risiko von übergroßen Verlusten darstellt.

  4. Begrenztes Gewinnpotenzial: Als Trendstrategie ist das Gewinnpotenzial jedes Handels begrenzt und erfordert ein hohes Volumen, um die Rentabilität zu steigern.

  5. Hohe Handelsfrequenz: Eine unsachgemäße Einstellung der Parameter kann zu einer übermäßigen Handelsfrequenz, zu erhöhten Transaktionskosten und zu Verschiebungen führen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Hinzufügen eines Stop-Loss-Mechanismus: Festlegen Sie geeignete Stop-Loss-Punkte, um den maximalen Verlust pro Handel streng zu kontrollieren.

  2. Optimieren von Parametern: Backtest und Optimierung, um die optimale Kombination aus gleitendem Durchschnitt und MACD-Parametern zu finden.

  3. Niedrigere Handelsfrequenz: Anpassung der Parameter, um sicherzustellen, dass Handelssignale nur dann generiert werden, wenn der Trend ausgeprägt ist.

  4. Einbeziehung anderer Faktoren: Faktoren wie Volumenänderungen können hinzugefügt werden, um Trends und Signale zu bestätigen.

  5. Verbessern Sie den Eintrittszeitplan: Verbessern Sie die MACD-Nutzung weiter, um die Genauigkeit des Eintrags zu erhöhen.

  6. Allgemeine Anwendbarkeit: Optimieren von Parametern, um die Strategie für verschiedene Produkte allgemein anwendbar zu machen und die Anwendbarkeit zu erweitern.

Schlussfolgerung

Diese Strategie erfasst mittelfristige bis langfristige Trends durch eine einfache, aber effektive Kombination von gleitenden Durchschnitten und MACD, was sie zu einer soliden quantitativen Handelsstrategie macht.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-11-10 05:00:00
period: 1m
basePeriod: 1m
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/
// © veryfid

//@version=5
strategy("Stratégie ZLSMA Bruno", shorttitle="Stratégie ZLSMA Bruno", overlay=false)

source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

//res = useCurrentRes ? period : resCustom

fastLength = input(12), 
slowLength=input(26)
signalLength=input(9)

fastMA = ta.ema(source, fastLength)
slowMA = ta.ema(source, slowLength)

macd = fastMA - slowMA
signal = ta.sma(macd, signalLength)
hist = macd - signal

outMacD =  macd
outSignal = signal
outHist =  hist

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

//plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? color.lime : color.red : color.red
//signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
//plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
//plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
//plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)
plot(sd and ta.cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=plot.style_circles, linewidth=4, color=macd_color)
hline(0, '0 Line', linestyle=hline.style_solid, linewidth=2, color=color.white)

// Paramètres de la ZLSMA
length = input(32, title="Longueur")
offset = input(0, title="Décalage")
src = input(close, title="Source")
lsma = ta.linreg(src, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq = lsma - lsma2
zlsma = lsma + eq

length_slow = input(400, title="Longueur")
offset_slow = input(0, title="Décalage")
lsma_slow = ta.linreg(src, length_slow, offset_slow)
lsma2_slow = ta.linreg(lsma_slow, length_slow, offset_slow)
eq_slow = lsma_slow - lsma2_slow
zlsma_slow = lsma_slow + eq_slow

// Paramètres de la sensibilité
sensitivity = input(0.5, title="Sensibilité")

// Règles de trading
longCondition = zlsma < zlsma_slow and  zlsma_slow < zlsma_slow[1] and zlsma > zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime//ta.crossover(zlsma, close) and ta.crossover(zlsma, zlsma[1]) // Croisement vers le haut
shortCondition = zlsma > zlsma_slow and  zlsma_slow > zlsma_slow[1] and zlsma < zlsma[1] and ta.cross(outMacD, outSignal) and  macd_color == color.lime   //ta.crossunder(zlsma, close) and ta.crossunder(zlsma, zlsma[1]) // Croisement vers le bas

// Entrée en position
strategy.entry("Achat", strategy.long, when=longCondition)
strategy.entry("Vente", strategy.short, when=shortCondition)
botifySignalZLSMA = longCondition ? 1 : shortCondition ? -1 : 0
plot(botifySignalZLSMA, title='Botify_signal', display=display.none)
// Sortie de position
strategy.close("Achat", when=ta.crossunder(zlsma, close)) // Close the "Achat" position
strategy.close("Vente", when=ta.crossover(zlsma, close)) // Close the "Vente" position


// Tracé de la courbe ZLSMA
plot(zlsma, color=color.yellow, linewidth=3)
plot(zlsma_slow, color=color.red, linewidth=3)



Mehr