SOMMET CREUX CASSURE
Forums › ProRealTime forum Français › Support ProBuilder › SOMMET CREUX CASSURE
- This topic has 12 replies, 3 voices, and was last updated 1 month ago by
christophe11560.
-
-
02/19/2025 at 11:37 AM #244021
Bonjour,
j’ai une difficulté avec mon code.
Je souhaite qu’un segment soit tracé lorsque 2 sommets consécutifs à la baisse sont cassés par le haut ou que deux creux à la hausse sont cassés à la baisse par le bas.Merci par avance pour vos retours 😉
02/19/2025 at 11:41 AM #244022code qui disfonctionne1234567891011121314151617181920212223242526272829303132CreuxNiv1= low[2]>low[1] and low[1]<LOwSommetNiv1 = high[2]<high[1] and high[1]>highIf SommetNiv1 thenS3x1 = S2x1S3y1 = S2y1S2x1 = S1x1S2y1 = S1y1S1x1 = barindex[1]S1y1 = high[1]EndifIf CreuxNiv1 thenC3x1 = C2x1C3y1 = C2y1C2x1 = C1x1C2y1 = C1y1C1x1 = barindex[1]C1y1 = low[1]EndifChangementDeSensUp=s1y1<s2y1 and high>=s1y1ChangementDeSensDn=C1y1>C2y1 and low<=c1y1if VersionChangementDeSens thenif ChangementDeSensUp thendrawsegment(barindex,S1y1,S1x1,S1y1)coloured(153,0,0) style (line,3)ENDIFif ChangementDeSensDn thendrawsegment(barindex,C1y1,C1x1,C1y1)coloured(0,153,0) style (line,3)ENDIFendifreturn02/19/2025 at 11:47 AM #244024Autant pour moi
merci d’annuler ma demande.
En corrigeant mon code dans le post, ce dernier fonctionne correctementbonne journée
02/19/2025 at 12:59 PM #244031Bonjour,
Par contre ma question vaut pour des creux ou des sommets de niveau 2.
Creux Niv2: 1 creux de niveau 1 entouré de 2 creux plus haut de niveau 1 => Cassure à la baisse de 2 creux de niveau 2 consécutifs à la hausse
Sommet Niv2: 1 sommet de niveau 1 entouré de 2 creux plus bas de niveau 1 => Cassure à la hausse de 2 sommets de niveau 2 consécutifs à la baisseVoir code ci-dessous qui ne fonctionne pas: Les segments ne sont pas tracés
sommet creux de niveau 2123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051CreuxNiv1= low[2]>low[1] and low[1]<LOwSommetNiv1 = high[2]<high[1] and high[1]>highIf SommetNiv1 thenS3x1 = S2x1S3y1 = S2y1S2x1 = S1x1S2y1 = S1y1S1x1 = barindex[1]S1y1 = high[1]EndifIf CreuxNiv1 thenC3x1 = C2x1C3y1 = C2y1C2x1 = C1x1C2y1 = C1y1C1x1 = barindex[1]C1y1 = low[1]EndifCreuxNiv2= C3y1>C2y1 and C2y1<C1y1SommetNiv2=S3y1<S2y1 and S2y1>S1y1If SommetNiv2 thenS3x2 = S2x2S3y2 = S2y2S2x2 = S1x2S2y2 = S1y2S1x2 = S2x1S1y2 = S2y1EndifIf CreuxNiv2 thenC3x2 = C2x2C3y2 = C2y2C2x2 = C1x2C2y2 = C1y2C1x2 = C2x1C1y2 = C2y1EndifREM Conditions:ChangementDeSensUpNiv2=s1y2<s2y2 and high>=s1y2ChangementDeSensDnNiv2=C1y2>C2y2 and low<=c1y2if ChangementDeSensUpNiv2 thendrawsegment(barindex,S1y2,S1x2,S1y2)coloured(153,0,0) style (line,3)ENDIFif ChangementDeSensDnNiv2 thendrawsegment(barindex,C1y2,C1x2,C1y2)coloured(0,153,0) style (line,3)ENDIFreturn02/23/2025 at 5:57 PM #244240Bonjour à tous,
Est ce que quelqu’un sait comment je peux corriger mon code pour qu’il identifie correctement mes sommets et creux de niveaux 2?Ca m’arrangerait beaucoup de connaitre la solution parce que je rencontre le même problème sur d’autres codes en cours sur lesquels je travaille.
par avance merci beaucoup 😉
02/23/2025 at 7:48 PM #244244Dans un cas comme celui-ci lorsqu’on ne trouve pas une erreur ou que le code n’aboutit pas au résultat escompté, il faut diviser le code et vérifier partie par partie… Ici, il faut s’assurer premièrement que le code identifie bien les sommets et creux, puis ceux de niveau 2…
Pour se faire utilise l’instruction drawpoint ou drawarrow provisoirement, sur chaque nouveau sommet trouvé. Ainsi ça sera possible de vérifier visuellement si le code repère bien les sommets comme il le devrait.A première vue je dirais les sommets et creux de niveaux 2 vont avoir tendance à se recalculer à chaque bougie, alors qu’ils ne devraient l’être que si une sommet/creux de niveau 1 a été trouvé… Il faut soit imbriquer les if… then, soit mettre un flag pour indiquer qu’un nouveau sommet/creux a été trouvé et ajouter cette condition à la détection de sommet/creux de niveau 2
02/24/2025 at 11:45 AM #244280Bonjour,
Tel que le code est écrit les sommets et les creux de niveaux 1 et 2 se dessinent correctement sur le graphique avec drawpoint.
Les segments se dessinent correctement pour le niveau 1 et ne se dessinent pas du tout pour le niveau 2.Bizarrement, si j’applique la même méthode pour déterminer les creux et sommets de niveaux 3 que celle utilisée pour déterminer ceux de niveau 2, ces derniers ne se dessinent pas.
Donc je pense, que c’est ma manière pour déterminer les sommets et creux de niveau 2 qui ne convient pas.
Je ne sais pas comment résoudre ce problème.
123456REM Niv1drawtext("●",S1x1,S1y1+1*ticksize,Dialog,Bold,10) coloured(204,0,204)drawtext("●",C1x1,C1y1-1*ticksize,Dialog,Bold,10) coloured(51,102,255)REM Niv2drawtext("●",S1x2,S1y2+1*ticksize,Dialog,Bold,15) coloured(204,0,204)drawtext("●",C1x2,C1y2-1*ticksize,Dialog,Bold,15) coloured(51,102,255)02/24/2025 at 1:58 PM #244284Il s’avère que « ChangementDeSensUpNiv2 » et « ChangementDeSensDNNiv2 » sont toujours égaux à zéro…
Lorsque je supprime la deuxième condition et que j’ajuste le « draw segment » à la syntaxe correcte, j’obtiens le graphique suivant…
Hollow Summit Broken1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253CreuxNiv1= low[2]>low[1] and low[1]<LOwSommetNiv1 = high[2]<high[1] and high[1]>highIf SommetNiv1 thenS3x1 = S2x1S3y1 = S2y1S2x1 = S1x1S2y1 = S1y1S1x1 = barindex[1]S1y1 = high[1]EndifIf CreuxNiv1 thenC3x1 = C2x1C3y1 = C2y1C2x1 = C1x1C2y1 = C1y1C1x1 = barindex[1]C1y1 = low[1]EndifCreuxNiv2= C3y1>C2y1 and C2y1<C1y1SommetNiv2=S3y1<S2y1 and S2y1>S1y1If SommetNiv2 thenS3x2 = S2x2S3y2 = S2y2S2x2 = S1x2S2y2 = S1y2S1x2 = S2x1S1y2 = S2y1EndifIf CreuxNiv2 thenC3x2 = C2x2C3y2 = C2y2C2x2 = C1x2C2y2 = C1y2C1x2 = C2x1C1y2 = C2y1EndifREM Conditions:ChangementDeSensUpNiv2=s1y2<s2y2 //and high>=s1y2ChangementDeSensDnNiv2=C1y2>C2y2 //and low<=c1y2if ChangementDeSensUpNiv2 thendrawsegment(S1x2, S1y2, barindex, S1y2) coloured(153,0,0) style (line,3)ENDIFif ChangementDeSensDnNiv2 thendrawsegment(C1x2, C1y2, barindex, C1y2) coloured(0,153,0) style (line,3)ENDIFreturn //s1x1,s1y1,c1x1,c1y1,ChangementDeSensUpNiv2,ChangementDeSensDnNiv202/24/2025 at 5:51 PM #244305Bonjour et merci pour ton retour,
Seulement la modification que tu proposes qui consiste à enlever les conditions de cassure du sommet ou du creux de niveaux 2 lignes 40 et 41 ne permet pas de tracer les cassures de sommets ou de creux.
Cela donne un résultat aléatoire de segment sur des sommets ou des creux de niv.2.Ce n’est pas cela qui dysfonctionne dans le code 🙁
02/24/2025 at 6:16 PM #24430602/24/2025 at 6:16 PM #24430702/24/2025 at 9:49 PM #244315A première vue je dirais les sommets et creux de niveaux 2 vont avoir tendance à se recalculer à chaque bougie, alors qu’ils ne devraient l’être que si une sommet/creux de niveau 1 a été trouvé… Il faut soit imbriquer les if… then, soit mettre un flag pour indiquer qu’un nouveau sommet/creux a été trouvé et ajouter cette condition à la détection de sommet/creux de niveau 2
Comme je l’ai écris plus haut, le problème vient du fait que CreuxNiv2 et SommetNiv2 sont mis à jour à chaque bougie, alors qu’ils ne devraient l’être que lorsqu’un nouveau creux/sommet de niveau 1 est détecté…
Avec drawpoint, les sommets et creux sont effectivement détectés et dessiner mais à la bougie suivant, s’il n’y a aucun changement creux/sommet de niveau 1, alors ceux ci sont toujours dans le bon ordre pour que CreuxNiv2 et SommetNiv2 soient l’un ou l’autre positif!
Du coup, le dernier creux/sommet niveau 2 est remis à jour (avec les mêmes valeurs), mais les creux/sommet niveau 2 suivants vont être mis à jour aussi avec les mêmes valeurs que le dernier…
Du coup au final, ce code abouti toujours à ce que les 3 sommets/creux de niveau 2 soient identiques…Il faut imbriquer les conditions ou mettre un flag ou enregistré le barindex à la détection d’un nouveau/creux sommet de niveau 1
Imbriquer les conditions12345678910111213141516171819202122232425262728293031323334353637SommetNiv1 = high[2]<high[1] and high[1]>highIf SommetNiv1 thenS3x1 = S2x1S3y1 = S2y1S2x1 = S1x1S2y1 = S1y1S1x1 = barindex[1]S1y1 = high[1]SommetNiv2=S3y1<S2y1 and S2y1>S1y1If SommetNiv2 thenS3x2 = S2x2S3y2 = S2y2S2x2 = S1x2S2y2 = S1y2S1x2 = S2x1S1y2 = S2y1EndifEndifCreuxNiv1= low[2]>low[1] and low[1]<LOwIf CreuxNiv1 thenC3x1 = C2x1C3y1 = C2y1C2x1 = C1x1C2y1 = C1y1C1x1 = barindex[1]C1y1 = low[1]CreuxNiv2= C3y1>C2y1 and C2y1<C1y1If CreuxNiv2 thenC3x2 = C2x2C3y2 = C2y2C2x2 = C1x2C2y2 = C1y2C1x2 = C2x1C1y2 = C2y1EndifEndif1 user thanked author for this post.
02/25/2025 at 12:07 PM #244334Bonjour Lucas,
Ca marche correctement en imbriquant les conditions !!!
Les sommets et les creux sont correctement reconnusMerci beaucoup et à plus 😉
-
AuthorPosts