Doppel MACD-Umkehrhandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-12 14:49:47
Tags:

img

Übersicht

Die Dual MACD Reversal Trading Strategie ist eine quantitative Handelsstrategie, die den MACD-Indikator verwendet, um Trendumkehrsignale zu identifizieren.

Strategie Logik

Die Strategie basiert hauptsächlich auf dem MACD-Indikator. Der MACD ist der schnelle gleitende Durchschnitt EMA ((12) abzüglich des langsamen gleitenden Durchschnitts EMA ((26) um die schnelle Linie zu erhalten und dann SIGNAL(9) als langsame Linie zu verwenden. Wenn die schnelle Linie über die langsame Linie kreuzt, um ein Goldenes Kreuz zu erzeugen, ist sie bullisch; Wenn die schnelle Linie unter die langsame Linie kreuzt, um ein Totes Kreuz zu erzeugen, ist sie bärisch.

Diese Strategie verwendet zwei MACD-Zeitrahmen, um Umkehrchancen zu erkennen. Die Strategie verwendet den 6-Stunden-MACD, um die allgemeine Trendrichtung zu bestimmen, und den 1-Stunden-MACD, um Umkehrsignale zu finden. Wenn der 6-Stunden-MACD in einem Aufwärtstrend ist, wenn die 1-Stunden-Schnelllinie unter der langsamen Linie überschreitet, um ein Todeskreuzsignal zu erzeugen, zeigt dies an, dass sich der Preis nach oben umkehren kann. An diesem Punkt kombinieren Sie den RVI-Indikator und den CCI-Indikator, um ein Kaufsignal weiter zu bestätigen und zu erzeugen.

Der RVI-Indikator misst die Beziehung zwischen dem Schlusskurs und dem Eröffnungskurs der letzten wenigen Kerzen gegenüber den höchsten und niedrigsten Preisen. Ein RVI unter 0,2 gilt als überverkauft. Der CCI-Indikator unter -100 zeigt einen Überverkauf an. Die Strategie verwendet also den RVI-Indikator unter 0,2 und den CCI-Indikator unter -95 zur Bestätigung des Kaufsignals.

Analyse der Vorteile

Diese Strategie kombiniert zwei Zeitrahmen MACD und RVI und CCI Indikatoren, um Umkehrchancen genau zu identifizieren und einige falsche Umkehrsignale auszufiltern, um die Stabilität der Strategie zu verbessern.

  1. Verwenden Sie den 6-Stunden-MACD, um den wichtigsten Trend zu bestimmen und den Handel in Umgebungen mit erhöhter Unsicherheit auf dem breiteren Markt zu vermeiden.

  2. Der 1-Stunden-MACD ermittelt den Umkehrzeitpunkt und erfasst kurzfristige Kursanpassungen.

  3. Die Kombination des RVI-Indikators und des CCI-Indikators kann den Zeitpunkt der Umkehrung genauer bestimmen.

  4. Die Strategie beinhaltet einen Stop-Loss zur Verringerung von Verlusten.

Risikoanalyse

Die Strategie birgt auch einige Risiken, die sich hauptsächlich in folgenden Aspekten widerspiegeln:

  1. Der MACD selbst neigt dazu, falsche Signale zu erzeugen, so dass, obwohl die Hilfsindikatoren eine gute Filterwirkung haben, es unmöglich ist, Verluste vollständig zu vermeiden.

  2. Die RVI- und CCI-Indikatoren können falsche Signale geben, wodurch bessere Umkehrmöglichkeiten verpasst oder unnötige Verluste erhöht werden.

  3. Eine unsachgemäße Einstellung des Stop-Loss kann zu häufig zu einem Stop-Loss führen oder bei zu schleppendem Stop-Loss kann es nicht möglich sein, den Stop-Loss rechtzeitig zu kontrollieren.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten weiter optimiert werden:

  1. Derzeit werden zwei Zeitrahmen von 1 Stunde und 6 Stunden verwendet, mehr Zeitrahmenkombinationen können getestet werden, um stabilere Parameter zu finden.

  2. Es können weitere Indikatoren wie KDJ, WR, OBV usw. eingeführt werden, um bei der Beurteilung von Handelspunkten zu helfen.

  3. Die Parameter können kontinuierlich für verschiedene Sorten optimiert und Parameterbibliotheken eingerichtet werden.

  4. Ein dynamischer Stop-Loss-Mechanismus kann eingestellt werden, um den Stop-Loss-Punkt nach und nach zu verschieben, wenn der Gewinn steigt, oder die Stop-Loss-Größe in Echtzeit entsprechend der Marktvolatilität anpassen.

Zusammenfassung

Die Dual MACD Reversal Trading Strategy berücksichtigt umfassend Trendbeurteilungen und Umkehrsignale und wird durch RVI- und CCI-Indikatoren unterstützt, um Signale zu filtern.


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

//@version=3
strategy("Bat MACD", overlay=true)

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
h=1.05

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hmacd= aMACD>0? h*aMACD: -(1/h)*abs(MACD) 

MACDD= (request.security(syminfo.tickerid,'360',ema(close, fastLength)) - request.security(syminfo.tickerid,'360',ema(close,slowlength)))
aMACDD = (request.security(syminfo.tickerid,'360',ema(ema(request.security(syminfo.tickerid,'360',close), fastLength)-ema(request.security(syminfo.tickerid,'360',close),slowlength), MACDLength)))
deltad= MACDD-aMACDD
L= input(0.95, title="SL")
SL = L*ema(close,10)

//MACD
slow = input(26,"Short period")
fast = input(12, "Long period")
signal = input(9, "Smoothing period")
//MACD = ema(close,fast)-ema(close,slow)
dMACD= MACD<0? ema(MACD,5):0
Mcond= rising(dMACD,1)
mcount=0.0
mcount := Mcond ? nz(mcount[1]) + 1 : nz(mcount[1])
counter=0
counter := (mcount-mcount[1]==0) ? nz(counter[1]) + 1 : 0
//counter := counter==3 ? 0: nz(counter[1])
pp=0.0
mc=0.0
pp:= (counter-counter[1]<0)? close[1] : nz(pp[1])
mc:= (counter-counter[1]<0)? MACD[1] : nz(mc[1])

bull = (pp-pp[1]<-close*0.005 and mc-mc[1]>0.02*abs(MACD) and MACD<0 and MACD[1]<0)? 1:0

//bgcolor(bull?green:white)
//RVI
p=10
CO=close-open
HL=high-low
value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6
value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6
num=sum(value1,p)
denom=sum(value2,p)
rvi=denom!=0?num/denom:0

//RVI
drvi= (rvi<0.2)? ema(rvi-0.20,3):0
RVcond= rising(drvi,1)
rvcount=0.0
rvcount := RVcond ? nz(rvcount[1]) + 1 : nz(rvcount[1])
rvcounter=0
rvcounter := (rvcount-rvcount[1]==0) ? nz(rvcounter[1]) + 1 : 0
//counter := counter==3 ? 0: nz(counter[1])
rvpp=0.0
rvmc=0.0
rvpp:= (rvcounter-rvcounter[1]<0)? close[1] : nz(rvpp[1])
rvmc:= (rvcounter-rvcounter[1]<0)? drvi[1] : nz(rvmc[1])
rvbull = (rvpp-rvpp[1]<-close*0.005 and rvmc-rvmc[1]>0.02 and drvi<0 and drvi[1]<0)? 1:0

//VolCCI
length1 = input(10, minval=1)
xMAVolPrice = ema(volume * close, length1)
xMAVol = ema(volume, length1)
src1 = xMAVolPrice / xMAVol
map = sma(src1, length1)
cci = (src1 - map) / (0.015 * dev(src1, length1))
cfi= (cci<0)? ema(cci,3) :0
CCcond= rising(cfi,1)
cccount=0.0
cccount := CCcond ? nz(cccount[1]) + 1 : nz(cccount[1])
cccounter=0
cccounter := (cccount-cccount[1]==0) ? nz(cccounter[1]) + 1 : 0
//counter := counter==3 ? 0: nz(counter[1])
ccpp=0.0
ccmc=0.0
ccpp:= (cccounter-cccounter[1]<0)? close[1] : nz(ccpp[1])
ccmc:= (cccounter-cccounter[1]<0)? cci[1] : nz(ccmc[1])
ccbull = (ccpp-ccpp[1]<-close*0.003 and ccmc-ccmc[1]>20 and cci<-95 and cci[1]<-95)? 1:0

A= bull+ccbull+rvbull
if ((MACD>hmacd)  and deltad>0 and delta>delta[1])
    strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close)
if (crossunder(delta, 0) or crossunder(close,SL))
    strategy.close("Long")
if(crossover(low,SL) and SL-SL[1]<close*0.005 and SL-SL[1]>-close*0.005)    
    strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close)
if A 
    strategy.entry("Long", strategy.long, comment="Buy", qty=10000/close)
plot(SL)

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Mehr