Strategie auf Basis des exponentiellen gleitenden Durchschnitts und des MACD-Indikators

Schriftsteller:ChaoZhang, Datum: 2023-12-08 16:58:01
Tags:

img

Übersicht

Diese Strategie kombiniert die Breakout-Signale des exponentiellen gleitenden Durchschnitts und des MACD-Indikators mit langen und kurzen Halteperioden, um durch Trendfollowing und durchschnittlichen Umkehrhandel Gewinne zu erzielen.

Strategieprinzip

Die Strategie beruht hauptsächlich auf:

  1. Berechnen Sie den 200-Tage-EMA, um die Haupttrendrichtung zu bestimmen.

  2. Berechnen Sie die EMA anhand des Medianpreises der höchsten, niedrigsten und schließenden Preise und ermitteln Sie dann die Differenz zwischen der EMA und den höchsten/niedrigsten Preisen, um das MACD-Histogramm zu erstellen.

  3. Berechnen Sie die 9-Tage-MA des MACD-Histogramms, um die MACD-Signallinie zu konstruieren.

  4. Ein Kaufsignal wird erzeugt, wenn der MACD über die Signallinie geht, während ein Verkaufssignal erzeugt wird, wenn der MACD unter die Signallinie geht.

  5. Kombinieren Sie die Analyse der wichtigsten Trends, um festzustellen, ob der Markt am Anfang eines neuen Trends oder nur einer kurzfristigen Umkehr ist.

Vorteile

Die Strategie kombiniert Trend- und Mean-Reverssion-Trading, die sowohl langfristige Trends verfolgen als auch kurzfristige Umkehrchancen erfassen können, um unterschiedlichen Marktbedingungen gerecht zu werden.

Zu den wichtigsten Vorteilen gehören:

  1. 200-Tage-EMA bestimmt die Haupttrendrichtung, vermeidet den Handel gegen Trends.

  2. Der MACD-Indikator ist anfällig für kurzfristige Kursänderungen und kann profitable Umkehrsignale erfassen.

  3. Verschiedene Parameter für MACD-Komponenten können Handelssignale über Zeiträume hinweg erzeugen.

  4. Integration von Stop-Loss-Strategien zur effektiven Kontrolle einzelner Handelsverluste.

Risiken

Zu den wichtigsten Risiken gehören:

  1. Es kann eine zeitliche Verzögerung zwischen den Handelssignalen aus langfristigen und kurzfristigen Indikatoren geben.

  2. Der MACD als Indikator für die mittlere Umkehrung kann bei starken Trends unterdurchschnittlich sein.

  3. Eine falsche Stop-Loss-Platzierung kann zu einem vorzeitigen Stop-Loss-Trigger oder zu einem übergroßen Verlust führen.

  4. Zu häufige Ausbruchssignale können zu mehr falschen Signalen führen.

Lösungen:

  1. Optimierung der MACD-Parameter zur Anpassung der Indikatorempfindlichkeit.

  2. Kombinieren Sie andere Indikatoren, um Marktbedingungen zu bestimmen, vermeiden Sie es, MACD-Signale blind zu folgen.

  3. Test und Optimierung der Stop-Loss-Strategieparameter.

  4. Fügen Sie Filter hinzu, um falsche Signale zu reduzieren.

Optimierungsrichtlinien

Die Strategie kann optimiert werden, indem:

  1. Optimieren Sie die Parameter für gleitenden Durchschnitt und MACD, um effektivere Handelssignale zu erhalten.

  2. Hinzufügen Sie andere Indikatoren wie Volumen, RSI, um die Wirksamkeit der Strategie zu verbessern.

  3. Stellen Sie Regeln für die Größe der Positionen anstelle einer festen Menge für jeden Handel fest.

  4. Zusätzlich zu den Stop-Loss-Regelungen werden fortgeschrittenere Ausstiegsregeln hinzugefügt, z. B. Gewinnziel, Trailing-Stop.

  5. Backtest mit realistischeren Gebühreneinstellungen, um den realen Handel zu simulieren.

  6. Führen Sie eine Analyse vorwärts durch, robuste Tests, um die Zuverlässigkeit zu verbessern.

Schlussfolgerung

Die Strategie balanciert Trendfollowing und Mean-Reversion-Trading. Die Essenz liegt in der richtigen Parameter-Tuning und dem richtigen Verständnis der wichtigsten Trends. Durch die Optimierung von Parametern, das Hinzufügen von Filtern kann die Strategie ein besseres Handelssignal urteilen und stabilere Gewinne erzielen. Insgesamt hat diese Strategie einen hohen Integrationsgrad und vielversprechende Anwendungsperspektiven.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Strategia EMA + Impulse MACD", shorttitle="EMA+IMACD", overlay=true)

// Impostazioni
ema_length = input(200, title="Periodo EMA a 200", type=input.integer)
lengthMA = input(34, title="Periodo EMA", type=input.integer)
lengthSignal = input(9, title="Periodo Signal", type=input.integer)
lengthImpulseMACD = input(12, title="Periodo Impulse MACD", type=input.integer)
lengthImpulseMACDSignal = input(9, title="Periodo Impulse MACD Signal", type=input.integer)
stopLossPeriod = input(20, title="Periodo Stop Loss", type=input.integer)

var float ema200 = na
if bar_index >= ema_length
    ema200 := ema(close, ema_length)

// Impulse MACD
var float hi = na
var float lo = na
var float mi = na
var float impulseMACD = na
var float impulseMACDSignal = na

calc_smma(src, len) =>
    var float smma = na
    if na(smma)
        smma := sma(src, len)
    else
        smma := (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ema(src, length)
    ema2 = ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

if bar_index >= lengthMA
    src = hlc3
    hi := calc_smma(high, lengthMA)
    lo := calc_smma(low, lengthMA)
    mi := calc_zlema(src, lengthMA)

    impulseMACD := (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
    impulseMACDSignal := sma(impulseMACD, lengthSignal)

// Calcolo dello stop loss
var float stopLossLong = na
var float stopLossShort = na

stopLossLong := lowest(low, stopLossPeriod)
stopLossShort := highest(high, stopLossPeriod)

// Calcolo del take profit
var float takeProfitLong = na
var float takeProfitShort = na

if not na(stopLossLong)
    takeProfitLong := close + (close - stopLossLong) * 1.5
if not na(stopLossShort)
    takeProfitShort := close - (stopLossShort - close) * 1.5

// Condizioni per aprire una posizione long
longCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close > ema200 and impulseMACD < 0 and impulseMACDSignal < 0 and crossover(impulseMACD, impulseMACDSignal)

// Condizioni per aprire una posizione short
shortCondition = not na(ema200) and not na(impulseMACD) and not na(impulseMACDSignal) and close < ema200 and impulseMACD > 0 and impulseMACDSignal > 0 and crossunder(impulseMACD, impulseMACDSignal)

// Disegna l'EMA 200 sul grafico
plot(ema200, color=color.blue, title="EMA 200")

// Imposta lo stop loss e il take profit
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("Take Profit/Stop Loss Long", from_entry="Long", stop=stopLossLong, limit=takeProfitLong)
strategy.exit("Take Profit/Stop Loss Short", from_entry="Short", stop=stopLossShort, limit=takeProfitShort)

// Impulse MACD
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(impulseMACD, color=color.red, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(impulseMACDSignal, color=color.blue, linewidth=2, title="ImpulseMACDSignal", style=plot.style_histogram)

// Disegna le operazioni long e short sul grafico
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.triangleup, title="Long Entry")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.triangledown, title="Short Entry")


Mehr