
La stratégie de trading MACD double inversion est une stratégie de trading quantitative qui utilise l’indicateur MACD pour identifier les signaux de revers de tendance. Cette stratégie combine à la fois l’indicateur RVI et l’indicateur CCI pour confirmer le moment d’achat et filtrer les faux revers.
La stratégie est principalement basée sur l’indicateur MACD. Le MACD est une moyenne mobile plus rapide EMA ((12)) moins une moyenne mobile plus lente EMA ((26) pour obtenir une ligne rapide, puis utiliser SIGNAL ((9) comme ligne lente. Une hausse se produit lorsque la ligne lente est traversée sur la ligne rapide et produit une croix dorée; une baisse lorsque la ligne lente est traversée sous la ligne rapide et produit une croix morte.
La stratégie utilise le MACD à deux périodes pour rechercher des opportunités de revers. La stratégie utilise le MACD à 6 heures pour déterminer la direction de la tendance générale, le MACD à 1 heure pour rechercher un signal de revers.
L’indicateur RVI mesure la relation entre le prix de clôture et le prix d’ouverture des dernières lignes K et le prix le plus élevé et le prix le plus bas. Un RVI inférieur à 0,2 est considéré comme une survente. Un indicateur CCI inférieur à 100 indique une survente.
La stratégie, combinée à la MACD à double période et aux indicateurs RVI et CCI, permet d’identifier avec plus de précision les occasions de retournement et de filtrer certains faux retournements, ce qui améliore la stabilité de la stratégie. Les avantages spécifiques sont les suivants:
L’utilisation du MACD à 6 heures pour déterminer les grandes tendances évite de négocier dans un environnement d’incertitude accrue sur les marchés boursiers.
Le MACD au niveau de l’heure identifie les temps de retournement et peut capturer les ajustements de prix sur des périodes plus courtes.
L’utilisation combinée des indicateurs RVI et CCI permet de déterminer plus précisément le moment de l’inversion.
La stratégie consiste à ajouter des points de rupture afin de réduire les pertes.
Cette stratégie comporte également des risques, principalement:
L’indicateur MACD lui-même est sujet à de faux signaux, donc même si le filtrage de l’indicateur auxiliaire est efficace, il n’est pas possible d’éviter complètement les pertes. Il est recommandé de réduire la taille de la position.
Les indicateurs RVI et CCI peuvent émettre des signaux erronés, ce qui peut entraîner la perte d’opportunités de reprise ou l’augmentation de pertes inutiles. Il est recommandé d’ajuster raisonnablement les paramètres RVI et CCI.
Un mauvais paramètre du point de rupture peut être trop dense pour déclencher un arrêt, ou trop lâche pour ne pas contrôler les pertes en temps opportun. Il est recommandé d’ajuster l’ampleur du stop en fonction de la volatilité du marché.
Cette stratégie peut être optimisée de plusieurs façons:
On utilise actuellement deux périodes de 1 heure et de 6 heures, il est possible de tester plus de combinaisons de périodes de temps pour trouver des paramètres plus stables.
D’autres indicateurs peuvent être introduits, tels que KDJ, WR, OBV, etc. pour aider à déterminer le point d’achat et de vente. Mais il faut éviter de générer des signaux de transaction trop complexes.
La base de paramètres peut être optimisée en fonction des paramètres des différentes variétés. Les variétés adaptées aux échanges de moyenne et basse fréquence peuvent être prolongées de manière appropriée.
Il est possible de configurer un mécanisme d’arrêt dynamique, en déplaçant progressivement le point d’arrêt après le profit. Ou d’ajuster l’ampleur de l’arrêt en temps réel en fonction de la volatilité du marché.
La stratégie de négociation MACD à double inversion prend en compte le jugement de la tendance et les signaux de renversement, et est complétée par des signaux de filtrage des indicateurs RVI et CCI. La stratégie peut identifier efficacement les ajustements de la courte ligne pour offrir un meilleur rapport de retour sur risque, adapté aux transactions à la journée et à la courte ligne, ou peut être utilisée dans le cadre d’un portefeuille de stratégies multiples pour offrir une diversité de stratégies globales.
/*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)