Comment tracer un rectangle jusqu’à comblement d’un gap

Viewing 15 posts - 16 through 30 (of 43 total)
  • Author
    Posts
  • #197533 quote
    druby
    Participant
    New

    Je ne suis pas sûr de comprendre ce que vous essayez de faire.
    Je pense qu’il me manque une information essentielle et/ou une compréhension.
    Je peux voir que vous avez mentionné ‘Arrays’ mais ce n’est pas clair pourquoi.
    Peut-être que c’est perdu dans la traduction.

    Stocker les lacunes dans un tableau est facile maintenant que les lacunes peuvent être identifiées.

    Mais la raison m’est inconnue, pourquoi !

    #197566 quote
    sharteel
    Participant
    Junior

    bonjour,

    je pense que nous nous sommes bien compris 🙂

    Je rajoute une image plus précise. L’idée serait de dessiner un rectangle jusqu’à ce que le gap soit comblé comme l’image ci-dessous, la même que la première mais plus précises.

    le premier bout de code affiche un rectangle mais jusqu’à la barindex courante.

    +++

    if i try in english 🙂 You understood well, i think. I ll precise, the goal is to draw a rectangle until the gap is filled, few candles later. The first code draw a rectangle until the current candle only. The picture below explain the objective.

     

    +++

    prt_gap_comble-1.png prt_gap_comble-1.png
    #197601 quote
    druby
    Participant
    New

    Bj…

    Vous pouvez conduire un cheval à l’abreuvoir, mais vous ne pouvez pas le faire boire !

    Je commence à comprendre. Je vais clarifier.

    1. Lorsque vous faites référence à un écart, voulez-vous dire, pas de bougie, ou un écart entre la clôture/le bas d’une bougie et l’ouverture/le haut de la suivante.
    2. Les bougies ours sont rouges.
    3. Les chandelles taureaux sont bleues.
    4. Lorsqu’un espace apparaît.
    5. Commencez à dessiner un rectangle à partir de la dernière bougie.
    6. dernière bougie bleue tirée de ‘open’.
    7.  

      Rectangle de dessin continu après la fin de l’espace.

    8. Arrêtez-vous lorsque la bougie se brise au-dessus du rectangle et se ferme.
    9. Dernière bougie rouge, ours, avec mèche au-dessus du haut du rectangle.
    10.  

      Bas du rectangle dessiné à l’ouverture de la bougie de rupture.

    11. Bas du rectangle dessiné vers la position ouverte de la bougie qui a cassé le haut du rectangle
    12. Est-ce un gap baissier ?
    #197606 quote
    sharteel
    Participant
    Junior

    bonjour Druby,

    oui. j ‘qi mis en gras ce qui est juste. barré se qui est faux et italique j’explique ci-dessous.

     

    1. Lorsque vous faites référence à un écart, voulez-vous dire, pas de bougie, ou un écart entre la clôture/le bas d’une bougie et l’ouverture/le haut de la suivante.
    2. Les bougies ours sont rouges.
    3. Les chandelles taureaux sont bleues.
    4. Lorsqu’un espace apparaît.
    5. Commencez à dessiner un rectangle à partir de la dernière bougie.
    6. dernière bougie bleue tirée de ‘open’.
    7. Rectangle de dessin continu après la fin de l’espace.
    8. Arrêtez-vous lorsque la bougie se brise au-dessus du rectangle et ferme le gap.
    9. Dernière bougie rouge, ours, avec mèche au-dessus du haut du rectangle.
    10. Bas du rectangle dessiné à l’ouverture de la bougie de rupture.
    11. Bas du rectangle dessiné vers la position ouverte de la bougie qui a cassé le haut du rectangle

     

    Voici le code pour le gap  commun d’ouverture à la baisse, en rouge, et pour le gap commun d’ouverture à la hausse, en vert.

    /*
    definition generale: Un gap est une zone de cours pendant laquelle aucune transaction n’a eu lieu. Il s’observe sur le graphique et ce phénomène intervient normalement entre deux periodes de bourse. Le cours d’ouverture de la periode 2 est alors intégralement plus haut ou plus bas que les cours de la periode de cotation précédent.
    */
    
    
    defparam drawonlastbaronly=true
     
    X = 500 // les 500 dernieres bougies à partir de la derniere bougie close
     
    if islastbarupdate then
     
    for i = 1 to x do
    
    //gap commun rouge
    if open[i]<low[i+1] then
    //DRAWRECTANGLE(    x1,          y1,        x2,       y2  ) COLOURED(R,V,B,a)    BORDER(R,V,B)
      DRAWRECTANGLE(barindex[i+1], Low[i+1] ,barindex, open[i]) COLOURED(255,0,0,50) bordercolor(255,0,0)
    endif
    
    //gap commun vert
    if open[i]>high[i+1] then
    //DRAWRECTANGLE(    x1,          y1,        x2,       y2   ) COLOURED(R,V,B,a)    BORDER(R,V,B)
      DRAWRECTANGLE(barindex[i+1], High[i+1], barindex, open[i]) coloured(0,255,0,50) bordercolor(0,255,0)
    endif
    
    next
     
    endif
     
    return
    

    l’image PRT du code ci dessus en pièce jointe. Le rectangle est infini.

     

    Objectif:

    1. Dessiner un rectangle qui débute sur la bougie i+1,
    2. la hauteur du rectangle sera la bougie i,
    3. le rectangle s’arrête sur la bougie qui comble le gap.

     

    Warms regards 🙂

    gap_coummun_21_07_2022.png gap_coummun_21_07_2022.png
    #197612 quote
    sharteel
    Participant
    Junior

    Je prends le du gap rouge. Je pense que je vais stocker le low[i+1]  quand la condition se vérifie pour ensuite refaire une boucle FOR qui va checker quand le cours touche la variable pour récupérer le barindex, comme cela j’obtiens mon x2.

    #197651 quote
    druby
    Participant
    New

    Est-ce que l’image représente votre processus.

    0. Démarrer
    1. Attendez l’écart de marché.
    2. Préparez-vous à dessiner un rectangle.
    3. La barre précédant l’écart de marché est ‘x1’. ‘y1’ est le prix d’ouverture de ‘x1’.
    4. Lorsque l’écart de marché se termine, ‘y2’ est le prix d’ouverture de cette barre.
    5. ‘x1’ et la barre (y2) représentent l’écart de marché.
    6. ‘y2-y1’ est l’écart de prix, de l’écart de marché.
    7. La nouvelle bougie croise ‘y1’.
    8. La barre de la croix de bougie est ‘x2’
    9 FIN

    J’ai écrit ce code plus tôt sur les mauvaises pensées tout en essayant de le résoudre.
    Votre code remonte à la dernière bougie, mais le mien fonctionne de la barre zéro à la bougie actuelle.

    Il stocke les valeurs dans un ensemble de tableaux. Il affiche trois icônes ainsi qu’un rectangle. ‘O’ bar condition true,’xy1′ rectangle start bar ‘x1’and open value ‘y1’, ‘xy2’ is bar end of rectangle ‘x2’ and open ‘y2’.

    Il n’utilise pas d’écart de marché pour démarrer ou d’écart de prix, juste la condition comme dans votre code.

    Sur la base de mes puces, j’ajouterai l’écart de marché et les “y1”, “y2” du rectangle de dessin à l’écart de prix comme point de départ.

    Image 2.

    z-sharteel-10.png z-sharteel-10.png z-sharteel-priceGap-respond-v1.itf z-sharteel-11.png z-sharteel-11.png
    #197809 quote
    sharteel
    Participant
    Junior

    bonjour,

    l’image 1 représente bien l’objectif. J’ai superposé un rectangle gris sur votre dessin.

    Dans le cas du gap, le rectangle commence à la bougie 455 pour x1, y1

    y2 serait l’ouverture de la bougie 458 et x2 serait la bougie ~473 (le gap sera comblé avec cette bougie).

    sharteel_gap_002.png sharteel_gap_002.png
    #197811 quote
    druby
    Participant
    New

    Merci pour vos commentaires d’édition.

    Les choses s’améliorent, nous semblions d’accord pour finir à la même bougie !

    Soit mon image initiale n’était pas claire, et vous n’avez pas vu les petites bougies aux barres 456 et 457, de chaque côté de l’écart du marché.
    Ou, vous utilisez un critère différent pour les déterminer à 455 et 458.

    Veuillez préciser.

     

    D’après l’image,

    • ‘x’ marque l’écart du marché, sans changement de numéro de barre.
    • Numéros de barre consécutifs si bougie présente.
    • lignes pointillées rouges et rectangle intérieur, mon choix.
    • Lignes jaunes et rectangle extérieur, votre choix.
    • La hauteur du rectangle indique l’écart de prix.
    • Mien …         X1 @ 456, Y1 @ close[X1], Y2 @ open[457], X2 @ 473.
    • Ton…            X1 @ 455, Y1 @ close[X1], Y2 @ open[458], X2 @ 473.
    • Écart de prix Y1 à Y2
    z-sharteel-12.png z-sharteel-12.png
    #197816 quote
    sharteel
    Participant
    Junior

    Bonjour Druby,

     

    exactement cela 🙂

    #197818 quote
    sharteel
    Participant
    Junior

    avec ce code on a un début de dessin des rectangles mais cela reste très approximatif.

    il faut stocker les valeurs des gaps x1,y1,x2,y2 dans un tableau et ensuite vérifier pour chaque data gqp du tableau si le prix touche y2 afin d’update la valeur x2 avec la barindex du moment ou le prix = y2

     

     

    if low[1] > Open then
    // quand le cas se produit, on stocke les variables
    x1=barindex[1]
    y1=low[1]
    y2=Open
    
    endif
    
    if close = y1 then //on test si le prix = le gap
    
    x2=barindex
    
    // on dessine le rectangle qui comble le gap
    drawrectangle(x1,y1,x2,y2)coloured(255,144,143,75)bordercolor(255,144,143,150)
    
    else
    
    on dessine un rectangle qui doit rester ouvert
    drawrectangle(x1,y1,barindex,y2)coloured(255,144,143,75)bordercolor(255,144,143,150)
    
    endif
    #197821 quote
    sharteel
    Participant
    Junior

    bonjour,

    je parviens à ranger les données dans des tableaux et afficher mes rectangles.

    defparam drawonlastbaronly=true
    
    X = 250
    
    if islastbarupdate then
    
    // on injecte les datas dans les tableaux
    for i = 1 to x do
    if open[i]<low[i+1] then
    
     $x1[i]=barindex[i+1]
     $y1[i]=low[i+1]
     $x2[i]=barindex
     $y2[i]=open[i]
    
    endif
    next
    
    
    // on lit les tableaux
    for i = 1 to x do
    
    drawrectangle($x1[i],$y1[i],$x2[i],$y2[i]) coloured(255,0,0,100) bordercolor(255,0,0,0)
    
    next
    
    
    endif
    
    // detecter le comblement de gap en lisant les tableaux et la le prix qui comblera
    
    return

     

    je cale un peu pour detecter le comblement du gap. je souhaite parser le tableau $y1 et comparer avec le prix high des bougies qui suivent le gap car il y a le phenomene d’historique, les gaps peuvent etre combler plusieurs bougies aprés. C’est pour cela que j’ai decidé de ranger les données dans des tableaux avec la meme valeur index. ici le x=250 donc je stocke les 250 dernieres bougies.

    condition: si le high d’une bougie suivant le gap est supérieur à $y1 alors cela signifie que le gap est comblé.

    Je n’arrive pas a traduire cette condition :/ car j ai du mal à parser le passé dans mon tableau.

    merci de votre aide.

    #197849 quote
    druby
    Participant
    New

    J’ai regardé votre code, c’était le seul moyen d’obtenir X2 et d’arrêter le rectangle.

    Le code que j’écris trouve l’écart de marché et dessine un rectangle au bon endroit, mais filtrer toutes les combinaisons de type de bougie et d’écart de marché, l’écart de prix haut/bas et quelle ouverture/fermeture est requise, sur laquelle, est un peu difficile.

    //defparam drawonlastbaronly=true
    once count=-1  // arr[count]
    
    X = 250   // lookback/search scope
    
    // on injecte les datas dans les tableaux  // we inject the data into the arrays
    
    
    if open<low[1] then  // condition
    count = count+1  // count for array index on true condition
    
    $x1[count]=barindex[1]  // data set = [ $x1, $y1, $y2, later  $x2 ]
    $y1[count]=low[1]
    $y2[count]=open
    
    endif
    
    if islastbarupdate then
    
    if barindex > X then  // reduce  search to within scope
    z=barindex-X
    endif
    
    
    for i = 0 to lastset($x1)           // loop through each data set index
    if $x1[i] <  z then // shorten loop, test if x1 is within X lookback scope
    continue  //  jump to next loop iteration, dont do this data set, out of 'X' scope
    else
    for j = $x1[i]+1 to barindex    // loop forward though each data set in scope
    
    if high[barindex[j]] > $y1[i]  then  // compare indexed high with y1
    $x2[i] = barindex-barindex[j]     // if true store in arr $x2
    break                             // break out of loop, if x2 found
    endif
    
    next
    
    endif
    next
    
    // on lit les tableaux
    for i = 1 to lastset($x1) do
    if $x1[i] < z then  // limit drawing to scope X
    continue // miss iteration if out of scope
    else
    drawrectangle($x1[i],$y1[i],$x2[i],$y2[i]) coloured(255,0,0,100) bordercolor(255,0,0,0)
    endif
    next
    
      
    
    endif // islastbarupdate
    if open<low[1] then
    drawtext("y1",barindex,10)anchor(bottom,index,yShift)
    endif
    return
    sharteel thanked this post
    z-sharteel-13.png z-sharteel-13.png
    #197851 quote
    sharteel
    Participant
    Junior

    bonjour Druby,

     

    je viens d ajouter le code sur un graph nasdaq futur en 100 ticks.

    la detection de gap et de comblement semble bonne. je continue de regarder bougie par bougie.

    #197853 quote
    sharteel
    Participant
    Junior

    dans la capture sur un graph 70 ticks, on voit bien le mécanisme de comblement de gap.

    j ai rajouté un inducteur en bas de l’écran à la place de y1:

    R pour gap red pour le cas du code ci-dessus

    G pour gap green dans le cas ou le gap sera Open>High[1]

    sharteel_gap_0004.png sharteel_gap_0004.png
    #197856 quote
    sharteel
    Participant
    Junior

    le code pour le green gap avec une petite modif de condition sur le comblement du gap: si le prix touche le low alors le gap est comblé. on peut faire la meme modification sur le red gap

    if low[barindex[j]] <= $y1[i]  then  // compare indexed high with y1

    ici le code pour green gap:

    //defparam drawonlastbaronly=true
    once count=-1  // arr[count]
     
    //X = 500  // lookback/search scope
     
    // on injecte les datas dans les tableaux  // we inject the data into the arrays
     
    // green gap
    if open>high[1] then  // condition
    count = count+1  // count for array index on true condition
    
    $x1[count]=barindex[1]  // data set = [ $x1, $y1, $y2, later  $x2 ]
    $y1[count]=high[1]
    $y2[count]=open
    r=0
    g=255
    b=0
     
    endif
     
    if islastbarupdate then
     
    if barindex > X then  // reduce  search to within scope
    z=barindex-X
    endif
    
    for i = 0 to lastset($x1)           // loop through each data set index
    if $x1[i] <  z then              // shorten loop, test if x1 is within X lookback scope
    continue                      // jump to next loop iteration, dont do this data set, out of 'X' scope
    else
    for j = $x1[i]+1 to barindex    // loop forward though each data set in scope
     
    if low[barindex[j]] <= $y1[i]  then  // compare indexed high with y1
    $x2[i] = barindex-barindex[j]     // if true store in arr $x2
    break                             // break out of loop, if x2 found
    endif
    
    next
     
    endif
    next
     
    // on lit les tableaux
    for i = 1 to lastset($x1) do
    if $x1[i] < z then  // limit drawing to scope X
    continue // miss iteration if out of scope
    else
    drawrectangle($x1[i],$y1[i],$x2[i],$y2[i]) coloured(r,g,b,100) bordercolor(0,0,0,0)
    endif
    next
    
    // end of islastbarupdate
    endif
    
    // control
    if open>High[1] then
    drawtext("G",barindex,10)anchor(bottom,index,yShift) // G for green gap
    endif
    return
    

     

    on peut mutualisé les deux codes Red et Green si on les valide.

Viewing 15 posts - 16 through 30 (of 43 total)
  • You must be logged in to reply to this topic.

Comment tracer un rectangle jusqu’à comblement d’un gap


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
sharteel @sharteel Participant
Summary

This topic contains 42 replies,
has 5 voices, and was last updated by jprt
2 years, 3 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 07/14/2022
Status: Active
Attachments: 19 files
Logo Logo
Loading...