Détermination de l'index de certaines bougies
Forums › ProRealTime forum Français › Support ProBuilder › Détermination de l'index de certaines bougies
- This topic has 9 replies, 3 voices, and was last updated 7 years ago by JC_Bywan.
-
-
07/03/2017 at 7:14 PM #39718
Bonjour Nicolas,
Tout d’abord, je me suis aperçu assez récemment que le site proposait une traduction instantanée en diverses langues. Alors bravo pour cette amélioration. Mes mimines se fatigueront moins en évitant tout un tas de “control C et control V” et on gagne un temps fou à suivre les forums autres que ceux en français.
Ensuite, je vous soumets deux bouts de code qui me laissent perplexe et depuis un bout de temps. Ils sont censés faire la même chose, c’est à dire déterminer les index des plus hauts et des plus bas de n périodes.
Sauf que celui intitulé “RangH et RangL” calcule apparemment par boucle itérative correctement ces index. Mais il comporte un gros inconvénient : il est très long à s’exécuter (à cause des boucles donc) déjà comme indicateur et puis incorporé à un screener et ce d’autant plus qu’il doit être complété par la détermination d’un certain nombre d’autres index de bougies.
Le bout de code “Rang H et L Barindex” est en accord sur les dernières bougies (36 périodes environ) avec le code précédent et dans les périodes plus anciennes, il ne détermine correctement les index que sur les plus bas.
QUESTIONS
1- Pouvez-vous m’éclairer en me donnant les raisons de ces distorsions ?
2- Y aurait-il une autre méthode de calcul d’une succession d’index de bougies ?
Par avance MERCI
Rang H et Rang L1234567891011121314151617181920212223242526272829303132// Calcul par boucle itérative de l'index des bougies Plus Haut et Plus Bas des 200 derniers joursRangH1 = 0for i = 0 to 200 doif high[i] <> highest[200](high) thenRangH1 = RangH1 + 1elsif high[i] = highest[200](high) thenbreakendifnextRangL1 = 0for i = 0 to 200 doif low[i] <> lowest[200](low) thenRangL1 = RangL1 + 1elsif low[i] = lowest[200](low) thenbreakendifnextPlusHautHigh = highest[200](high)PlusBasLow = lowest[200](low)//RangL2 = 0//For i = 0 to RangH1 do//If Close[i] <> Lowest[RangH1](Close) Then//RangL2 = RangL2 + 1//Elsif Close[i] = Lowest[RangH1](Close) Then//Break//Endif//NextReturn RangH1 coloured (0, 0, 255) as "Rang du Plus haut", RangL1 coloured (0, 0, 255) as "Rang du Plus bas", PlusHautHigh as "Plus Haut des high 200", PlusBasLow as"Plus Bas des low 200" //, RangL2 as "Plus bas L2"RangH et L Barindex123456789101112131415161718192021222324// Calcul du rang des bougies Plus Haut et Plus Bas des 120 derniers jours méthode du Barindex//____________________________________________________________________// Détermination du Rang de la bougie du Plus Haut méthode du barindexPlusHautperiode = highest[200](high)If high = PlusHautperiode thenHautbarindex = barindexendif//Bougie0 = Barindex // Index de la bougie origineRangHautbarindex = barindex - Hautbarindex // Index de la bougie du plus haut sur 200 périodes//______________________________________________________________________//Détermination du Rang de la bougie du Plus Bas méthode barindexPlusBasperiode = lowest[200](low)If low = PlusBasperiode thenBasbarindex = barindexendif//Bougie0 = Barindex // Index de la bougie origineRangBasbarindex = barindex - Basbarindex // Index de la bougie du plus basReturn RangHautbarindex coloured(255, 0,0) as "Plus haut des high barindex", RangBasbarindex coloured(255,0, 0) as "Plus Bas des low barindex", PlusHautperiode as "Plus Haut 200", PlusBasperiode as "Plus Bas 200"07/03/2017 at 7:28 PM #39719Désolé, j’ai oublié de préciser que mon test des 2 bouts de code porte sur l’action CRME Cardiome pharma Nasdaq.
Je pense que sur d’autres actions d’autres marchés on observera les mêmes distorsions (à moins que ce soit un coup des américains !!!)
07/04/2017 at 10:11 AM #39766Le problème vient de ton premier code. Pour trouver le barindex que tu cherches, tu utilises une incrémentation “perso” entre 0 et 200, hors le barindex que tu trouveras sera nécessairement compris entre ces 2 bornes, ce qui n’est pas forcément le cas de la vrai valeur du barindex dans l’historique (il pourrait être bien supérieur).
Si j’ai bien compris ce que tu cherches à faire, tu devrais plutôt enregistrer le barindex de l’itération de ta boucle lorsque tu as trouvé que le High[i] = highest[200](high), comme dans ce code:
123456789101112131415161718192021222324252627// Calcul par boucle itérative de l'index des bougies Plus Haut et Plus Bas des 200 derniers joursRangH1 = 0hh = highest[200](high)for i = 0 to 200 doif high[i] <> hh thencontinueelsif high[i] = hh thenRangH1 = barindex[i]breakendifnextRangL1 = 0ll = lowest[200](low)for i = 0 to 200 doif low[i] <> ll thencontinueelsif low[i] = ll thenRangL1 = barindex[i]breakendifnextPlusHautHigh = hhPlusBasLow = llReturn RangH1 coloured (0, 0, 255) as "Rang du Plus haut", RangL1 coloured (0, 0, 255) as "Rang du Plus bas", PlusHautHigh as "Plus Haut des high 200", PlusBasLow as"Plus Bas des low 200" //, RangL2 as "Plus bas L2"J’ai aussi allégé un peu le code pour les calculs. Je pense qu’on pourrait aussi faire mieux avec une seule boucle. Les boucles, c’est l’un des sujets principaux de la nouvelle formation sur la programmation prorealtime (niveau avancée). Une fois qu’on maîtrise les boucles, on peut vraiment faire presque tout ce que l’on souhaite 😉
J’ai peut être mal interprété ta question, merci de m’indiquer si tout est ok 🙂
07/10/2017 at 6:17 PM #40280Bonjour Nicolas,
Tout d’abord Merci pour tes rectifications. J’ai tardé à te répondre car j’ai essayé, sans succès, de ne faire qu’une seule boucle.
Ceci dit, ce petit bout de code incorporé dans un screener est beaucoup plus rapide que celui que j’avais initialement commis alors que pour l’indicateur “es igual”.
Par ailleurs, j’ai modifié le code de manière à obtenir par simple différence d’index ce que j’appelle le rang de la bougie déterminé à partir la dernière bougie. Mon but, en fait, est de déterminer à partir du highest200 le plus bas. Et là, le système n’aime pas du tout. Il produit une erreur “un paramètre de type entier positif est attendu avec lowest”. Pourtant Rangh1 contient bien un entier positif.
Alors pourquoi cette erreur ?
Dois-je abandonner cette piste ?
Je joins 2 images.
Merci anticipé.
Ruddy
07/10/2017 at 6:26 PM #4028307/11/2017 at 9:14 PM #40388J’étais persuadé de l’avoir joint par la méthode habituelle. Donc, au temps pour moi !
Toutefois, ce code donne des résultats identiques à ceux du premier indicateur que je t’ai soumis. Lequel indicateur développé un peu plus donnait exactement la même erreur.
Dès que je peux, je te fais passer le code.
Merci d’avance.
Ruddy
07/13/2017 at 1:48 PM #40569Bonjour Nicolas,
Voici le code manquant.
A bientôt.
RangH1 et L1 mod PRC1234567891011121314151617181920212223242526272829303132333435363738394041// Calcul par boucle itérative de l'index des bougies Plus Haut et Plus Bas des 200 derniers joursIndexH1 = 0hh1 = highest[200](high)for i = 0 to 200 doif high[i] <> hh1 thencontinueelsif high[i] = hh1 thenIndexH1 = barindex[i]breakendifnextIndexL1 = 0ll1 = lowest[200](low)for i = 0 to 200 doif low[i] <> ll1 thencontinueelsif low[i] = ll1 thenIndexL1 = barindex[i]breakendifnextRangH1 = barindex[0] - IndexH1RangL1 = barindex[0] - IndexL1IndexL2 = 0ll2 = lowest[RangH1](low)for i = 0 to RangH1if low[i] <> ll2 thencontinueelsif low[i] = ll2 thenIndexL2 = barindex[i]breakendifnextRangL2 = barindex[0] - IndexL2Return RangH1 coloured (0, 0, 255) as "Rang du Plus haut", RangL1 coloured (0, 0, 255) as "Rang du Plus bas", hh1 as "Plus Haut des high 200", ll1 as"Plus Bas des low 200", RangL2 coloured (0, 255, 0) as "Plus Bas L2", ll2 as "Plus bas L2"07/18/2017 at 12:54 PM #40958Voilà le code corrigé, j’ai ajouté une vérification pour adapter la période de ton instruction LOWEST pour la variable ll2, cette valeur ne pourra jamais être inférieure à 1 désormais, donc hop plus d’erreur ! 🙂
1234567891011121314151617181920212223242526272829303132333435363738394041// Calcul par boucle itérative de l'index des bougies Plus Haut et Plus Bas des 200 derniers joursIndexH1 = 0hh1 = highest[200](high)for i = 0 to 200 doif high[i] <> hh1 thencontinueelsif high[i] = hh1 thenIndexH1 = barindex[i]breakendifnextIndexL1 = 0ll1 = lowest[200](low)for i = 0 to 200 doif low[i] <> ll1 thencontinueelsif low[i] = ll1 thenIndexL1 = barindex[i]breakendifnextRangH1 = barindex[0] - IndexH1RangL1 = barindex[0] - IndexL1IndexL2 = 0ll2 = lowest[max(1,RangH1)](low)for i = 0 to RangH1if low[i] <> ll2 thencontinueelsif low[i] = ll2 thenIndexL2 = barindex[i]breakendifnextRangL2 = barindex[0] - IndexL2Return RangH1 coloured (0, 0, 255) as "Rang du Plus haut", RangL1 coloured (0, 0, 255) as "Rang du Plus bas", hh1 as "Plus Haut des high 200", ll1 as"Plus Bas des low 200", RangL2 coloured (0, 255, 0) as "Plus Bas L2", ll2 as "Plus bas L2"07/18/2017 at 10:15 PM #41037Bonsoir Nicolas.
J’aurais encore pu chercher très longtemps et encore je ne suis pas sûr que j’eusse trouvé. Alors, respect. Ça fonctionne impec.
Comme quoi, rien ne remplace la bouteille. Au sens informatique du terme bien sûr. Quoique…mais avec modération comme le veut maintenant l’usage sérieusement établi.
Encore merci.
Ruddy
07/29/2017 at 6:30 PM #41966 -
AuthorPosts
Find exclusive trading pro-tools on