Renvoi d’information inexacte
Forums › ProRealTime forum Français › Support ProBuilder › Renvoi d’information inexacte
- This topic has 9 replies, 4 voices, and was last updated 3 weeks ago by
Pascal 44.
-
-
08/19/2025 at 4:21 PM #249875Bonjour,J’ai deux scripts identiques :• l’un cherche un “Plus haut” et retourne des résultats exacts… avec l’instruction “HAUTindex = BarsSince(High=HAUTcours)”• l’autre cherche un “plus bas” et renvoie des résultats erronés… avec l’instruction “BASindex = BarsSince(Low=BAScours)”Après avoir lu beaucoup de posts sur le forum, je ne n’ai pas trouvé comment corriger cette erreur.Merci pour votre aide éventuelle.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXVoici le script…08/19/2025 at 4:55 PM #249877
Comme indiqué dans l’encadré JAUNE ci-dessous :
N’incluez pas d’informations personnelles telles que des adresses e-mail ou des numéros de téléphone dans vos messages.
Merci 🙂
08/19/2025 at 6:03 PM #249881J’ai également remarqué des données incorrectes. Je vais essayer d’en savoir plus et je vous tiendrai au courant.
08/19/2025 at 6:42 PM #24988608/20/2025 at 7:57 AM #249895Bonjour. Je trouve ton code correct. Si je ne me trompe pas, ce que tu cherches, c’est la valeur la plus basse des 60 dernières bougies et quand elle s’est produite, n’est-ce pas ?
Dans ce cas, tu devrais utiliser une boucle plus appropriée.
Avec ton code actuel, tu demandes à localiser la bougie où low = lowest[60](low). Comme tu peux le voir sur la capture d’écran, cela a pu se produire il y a plus de 60 périodes, même si ta ligne des plus bas est bien sur 60 périodes.
Pour les plus hauts, c’est exactement la même chose, sauf qu’il faut chercher une configuration baissière pour le remarquer. Je te mets un exemple avec TSLA pour que tu voies que cela ne correspond pas non plus.Si ce que tu cherches, ce sont les bougies qui ont donné les valeurs maximales et minimales des 60 dernières bougies, alors tu devrais utiliser le code suivant pour ne pas te tromper.
123456789101112131415161718192021222324252627282930313233343536373839DefParam DrawOnLastBarOnly = truePeriode = 60atr = AverageTrueRange[14](close)// +HautHAUTcours = Highest[Periode](High)HAUTindex = 0FOR i = 0 TO Periode - 1 DOIF High[i] = HAUTcours THENHAUTindex = iBREAKENDIFNEXTIF HAUTindex > 0 THENDrawText("#HAUTcours#", BarIndex[HAUTindex], HAUTcours + 3*atr) Coloured(255, 0, 0)DrawText("#HAUTindex#", BarIndex[HAUTindex], HAUTcours + 2*atr) Coloured(255, 0, 0)DrawArrowDown(BarIndex[HAUTindex], HAUTcours + 0.15 * atr) Coloured(255, 0, 0)ENDIF// +BasBAScours = Lowest[Periode](Low)BASindex = 0FOR i = 0 TO Periode - 1 DOIF Low[i] = BAScours THENBASindex = iBREAKENDIFNEXTIF BASindex > 0 THENDrawText("#BAScours#", BarIndex[BASindex], BAScours - 3*atr) Coloured(0, 128, 0)DrawText("#BASindex#", BarIndex[BASindex], BAScours - 2*atr) Coloured(0, 128, 0)DrawArrowUp(BarIndex[BASindex], BAScours - 0.15*atr) Coloured(0, 128, 0)ENDIFRETURN close08/20/2025 at 8:40 AM #249902Voici une autre version qui n’utilise ni Barssince, ni de boucles:
12345678910111213141516171819202122232425262728293031DefParam DrawOnLastBarOnly = truePeriode = 60// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// Le +HAUT sur une période (par exemple 2h)...HAUTcours = Highest[Periode](High)if HAUTcours<>Hautcours[1] or HAUTcours=Hautcours[1] thenhautindex=barindexendifIf HAUTindex > 0 thenDrawText("#HAUTcours#", HAUTindex,HAUTcours+3) Coloured(255,0,0) // • Ecrire le cours de ce +HautDrawText("#HAUTindex#", HAUTindex,HAUTcours+2) Coloured(255,0,0) // • Ecrire le cours de ce +HautDrawArrowDown(HAUTindex, HAUTcours+1) Coloured(255,0,0) // • Dessiner une flèche ROUGE au DESSUSEndif// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// Le +BAS sur une période (par exemple 2h)...BAScours = Lowest[Periode](Low)if bascours<>bascours[1] or bascours=bascours[1] thenbasindex=barindexendifIf BASindex > 0 thenDrawText("#BAScours#", BASindex,BAScours-3) Coloured(0,128,0) // • Ecrire le cours de ce +BasDrawText("#BASindex#", BASindex,BAScours-2) Coloured(0,128,0) // • Ecrire le cours de ce +BasDrawArrowUp(BASindex, BAScours-1) Coloured(0,128,0) // • Dessiner une flèche VERTE au DESSOUSEndif// =================================================================================================================================================================RETURN08/20/2025 at 9:00 AM #249906Après une analyse plus approfondie 🙂 voir mon image jointe pour commencer !
BarsSince ne répond pas à la question “où se trouve l’extrême dans ma fenêtre de 60 bougies ?”, mais à “à quand remonte la dernière fois où ce prix précis est apparu”.
Du coup, quand le nouveau Lowest des 60 dernières bougies est égal à un creux plus ancien, BarsSince peut retourner93
(ou tout autre nombre > 60), alors que l’extrême de la fenêtre courante est… dans la fenêtre !Ton premier code est donc correct pour dater la dernière occurrence d’un prix, mais pas adapté à ce que tu veux faire ici (pointer l’extrême dans la période).
Pour ça, il faut utiliser HighestBars / LowestBars qui renvoient l’offset (0…Période-1) de l’extrême à l’intérieur de la fenêtre.Voir: https://www.prorealcode.com/documentation/highestbars/
Selon moi, voici le code adapté :
123456789101112131415161718192021222324252627DefParam DrawOnLastBarOnly = truePeriode = 60if barindex>periode then// +HAUT sur la périodehautBars = HighestBars[Periode](High) // offset de l'extrême dans la fenêtre (0..Periode-1)hautPrix = High[hautBars]if hautBars >= 0 thenDrawText("#HAUTprix#", BarIndex[hautBars], hautPrix+3) Coloured(255,0,0)DrawText("#hautBars#", BarIndex[hautBars], hautPrix+2) Coloured(255,0,0)DrawArrowDown(BarIndex[hautBars], hautPrix+1) Coloured(255,0,0)endif// +BAS sur la périodebasBars = LowestBars[Periode](Low) // offset de l'extrême dans la fenêtre (0..Periode-1)basPrix = Low[basBars]if basBars >= 0 thenDrawText("#BASprix#", BarIndex[basBars], basPrix-3) Coloured(0,128,0)DrawText("#basBars#", BarIndex[basBars], basPrix-2) Coloured(0,128,0)DrawArrowUp(BarIndex[basBars], basPrix-1) Coloured(0,128,0)endifendifRETURN2 users thanked author for this post.
08/20/2025 at 9:44 AM #249908Bonjour Nicolas,
Ce matin, le code fonctionne, avec effectivement une bougie de plus haut au delà des 60 .Toutes tes informations apportent de l’eau à mon moulin.
Comme je ne suis pas informaticien… Je vais les étudier pas à pas pour une bonne compréhension.
Et je vais donc pouvoir améliorer et poursuivre mon idée de trading.Je te remercie pour ton aide et ta rapidité de réponse.
Pascal08/20/2025 at 10:09 AM #249909Merci également à Ivan et Roberto
2 users thanked author for this post.
08/21/2025 at 12:36 AM #249931Bonjour messieurs,
J’ai bien étudié vos propositions et je vous remercie de m’avoir fait progresser.Une question à Nicolas :
L’instruction conditionnelle “if barindex>periode then” qui encadre tout le code m’interpelle.
C’est une condition qui me semblait sans intérêt, puisqu’elle est toujours vraie.Pourtant, si je la supprime, j’ai un message d’erreur.
Cette instruction est magique, elle évite le message d’erreur…
Je n’ai pas compris pourquoi ce miracle ? Si tu as une minute,
pourrais-tu me donner une idée de ce qui se passe avec ce test “if barindex>periode then” ?
Je t’en remercie d’avance
Pascal -
AuthorPosts
Find exclusive trading pro-tools on