point bas et haut de deux périodes successives

Viewing 9 posts - 1 through 9 (of 9 total)
  • Author
    Posts
  • #247176 quote
    gbzh
    Participant
    Junior

    Bonjour,

    j’aimerai déterminer deux points, l’un étant le “a” plus bas d’une section et l’autre le plus haut “b” d’une section suivante.

    La 1ère période commence lorsque tenkan croise à la baisse kijun et se termine lorsque tenkan re-croise kijun à la hausse juste après. Puis la 2e période commence avec ce même croisement puis se termine par le croisement de tenkan à la baisse de kijun.

    le point a est le plus bas de la 1ère période et b le plus haut de la 2e période.

    mon code ne donne rien. merci de votre aide.

    voici une image en pièce jointe

    ligne bleue tenkan, rouge kijun. fleche verte point a, fleche rouge point b. 1ere fleche noire, le premier croisement à la baisse de kijun par tenkan. 2e fleche le croise de tenkan à la hausse de kijun. 3e fleche, le croisement de tenkan à la baisse de kijun.

    // === Paramètres Ichimoku ===
    tenkanPeriod = 9
    kijunPeriod = 26
    n = 500  // profondeur de recherche
    
    TimeFrame(5minute)
    
    // === Ichimoku ===
    Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
    Kijun  = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
    
    // === Recherche du 1er croisement baissier (Tenkan < Kijun)
    croisementBas1 = -1
    FOR i = n DOWNTO 1 DO
       IF Tenkan[i] < Kijun[i] AND Tenkan[i-1] >= Kijun[i-1] THEN
          croisementBas1 = i
          BREAK
       ENDIF
    NEXT
    
    // === Recherche du croisement haussier suivant (Tenkan > Kijun)
    croisementHaut = -1
    IF croisementBas1 > 0 THEN
       FOR i = croisementBas1 - 1 DOWNTO 1 DO
          IF Tenkan[i] > Kijun[i] AND Tenkan[i-1] <= Kijun[i-1] THEN
             croisementHaut = i
             BREAK
          ENDIF
       NEXT
    ENDIF
    
    // === Recherche du 2e croisement baissier (Tenkan < Kijun)
    croisementBas2 = -1
    IF croisementHaut > 0 THEN
       FOR i = croisementHaut - 1 DOWNTO 1 DO
          IF Tenkan[i] < Kijun[i] AND Tenkan[i-1] >= Kijun[i-1] THEN
             croisementBas2 = i
             BREAK
          ENDIF
       NEXT
    ENDIF
    
    // === Point A : plus bas entre croisementBas1 et croisementHaut
    pointA = -1
    valA = high
    IF croisementBas1 > 0 AND croisementHaut > 0 THEN
       FOR i = croisementBas1 DOWNTO croisementHaut DO
          IF Low[i] < valA THEN
             valA = Low[i]
             pointA = BarIndex - i
          ENDIF
       NEXT
    ENDIF
    
    // === Point B : plus haut entre croisementHaut et croisementBas2
    pointB = -1
    valB = low
    IF croisementHaut > 0 AND croisementBas2 > 0 THEN
       FOR i = croisementHaut DOWNTO croisementBas2 DO
          IF High[i] > valB THEN
             valB = High[i]
             pointB = BarIndex - i
          ENDIF
       NEXT
    ENDIF
    
    // === Affichage flèches
    IF pointA > 0 THEN
       DRAWARROWUP(pointA, valA - AverageTrueRange[5](Close)) COLOURED("green")
    ENDIF
    
    IF pointB > 0 THEN
       DRAWARROWDOWN(pointB, valB + AverageTrueRange[5](Close)) COLOURED("red")
    ENDIF
    
    RETURN 0
    #247177 quote
    gbzh
    Participant
    Junior

    graphique

    #247179 quote
    JC_Bywan
    Moderator
    Master

    Bonsoir,

    Les boucles rallongent les temps de calcul, on peut développer une logique différente sans boucle de la façon suivante, l’exécution sera plus rapide, tout en tournant sur l’intégralité de l’historique sans se limiter à une profondeur de recherche de 500. On peut avoir ainsi tous les A et B successifs au lieu des 2 derniers. A tester:

    once barreA=0
    once barreB=0
    
    // === Ichimoku ===
    
    tenkanPeriod = 9
    kijunPeriod = 26
    
    Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
    Kijun = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
    
    // Periode 1
    
    if tenkan crosses under kijun then
     barreA=barindex
     valA=low
     DRAWARROWDOWN(barreB, valB + AverageTrueRange[5](Close)) COLOURED("red")
    endif
    if tenkan<kijun then
     if low<ValA then
      barreA=barindex
      ValA=low
     endif
    endif
    
    // Periode 2
    
    if tenkan crosses over kijun then
     barreB=barindex
     valB=high
     DRAWARROWUP(barreA, valA - AverageTrueRange[5](Close)) COLOURED("green")
    endif
    if tenkan>kijun then
     if high>ValB then
      barreB=barindex
      ValB=high
     endif
    endif
    
    return
    Iván González thanked this post
    #247183 quote
    gbzh
    Participant
    Junior

    merci beaucoup

    #247205 quote
    gbzh
    Participant
    Junior

    et maintenant j’essaye de mettre des extensions fibonacci en me basant sur ces deux points, mais encore une fois, mon résultat n’est pas satisfaisant. meme la largeur voulue du segment entre les deux points, je n’y arrive pas.

    si vous pouviez m’aider encore une fois 🙂

    // === Initialisations persistantes ===
    ONCE barreA = 0
    ONCE barreB = 0
    ONCE valA = 0
    ONCE valB = 0
    
    // === Ichimoku ===
    tenkanPeriod = 9
    kijunPeriod = 26
    
    Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
    Kijun  = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
    
    // === Période 1 : point A (croisement baissier)
    if Tenkan crosses under Kijun then
     barreA = barindex
     valA = Low // ← bas absolu de la bougie A
     DRAWARROWDOWN(barreB, valB + AverageTrueRange[5](Close)) COLOURED("red")
    endif
    
    if Tenkan < Kijun and Low < valA then
     barreA = barindex
     valA = Low
    endif
    
    // === Période 2 : point B (croisement haussier)
    if Tenkan crosses over Kijun then
     barreB = barindex
     valB = High // ← haut absolu de la bougie B
     DRAWARROWUP(barreA, valA - AverageTrueRange[5](Close)) COLOURED("green")
    
     // === Extensions de Fibonacci à partir de A → B
     ecart = valB - valA
     largeur = barreB - barreA
     fib127 = valA + ecart * 1.27
     fib161 = valA + ecart * 1.618
     fib261 = valA + ecart * 2.618
    
     finFib = barreB + largeur
    
     DRAWSEGMENT(barreB, fib127, finFib, fib127) COLOURED("gray")
     DRAWSEGMENT(barreB, fib161, finFib, fib161) COLOURED("gray")
     DRAWSEGMENT(barreB, fib261, finFib, fib261) COLOURED("gray")
    endif
    
    if Tenkan > Kijun and High > valB then
     barreB = barindex
     valB = High
    endif
    
    return
    #247209 quote
    JC_Bywan
    Moderator
    Master

    Si je comprends ce que tu veux faire, verticalement c’est l’écart entre A et B pour calculer les niveaux, ça ok… mais horizontalement tu veux les tracés de où à où? A priori tu veux tracer à partir du point B des segments vers la droite, mais si tu dis que tu n’arrives pas à avoir “la largeur voulue”, alors je ne peux pas partir de la largeur telle que codée pour en déduire sa valeur, tu veux un report à droite de la largeur AB? Une largeur fixe choisie d’avance? Autre?

    #247212 quote
    gbzh
    Participant
    Junior

    ca serait une extension verticale, large de la largeur du segment entre les points a et b, placée au dessus de ceux ci.

    #247213 quote
    JC_Bywan
    Moderator
    Master

    Ok, dans ce cas je modifierais ainsi calcul et tracé des extensions. J’ai rajouté des commentaires pour mieux comprendre le rôle de chaque IF dans les calculs de valA et valB, ce qui permet aussi de mieux comprendre pourquoi je trace les extensions dans le IF de l’autre cross. A tester:

    ONCE barreA = 0
    ONCE barreB = 0
    ONCE valA = 0
    ONCE valB = 0
    
    // === Ichimoku ===
    tenkanPeriod = 9
    kijunPeriod = 26
    
    Tenkan = (highest[tenkanPeriod](High) + lowest[tenkanPeriod](Low)) / 2
    Kijun = (highest[kijunPeriod](High) + lowest[kijunPeriod](Low)) / 2
    
    // === Période 1 : point A (croisement baissier)
    if Tenkan crosses under Kijun then
     barreA = barindex
     valA = Low // ← Initialisation bas absolu de la bougie A en début de période 1
     DRAWARROWDOWN(barreB, valB + AverageTrueRange[5](Close)) COLOURED("red") // Tracé de B en fin de période 2 (puisqu'on est en début de période 1)
    
     // === Extensions de Fibonacci à partir de A → B
     ecart = valB - valA[1]
     //largeur = barreB - barreA[1]
     fib127 = valA + ecart * 1.27
     fib161 = valA + ecart * 1.618
     fib261 = valA + ecart * 2.618
     //finFib = barreB + largeur
     DRAWSEGMENT(barreA[1], fib127, barreB, fib127) COLOURED("gray")
     DRAWSEGMENT(barreA[1], fib161, barreB, fib161) COLOURED("gray")
     DRAWSEGMENT(barreA[1], fib261, barreB, fib261) COLOURED("gray")
    
    endif
    
    if Tenkan < Kijun and Low < valA then
     barreA = barindex
     valA = Low // ← Mise à jour bas absolu de la bougie A en cours de période 1
    endif
    
    // === Période 2 : point B (croisement haussier)
    if Tenkan crosses over Kijun then
     barreB = barindex
     valB = High // ← Initialisation haut absolu de la bougie B en début de période 2
     DRAWARROWUP(barreA, valA - AverageTrueRange[5](Close)) COLOURED("green") // Tracé de A en fin de période 1 (puisqu'on est en début de période 2)
    
    endif
    
    if Tenkan > Kijun and High > valB then
     barreB = barindex
     valB = High // ← Mise à jour bas absolu de la bougie B en cours de période 2
    endif
    
    return
    #247216 quote
    gbzh
    Participant
    Junior

    merci

Viewing 9 posts - 1 through 9 (of 9 total)
  • You must be logged in to reply to this topic.

point bas et haut de deux périodes successives


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
gbzh @gbzh Participant
Summary

This topic contains 8 replies,
has 2 voices, and was last updated by gbzh
8 months, 3 weeks ago.

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