Bonjour,
J’essaie de coder une stratégie de vente sur base du MACD.
J’ai un code mais qui n’opère pas comme je le souhaite, pouvez-vous m’aider?
L’idée est de vendre au marché lorsque le MACD arrive à -4, mais à la condition que précède une bougie MACD qui a clôturée à +2.
J’ai donc développé ceci, qui s’active à -4 mais ré enchaine les ventes sans tenir compte de la seconde variable, ou du moins en terme de bougie… :
// Calcul de la MACD
macdValue = macd[6,26,10]
isignal = macdsignal[6,26,10]
// Conditions de la stratégie
previousClose = close[1]
currentClose = close
// Conditions pour vendre à découvert
if macdValue crosses under -4 and previousclose > 2 then
sellshort at market
endif
Avec ceci, la vente s’active donc à -4 et se réactive dès que le MACD passe à -2 puis -4.
Ce serait le code correct:
// Calcul de la MACD
macdValue = macd[6,26,10]
isignal = macdsignal[6,26,10]
// Conditions de la stratégie
//previousClose = close[1]
//currentClose = close
// Conditions pour vendre à découvert
if macdValue = -4 and macdValue[1] = 2 then// previousclose > 2 then
sellshort at market
endif
Mais cela n’ouvrira JAMAIS aucune position car il est impossible que le Macd actuel soit exactement -4 et le précédent 2.
Ils peuvent être -3,993 ou 4,001, ou 1,995 ou 2,003, etc…
J’ai modifié le code pour qu’il vérifie une certaine plage, au lieu de 4 il suffit que la valeur soit comprise entre -3,5 et -4,5 et pour la bougie précédente, entre 1,5 et 2,5.
De cette façon, une transaction devrait parfois s’ouvrir.
J’ai également mis un SL et un TP à tester.
// Calcul de la MACD
macdValue = macd[12,26,9]
isignal = macdsignal[12,26,9]
// Conditions de la stratégie
//previousClose = close[1]
//currentClose = close
// Conditions pour vendre à découvert
if (macdValue <= -3.5) and (macdValue >= -4.5) and (macdValue[1] >= 1.5) and (macdValue[1] <= 2.5) then// previousclose > 2 then
sellshort at market
set target %profit 0.5
set stop %loss 0.5
endif
Ok, voilà pourquoi j’avais l’impression que la vente s’effectuait toujours avec un temps de retard.
Merci pour ces explications, il est donc plus judicieux de parler de zone avec le MACD.
Par contre le second code n’ouvre aucune position tandis que le premier bien. Mais pas tout à fait comme je le souhaite.
Avec vos explications, l’idée serait alors que la vente s’active lorsque le Macd est dans la zone des 4 mais mon problème est qu’elle doit s’activer uniquement si c’est précédé d’une bougie Macd bleu qui a clôturée au delà de la zone des 2. Et cette dernière partie semble coincer.
Bonjour,
Avant tout au cas où, ça vaut le coup de préciser que si tu veux l’histogramme MACD (= la différence entre la ligne MACD et la ligne de signal), alors tu peux effectivement utiliser le mot clé MACD dans macdValue = MACD[6,26,10]
Mais si tu voulais la ligne MACD (la différence entre la mm exponentielle courte ici période 6, et la mm exponentielle longue ici période 26), alors : macdValue = macdline[6,26,10]
Je te propose d’approcher le problème avec l’instruction CROSSES UNDER, qui permet de voir quand on passe sous une valeur donnée. Ainsi macdvalue cross under 2 permet de détecter quand tu étais au-dessus de 2 la période précédente et que tu passes en-dessous.
Et comme tu veux te retrouver sous -4, tu peux le combiner avec un macdvalue cross under -4 qui détecte que tu étais au-dessus de -4 avant et que tu viens de passer en-dessous.
Si les 2 sont vrais simultanément, alors c’est tu es passé d’au-dessus de +2 à en-dessous de -4, donc tu peux les grouper avec AND, ce qui donne:
macdValue = MACD[6,26,10] // ou macdValue = macdline[6,26,10] si on voulait la ligne plutôt que l'histogramme
IF macdValue CROSSES UNDER +2 and macdValue CROSSES UNDER -4 then
SELLSHORT 1 contract at market
ENDIF