Bonjour,
Je souhaite créer, svp, un indicateur sur le non croisement de 2 moyennes mobiles exponentielles de 7 jours et celle de 20 jours.
L’indicateur est valable dans les 2 sens , achat et vente, mais se déclenche dans 2 possibilités (soit l’une soit l’autre) dans chaque sens.
Moyenne mobile exponentielle 7 jours = MM7
Moyenne mobile exponentielle 20 jours = MM20
Les sens :
Achat (indicateur =1)
La MM7 qui était au dessus de la MM20 qui est haussière, se dirige à la baisse au jour en direction de la MM20
2 possibilités (l’une ou l’autre)
a)LA MM7 touche la MM20 et repart à la hausse (la MM7 ne croise pas à la baisse la MM20)
b)La MM7 ne touche pas la MM20 , mais se rapproche de très près de la MM20 et repart à la hausse. Je définis cet écart de 1%
Vente (indicateur =-1)
La MM7 qui était en dessous de la MM20 qui est baissière, se dirige à la hausse en direction de la MM20
2 possibilités
a) LA MM7 touche la MM20 et repart à la baisse (la MM7 ne croise pas à la hausse la MM20)
b)La MM7 ne touche pas la MM20 , mais se rapproche de très près de la MM20 et repart à la hausse. Je définis cet écart de 1%
Je joins une copie écran de ces non croisements.
En vous remerciant.
Stéphane
Bonjour Nicolas,
Merci pour avoir trouvé ces 2 sujets.
J’ai testé surtout le premier, mais il ne correspond pas à mes attentes, il y a des non croisements qui échappent au programme de cet internaute.
Le 2ème sujet m’a donné des idées….le forum est formidable.
En vous remerciant d’essayer de me programmer ma demande.
Stéphane
Les fameux non-croisement ! Voilà une nouvelle version, qui j’en suis certain n’arrivera pas à attraper tout ce que vos yeux pourront trouver comme “non croisement”, difficile de trouver quelque-chose qui n’a pas lieu ! 😆
Plus sérieusement, ce pullback de moyennes mobiles, on peut aussi le trouver avec l’histogramme d’un MACD qui recoupe sa ligne de signal inférieure à 0 pour une vente et au dessus pour un achat. On pourrait donc aussi y coller le filtre en pourcentage.. à étudier.
//reserrement de MA en pourcentage
percentage = 1
a = average[7]
b = average[20]
upper = max(a,b)
lower = min(a,b)
d = ((upper - lower) / close) *100
e = d <= percentage
bull = a>=b
bear = not bull
atr = averagetruerange[14]
if (bull and bull[1]) then
pullback = a>a[1] and a[1]<=a[2]
if pullback and e then
drawtext("NC",barindex,low-atr/3,dialog,bold,20) coloured(0,200,0)
endif
endif
if (bear and bear[1]) then
pullback = a<a[1] and a[1]>=a[2]
if pullback and e then
drawtext("NC",barindex,high+atr/3,dialog,bold,20) coloured(200,0,0)
endif
endif
return a, b style(line,3)
Ci-joint donc la version MACD, forcément plus en retard..
//reserrement de MA en pourcentage
percentage = 1
signalPeriod = 2
a = average[7]
b = average[20]
upper = max(a,b)
lower = min(a,b)
d = ((upper - lower) / close) *100
e = d <= percentage
diff = a-b
bull = diff>0
bear = not bull
signal = average[signalperiod,1](diff)
atr = averagetruerange[14]
if (bull) then
pullback = diff crosses over signal
if pullback and e then
drawtext("NC",barindex,low-atr/3,dialog,bold,20) coloured(0,200,0)
endif
endif
if (bear) then
pullback = diff crosses under signal
if pullback and e then
drawtext("NC",barindex,high+atr/3,dialog,bold,20) coloured(200,0,0)
endif
endif
return a, b style(line,3)
Nicolas,
Entre vos 2 propositions, je choisis la 2ème et c’est parfait, à la hausse comme à la baisse !
Je n’aurais pas pensé qu’on pouvait passer par le MACD pour refléter cette configuration.
Très bonne journée,
Stéphane
Hello Nicolas,
Le sujet m’intéresse pour le signal MacD.
Un détail : la ligne macd et le signal se construisent en général avec une EMA , plutôt dans cet ordre d’esprit du coup :
signalPeriod = 6
a = exponentialaverage[9]
b = exponentialaverage[19]
macdline = a-b
signal = exponentialaverage[signalperiod](diff)
ce qui m’étonne c’est même en réglant avec une EMA et les valeurs ci dessus je n’obtiens pas le même résultat qu’avec ma version (cf screen EMA)
Voici ma version , néanmoins j’obtiens trop de signaux bruités cf screenshot.
L’idée serait de garder uniquement les signaux clean du type entouré sur mon screenshot.
defparam calculateonlastbars=600
macdS=9
macdB=19
macdsignal=6
myMACD=exponentialaverage[macdS]-exponentialaverage[macdB]
signal=exponentialaverage[macdsignal](myMACD)
//slope = macdB - macdB[1]
a=myMACD
b=signal
atr = averagetruerange[10](close)*0.5
//Conditions NC MACD Achat
ca1 = a > b
ca2 = a[1] < a
ca3 = a[2] > a[1]
ca4 = b[1] < b AND b[2] < b[1]
//Conditions NC MACD Vente
cv1 = a < b
cv2 = a[1] > a
cv3 = a[2] < a[1]
cv4 = b[1] > b AND b[2] > b[1]
NCMACDBULL = ca1 AND ca2 AND ca3 AND ca4
if NCMACDBULL then
drawtext("NC",barindex,highest[3](high)+atr*1.2,Dialog,Bold,13) coloured(0,255,75)
endif
NCMACDBEAR = cv1 AND cv2 AND cv3 AND cv4
If NCMACDBEAR then
drawtext("NC", barindex,lowest[3](low)-atr*1.2, Dialog,Bold,13) coloured(255,0,0)
endif
RETURN NCMACDBULL as "NCMAC ACHAT", NCMACDBEAR as "NCMAC VENTE"
Attention “macdsignal” est une instruction réservée par la plateforme en v11 désormais.
Pour la question, désolé mais j’ai du mal à comprendre. Il faudrait quelques exemples précis avec des dates et des détails sur l’instrument, timeframe, .. et pourquoi tel ou tel signal n’est pas à considérer.
Bonjour Nicolas,
Je trouve vos deux versions de cet indicateur très intéressantes ! Elles fonctionnent à merveille.
Auriez vous la possibilité de coder un screener permettant de visualiser les actions en passe d’avoir un non croisement haussier mm7/mm20 ?
Merci beaucoup pour votre retour
Nicolas P
Ci-dessous le screener de cette version: https://www.prorealcode.com/topic/non-croisement-2-moyennes-mobiles/#post-118162
//reserrement de MA en pourcentage
percentage = 1
a = average[7]
b = average[20]
upper = max(a,b)
lower = min(a,b)
d = ((upper - lower) / close) *100
e = d <= percentage
bull = a>=b
bear = not bull
verif = 0
if (bull and bull[1]) then
pullback = a>a[1] and a[1]<=a[2]
verif = pullback and e
endif
if (bear and bear[1]) then
pullback = a<a[1] and a[1]>=a[2]
verif = pullback and e
endif
screener[verif]
Les conditions bull ou bear ne sont pas séparées, il faudra faire le tri visuellement 😉
Merci beaucoup Nicolas je teste ça rapidement 🙂
Alors je viens de le tester et j’ai un problème avec la dernière ligne
Screener [verif] ne permet pas de lancer le programme.
Auriez vous une idée pour ce problème?
Merci pour votre retour
Nicolas P.
A ta demande j’ai codé un screener, il faut donc placer le code dans un nouveau programme ProScreener, tu as certainement essayé de le mettre dans un nouvel indicateur 🙂
NicoPommier
Fais gaffe, j’avais posé la question pour avoir un indicateur sous le graphique.
Le screener, faut aller dans le chemin décrit par Nicolas.
D’autre part, il se peut que le screener te ramène rien car il n’y a pas le Signal. Je l’ai lancé il n’y a rien sur les valeurs du CAC40. en unité de temps cours de clôture.
J’espère qu’il est bien paramétré.
Stéphane
Merci à vous pour vos réponses.
J’ai bien rempli le code dans un nouveau screener et lorsque je veux lancer le programme il s’affiche ce message d’erreur :” erreur de syntaxe, ligne 23, caractère 10. Une des expressions suivantes serait plus appropriée que “[” : “,” ou “=”. ” Cela correspond à la dernière ligne du screener : screener[verif].
C’est moi qui ne comprend pas probablement.. ?
Merci pour vos retours en tout cas
Nicolas P