Quantitative Handelsstrategie auf Basis der normalisierten MACD

Schriftsteller:ChaoZhang, Datum: 2023-09-14 20:01:07
Tags:

Dieser Artikel erklärt detailliert eine quantitative Handelsstrategie, die auf dem normalisierten MACD-Indikator basiert.

I. Strategische Logik

Die Kernidee dieser Strategie besteht darin, den traditionellen MACD-Indikator zu normalisieren, um die Fehlerraten zu reduzieren.

  1. Berechnen Sie kurz- und langfristige gleitende Hull-Durchschnitte und verwenden Sie ihre Überschneidung für die Trendrichtung.

  2. Berechnen Sie die MACD-Differenz.

  3. Normalisierung des MACD über einen bestimmten Zeitraum.

  4. Berechnen Sie den gleitenden Durchschnitt des normalisierten MACD als Auslöser.

  5. Gehen Sie lang, wenn der normalisierte MACD über dem Trigger liegt, und kurz, wenn er darunter liegt.

  6. Fügen Sie Trendfilterung hinzu, um wichtige Bewegungen zu vermeiden.

  7. Setzen Sie Stop-Loss und Take-Profit, um das Risiko pro Handel zu kontrollieren.

Normalisierung reduziert die absolute Größe der MACD-Differenzen und senkt das Rauschen für eine höhere Signalqualität. Trendfilterung vermeidet falsche Umkehrungen gegenüber dem Haupttrend. Stop-Loss und Take-Profit kontrollieren Verluste pro Handel.

II. Vorteile der Strategie

Im Vergleich zu einfachen MACD-Strategien ist der größte Vorteil die Normalisierung, die MACD-Fehler effektiv reduzieren und die Signalgenauigkeit verbessern kann.

Ein weiterer Vorteil ist die Hinzufügung von Trendfiltern, um falsche Umkehrungen zu vermeiden.

Schließlich sorgen die Stop-Loss- und Take-Profit-Einstellungen auch für eine kontrollierbare Risikovergütung pro Handel für eine umsichtige Geldverwaltung.

III. Mögliche Schwächen

Trotz der Optimierungen sind bei der praktischen Handelstätigkeit folgende Risiken zu beachten:

Erstens kann die große Schwierigkeit bei der Optimierung von Parametern zu Überanpassung führen, wenn sie unangemessen eingestellt wird.

Zweitens besteht bei einem zu engen Stop Loss das Risiko, dass er vorzeitig eingestellt wird.

Schließlich können Signale bei Trendübergängen verzögert sein und nicht rechtzeitig reagieren.

IV. Zusammenfassung

Zusammenfassend wurde in diesem Artikel eine quantitative Handelsstrategie erklärt, die den MACD-Indikator normalisiert. Sie verbessert die klassische MACD-Strategie, um die Signalkvalität effektiv zu verbessern, und beinhaltet Risikomanagementmechanismen. Die Schwierigkeit der Parameteroptimierung und die Einstellung von Stop-Loss müssen jedoch immer noch mit Vorsicht behandelt werden. Insgesamt bietet sie einen praktikablen Ansatz zur Optimierung von MACD-Strategien.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// Normalized MACD but heavily modified by SeaSide420. Normalized MACD v420
strategy("Normalized MACD (v420)",shorttitle="NmacD(v420)",overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=1440, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) 
p=input(ohlc4)
jah=input(title="HullMA cross",defval=21)
tsp = input(34,title='Trigger')
np = input(50,title='Normalize')
SL = input(defval=-420.00, title="Stop Loss in $", step=1)
TP = input(defval=31.00, title="Target Point in $", step=1)
ot=1
n2ma=2*wma(p,round(jah/2))
nma=wma(p,jah)
diff=n2ma-nma
sqn=round(sqrt(jah))
n2ma1=2*wma(p[2],round(jah/2))
nma1=wma(p[2],jah)
diff1=n2ma1-nma1
sqn1=round(sqrt(jah))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
sh=n1
lon=n2
ratio = min(sh,lon)/max(sh,lon)
Mac = (iff(sh>lon,2-ratio,ratio)-1)
MacNorm = ((Mac-lowest(Mac, np)) /(highest(Mac, np)-lowest(Mac, np)+.000001)*2)- 1
MacNorm2 = iff(np<2,Mac,MacNorm)
Trigger = wma(MacNorm2, tsp)
Hist =(MacNorm2-Trigger)
Hist2= Hist>1?1:Hist<-1?-1:Hist
teh=MacNorm2+MacNorm2[2]-MacNorm2[1]
closelong = strategy.openprofit<SL or strategy.openprofit>TP or teh[1]<Trigger[1] and n1<n2[1]
if (closelong)
    strategy.close("Long")
closeshort = strategy.openprofit<SL or strategy.openprofit>TP or  teh[1]>Trigger[1] and n1>n2[1]
if (closeshort)
    strategy.close("Short")
longCondition = Trigger<0 and teh>Trigger and MacNorm>Trigger and strategy.opentrades<ot 
if (longCondition)
    strategy.entry("Long",strategy.long)
shortCondition = Trigger>0 and teh<Trigger and MacNorm<Trigger and strategy.opentrades<ot 
if (shortCondition)
    strategy.entry("Short",strategy.short)

Mehr