SOMMET CREUX CASSURE

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #244021 quote
    christophe11560
    Participant
    Senior

    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 😉

    #244022 quote
    christophe11560
    Participant
    Senior
    CreuxNiv1= low[2]>low[1] and low[1]<LOw
    SommetNiv1 = high[2]<high[1] and high[1]>high
    
    If SommetNiv1 then
    S3x1 = S2x1
    S3y1 = S2y1
    S2x1 = S1x1
    S2y1 = S1y1
    S1x1 = barindex[1]
    S1y1 = high[1]
    Endif
    If CreuxNiv1 then
    C3x1 = C2x1
    C3y1 = C2y1
    C2x1 = C1x1
    C2y1 = C1y1
    C1x1 = barindex[1]
    C1y1 = low[1]
    Endif
    
    ChangementDeSensUp=s1y1<s2y1 and high>=s1y1
    ChangementDeSensDn=C1y1>C2y1 and low<=c1y1
    if VersionChangementDeSens then
    if ChangementDeSensUp then
    drawsegment(barindex,S1y1,S1x1,S1y1)coloured(153,0,0) style (line,3)
    ENDIF
    if ChangementDeSensDn then
    drawsegment(barindex,C1y1,C1x1,C1y1)coloured(0,153,0) style (line,3)
    ENDIF
    endif
    
    return
    #244024 quote
    christophe11560
    Participant
    Senior

    Autant pour moi

    merci d’annuler ma demande.
    En corrigeant mon code dans le post, ce dernier fonctionne correctement

    bonne journée

    #244031 quote
    christophe11560
    Participant
    Senior

    Bonjour,
    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 baisse

    Voir code ci-dessous qui ne fonctionne pas: Les segments ne sont pas tracés

    CreuxNiv1= low[2]>low[1] and low[1]<LOw
    SommetNiv1 = high[2]<high[1] and high[1]>high
    If SommetNiv1 then
    S3x1 = S2x1
    S3y1 = S2y1
    S2x1 = S1x1
    S2y1 = S1y1
    S1x1 = barindex[1]
    S1y1 = high[1]
    Endif
    If CreuxNiv1 then
    C3x1 = C2x1
    C3y1 = C2y1
    C2x1 = C1x1
    C2y1 = C1y1
    C1x1 = barindex[1]
    C1y1 = low[1]
    Endif
    
    CreuxNiv2= C3y1>C2y1 and C2y1<C1y1
    SommetNiv2=S3y1<S2y1 and S2y1>S1y1
    If SommetNiv2 then
    S3x2 = S2x2
    S3y2 = S2y2
    S2x2 = S1x2
    S2y2 = S1y2
    S1x2 = S2x1
    S1y2 = S2y1
    Endif
    If CreuxNiv2 then
    C3x2 = C2x2
    C3y2 = C2y2
    C2x2 = C1x2
    C2y2 = C1y2
    C1x2 = C2x1
    C1y2 = C2y1
    Endif
    
    REM Conditions:
    ChangementDeSensUpNiv2=s1y2<s2y2 and high>=s1y2
    ChangementDeSensDnNiv2=C1y2>C2y2 and low<=c1y2
    
    if ChangementDeSensUpNiv2 then
    drawsegment(barindex,S1y2,S1x2,S1y2)coloured(153,0,0) style (line,3)
    ENDIF
    if ChangementDeSensDnNiv2 then
    drawsegment(barindex,C1y2,C1x2,C1y2)coloured(0,153,0) style (line,3)
    ENDIF
    
    
    return
    #244240 quote
    christophe11560
    Participant
    Senior

    Bonjour à 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 😉

    #244244 quote
    LucasBest
    Participant
    Junior

    Dans 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

    #244280 quote
    christophe11560
    Participant
    Senior

    Bonjour,
    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.

    
    REM Niv1
    drawtext("●",S1x1,S1y1+1*ticksize,Dialog,Bold,10) coloured(204,0,204)
    drawtext("●",C1x1,C1y1-1*ticksize,Dialog,Bold,10) coloured(51,102,255)
    REM Niv2
    drawtext("●",S1x2,S1y2+1*ticksize,Dialog,Bold,15) coloured(204,0,204)
    drawtext("●",C1x2,C1y2-1*ticksize,Dialog,Bold,15) coloured(51,102,255)
    
    #244284 quote
    JS
    Participant
    Senior

    Il 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…

    CreuxNiv1= low[2]>low[1] and low[1]<LOw
    SommetNiv1 = high[2]<high[1] and high[1]>high
    If SommetNiv1 then
    S3x1 = S2x1
    S3y1 = S2y1
    S2x1 = S1x1
    S2y1 = S1y1
    S1x1 = barindex[1]
    S1y1 = high[1]
    Endif
    If CreuxNiv1 then
    C3x1 = C2x1
    C3y1 = C2y1
    C2x1 = C1x1
    C2y1 = C1y1
    C1x1 = barindex[1]
    C1y1 = low[1]
    Endif
    
    CreuxNiv2= C3y1>C2y1 and C2y1<C1y1
    SommetNiv2=S3y1<S2y1 and S2y1>S1y1
    If SommetNiv2 then
    S3x2 = S2x2
    S3y2 = S2y2
    S2x2 = S1x2
    S2y2 = S1y2
    S1x2 = S2x1
    S1y2 = S2y1
    Endif
    If CreuxNiv2 then
    C3x2 = C2x2
    C3y2 = C2y2
    C2x2 = C1x2
    C2y2 = C1y2
    C1x2 = C2x1
    C1y2 = C2y1
    Endif
    
    REM Conditions:
    ChangementDeSensUpNiv2=s1y2<s2y2 //and high>=s1y2
    ChangementDeSensDnNiv2=C1y2>C2y2 //and low<=c1y2
    
    
    
    if ChangementDeSensUpNiv2 then
    drawsegment(S1x2, S1y2, barindex, S1y2) coloured(153,0,0) style (line,3)
    ENDIF
    if ChangementDeSensDnNiv2 then
    drawsegment(C1x2, C1y2, barindex, C1y2) coloured(0,153,0) style (line,3)
    ENDIF
    
    
    return //s1x1,s1y1,c1x1,c1y1,ChangementDeSensUpNiv2,ChangementDeSensDnNiv2

    #244305 quote
    christophe11560
    Participant
    Senior
    Bonjour 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 🙁
    #244306 quote
    JS
    Participant
    Senior
    Je ne veux pas dire que tu dois supprimer ces conditions, mais je tiens simplement à te signaler que, avec ces conditions, le “ChangementDeSens…” est toujours égal à zéro. Il y a peut-être quelque chose à herzien. 😊
    #244307 quote
    JS
    Participant
    Senior
    Je ne veux pas dire que tu dois supprimer ces conditions, mais je tiens simplement à te signaler que, avec ces conditions, le “ChangementDeSens…” est toujours égal à zéro. Il y a peut-être quelque chose à herzien. 😊
    #244315 quote
    LucasBest
    Participant
    Junior
    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
    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
    SommetNiv1 = high[2]<high[1] and high[1]>high
    If SommetNiv1 then
    S3x1 = S2x1
    S3y1 = S2y1
    S2x1 = S1x1
    S2y1 = S1y1
    S1x1 = barindex[1]
    S1y1 = high[1]
    SommetNiv2=S3y1<S2y1 and S2y1>S1y1
    If SommetNiv2 then
    S3x2 = S2x2
    S3y2 = S2y2
    S2x2 = S1x2
    S2y2 = S1y2
    S1x2 = S2x1
    S1y2 = S2y1
    Endif
    Endif
    
    CreuxNiv1= low[2]>low[1] and low[1]<LOw
    If CreuxNiv1 then
    C3x1 = C2x1
    C3y1 = C2y1
    C2x1 = C1x1
    C2y1 = C1y1
    C1x1 = barindex[1]
    C1y1 = low[1]
    CreuxNiv2= C3y1>C2y1 and C2y1<C1y1
    If CreuxNiv2 then
    C3x2 = C2x2
    C3y2 = C2y2
    C2x2 = C1x2
    C2y2 = C1y2
    C1x2 = C2x1
    C1y2 = C2y1
    Endif
    Endif
    
    christophe11560 thanked this post
    #244334 quote
    christophe11560
    Participant
    Senior
    Bonjour Lucas, Ca marche correctement en imbriquant les conditions !!! Les sommets et les creux sont correctement reconnus Merci beaucoup et à plus 😉
Viewing 13 posts - 1 through 13 (of 13 total)
  • You must be logged in to reply to this topic.

SOMMET CREUX CASSURE


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
Summary

This topic contains 12 replies,
has 3 voices, and was last updated by christophe11560
11 months, 2 weeks ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 02/19/2025
Status: Active
Attachments: 1 files
Logo Logo
Loading...