Stratégie de négociation à double inversion MACD

Auteur:ChaoZhang est là., Date: 2024-01-12 14:49:47 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de trading à double inversion MACD est une stratégie de trading quantitative qui utilise l'indicateur MACD pour identifier les signaux de renversement de tendance. Cette stratégie combine également l'indicateur RVI et l'indicateur CCI pour confirmer les signaux d'achat et filtrer certains faux renversements.

La logique de la stratégie

La stratégie est principalement basée sur l'indicateur MACD. MACD est la moyenne mobile rapide EMA ((12) moins la moyenne mobile lente EMA ((26) pour obtenir la ligne rapide, puis utiliser SIGNAL(9) comme la ligne lente. Lorsque la ligne rapide traverse au-dessus de la ligne lente pour générer une Croix dorée, elle est haussière; Lorsque la ligne rapide traverse en dessous de la ligne lente pour générer une Croix morte, elle est baissière.

Cette stratégie utilise deux indicateurs MACD pour identifier les opportunités d'inversion. La stratégie utilise le MACD de 6 heures pour déterminer la direction générale de la tendance et le MACD de 1 heure pour trouver des signaux d'inversion. Lorsque le MACD de 6 heures est en hausse, si la ligne rapide de 1 heure traverse en dessous de la ligne lente pour générer un signal de croix de mort, cela indique que le prix peut inverser vers le haut. À ce stade, combinez l'indicateur RVI et l'indicateur CCI pour confirmer et générer un signal d'achat.

L'indicateur RVI mesure la relation entre le prix de clôture et le prix d'ouverture des quelques bougies les plus récentes par rapport aux prix les plus élevés et les plus bas. Un RVI inférieur à 0,2 est considéré comme une survente. L'indicateur CCI inférieur à -100 indique une survente.

Analyse des avantages

Cette stratégie combine deux indicateurs MACD et RVI et CCI pour identifier avec précision les opportunités d'inversion et filtrer certains faux signaux d'inversion afin d'améliorer la stabilité de la stratégie.

  1. Utilisez le MACD à 6 heures pour déterminer la tendance majeure et éviter de négocier dans des environnements où l'incertitude augmente sur le marché plus large.

  2. Le MACD d'une heure identifie le moment de l'inversion et capte les ajustements de prix sur des cycles plus courts.

  3. La combinaison de l'indicateur RVI et de l'indicateur CCI permet de déterminer plus précisément le moment de l'inversion.

  4. La stratégie inclut un stop loss pour réduire les pertes.

Analyse des risques

La stratégie comporte également certains risques, qui se traduisent principalement par:

  1. Le MACD lui-même a tendance à générer de faux signaux, donc même si les indicateurs auxiliaires ont un bon effet de filtrage, il est impossible d'éviter complètement les pertes.

  2. Les indicateurs RVI et CCI peuvent émettre des signaux incorrects, ce qui fait perdre de meilleures opportunités d'inversion ou accroître les pertes inutiles.

  3. Un mauvais réglage du stop loss peut déclencher un stop loss trop fréquent ou ne pas contrôler les pertes dans le temps s'il est trop lâche.

Directions d'optimisation

La stratégie peut être encore optimisée dans les domaines suivants:

  1. À l'heure actuelle, en utilisant deux délais de 1 heure et 6 heures, plus de combinaisons de délais peuvent être testées pour trouver des paramètres plus stables.

  2. Plus d'indicateurs peuvent être introduits, tels que KDJ, WR, OBV, etc. pour aider à juger les points de négociation.

  3. Les paramètres peuvent être continuellement optimisés pour différentes variétés et des bibliothèques de paramètres peuvent être établies.

  4. Un mécanisme de stop loss dynamique peut être configuré pour déplacer progressivement le point de stop loss à mesure que les bénéfices augmentent ou ajuster l'ampleur du stop loss en temps réel en fonction de la volatilité du marché.

Résumé

La stratégie de trading à double inversion MACD prend en compte de manière exhaustive le jugement de tendance et les signaux d'inversion, et est assistée par les indicateurs RVI et CCI pour filtrer les signaux.


/*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)

Plus de