Je ne parviens pas à utiliser barssince

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #245037 quote
    Denis Quéva
    Participant
    New

    Bonjour,

    Je souhaite calculer le nombre de barres séparant le prix de clôture actuel avec la dernière bougie contenant ce prix.

    J’utilise la fonction barsSince. J’ai consulté la page BarsSince – Instructions – ProRealTime codes Reference mais quelque chose m’échappe.

    Dans l’exemple de l’image j’attends comme résultat 14, mais comme on peut le voir, j’obtiens -1 (autrement dit aucune bougie).

    Merci d’avance

    Denis

    defparam DRAWONLASTBARONLY = true
    if IsLastBarUpdate then
    critere = close > low and close < high
    duree = BarsSince(critere,1)
    DRAWTEXT("duree : #duree#", barindex, high+10) anchor(top, index, value)
    endif
    return
    #245038 quote
    Denis Quéva
    Participant
    New

    Il manque la pièce jointe (fausse manip)…

    prorealtime.jpg.png prorealtime.jpg.png
    #245042 quote
    LucasBest
    Participant
    Average

    Bonjour,

    Je souhaite calculer le nombre de barres séparant le prix de clôture actuel avec la dernière bougie contenant ce prix.

    Bonjour,
    il faut stocker la valeur du close dans un tableau (dont le valeur ne varie pas en fonction de la bougie, mais restera constante).
    De même, ne pas utiliser de variable “critere” pour les mêmes raisons…
    critere = close > low and close < high (c'est quasiment toujours vrai...)

    defparam DRAWONLASTBARONLY = true
    if IsLastBarUpdate then
    $temp[0] = close
    duree = BarsSince($temp[0] > low and $temp[0] < high,1)
    DRAWTEXT("duree : #duree#", barindex, high+10) anchor(top, index, value)
    endif
    return
    #245044 quote
    Denis Quéva
    Participant
    New

    Merci beaucoup Lucas!

    #253686 quote
    Denis Quéva
    Participant
    New

    Bonjour,

    Je souhaite maintenant utiliser barsSince mais sur une sous période de l’historique, et non pas par rapport à la dernière bougie.

    Voici le code et le résultat obtenu : le point montre que BarsSince ne tient pas compte du critère low[retourArriere].

     

    defparam DRAWONLASTBARONLY = true
    
    Periode = 20
    RetourArriere = 60
    
    if IsLastBarUpdate then
    
    //Recherche la valeur la plus basse sur la période mais à partir d'une bougie située dans l'historique
    $y[0] = lowest[Periode](low[RetourArriere])
    drawsegment(barindex[Periode+RetourArriere], $y[0], barindex[RetourArriere], $y[0])
    
    // Je recherche la position de $y[0] dans la plage correspondant au segment sur le graphique
    x = barsSince(low[RetourArriere] = $y[0],1)
    if x > 0 then
    drawpoint(barindex[x], $y[0],5)
    endif
    
    endif
    
    return
    
    Capture-decran-2025-11-17-113725.png Capture-decran-2025-11-17-113725.png
    #253689 quote
    Denis Quéva
    Participant
    New
    defparam DRAWONLASTBARONLY = true
    
    Periode = 20
    RetourArriere = 60
    
    if IsLastBarUpdate then
    
    //Recherche la valeur la plus basse sur la période mais à partir d'une bougie située dans l'historique
    $y[0] = lowest[Periode](low[RetourArriere])
    drawsegment(barindex[Periode+RetourArriere], $y[0], barindex[RetourArriere], $y[0])
    
    // Je recherche la position de $y[0] dans la plage correspondant au segment sur le graphique
    $iBarindex[0] = barindex - RetourArriere
    x = barsSince(low = $y[0] and barindex < $iBarindex[0],1)
    if x > 0 then
    drawpoint(barindex[x], $y[0],5)
    endif
    
    endif
    
    return
    
    #253692 quote
    Denis Quéva
    Participant
    New

    Merci pour ta réponse Roberto. Mais ça ne fonctionne pas.
    BarsSince est bien compatible avec les arrays.

    #253693 quote
    robertogozzi
    Moderator
    Master

    Oui, je l’ai effectivement supprimé au bout d’une minute, mais il avait déjà été publié.

    J’ai donc remplacé BarsSince par une boucle FOR :

    defparam DRAWONLASTBARONLY = true
    
    Periode = 20
    RetourArriere = 60
    
    //if IsLastBarUpdate then
    //Recherche la valeur la plus basse sur la période mais à partir d'une bougie située dans l'historique
    $y[0] = lowest[Periode](low[RetourArriere])
    drawsegment(barindex[Periode+RetourArriere], $y[0], barindex[RetourArriere], $y[0])
    
    // Je recherche la position de $y[0] dans la plage correspondant au segment sur le graphique
    //x = barsSince(low[RetourArriere] = $y[0],1)
    //x = barsSince(low[RetourArriere] = y,1)
    x = 0
    FOR i = 0 TO Periode+RetourArriere
    IF low[i] = $y[0] THEN
    x = i
    break
    ENDIF
    NEXT 
    if x > 0 then
    drawpoint(barindex[x], $y[0],5)
    endif
    Denis Quéva and Iván González thanked this post
    #253882 quote
    LucasBest
    Participant
    Average
    defparam DRAWONLASTBARONLY = true
    
    Periode = 20
    RetourArriere = 60
    
    if IsLastBarUpdate then
    
    //Recherche la valeur la plus basse sur la période
    //mais à partir d'une bougie située dans l'historique
    
    $y[0] = lowest[Periode](low[RetourArriere])
    drawsegment(barindex[Periode+RetourArriere], $y[0], barindex[RetourArriere], $y[0])
    // => c'est bien la bonne valeur que tu recherches qui est stocké dans le tableau (le tracé le prouve)
    
    // Je recherche la position de $y[0] dans la plage correspondant au segment sur le graphique
    x = barsSince(low[RetourArriere] = $y[0],1)
    // => C'est bien la bonne recherche qui est effectué
    
    if x > 0 then
    // drawpoint(barindex[x], $y[0],5)
    // => c'est bien la bonne bougie qui a été trouvé
    // celle qui correspond à : low[RetourArriere] = $y[0]
    // c'est à dire la barindex dont la bar situé 60 bougie en arrière est = à $y[0]
    // Si tu veux le barindex de la bougie en question il suffit de faire x - RetourArriere
    drawpoint(x-RetourArriere, $y[0],5)
    endif
    
    endif
    
    return
    #253884 quote
    LucasBest
    Participant
    Average
    defparam DRAWONLASTBARONLY = true
    
    Periode = 20
    RetourArriere = 60
    
    if IsLastBarUpdate then
    
    //Recherche la valeur la plus basse sur la période
    //mais à partir d'une bougie située dans l'historique
    
    $y[0] = lowest[Periode](low[RetourArriere])
    drawsegment(barindex[Periode+RetourArriere], $y[0], barindex[RetourArriere], $y[0])
    // => c'est bien la bonne valeur que tu recherches qui est stocké dans le tableau (le tracé le prouve)
    
    // Je recherche la position de $y[0] dans la plage correspondant au segment sur le graphique
    x = barsSince(low[RetourArriere] = $y[0],1)
    // => C'est bien la bonne recherche qui est effectué
    
    if x > 0 then
    // drawpoint(barindex[x], $y[0],5)
    // => c'est bien la bonne bougie qui a été trouvé
    // celle qui correspond à : low[RetourArriere] = $y[0]
    // c'est à dire la barindex dont la bar situé 60 bougie en arrière est = à $y[0]
    // Si tu veux le barindex de la bougie en question il suffit de faire x - RetourArriere
    drawpoint(barindex[x]-RetourArriere, $y[0],5)
    endif
    
    endif
    
    return
    Denis Quéva and robertogozzi thanked this post
    #253895 quote
    Denis Quéva
    Participant
    New

    Parfait, merci LucasBest.
    Effectivement, x correspond aux nombre de bougies par rapport à la dernière bougie de la zone de recherche, et non de la dernière bougie en cours.
    Erreur de ma part !

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

Je ne parviens pas à utiliser barssince


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Denis Quéva @deun-deun Participant
Summary

This topic contains 10 replies,
has 3 voices, and was last updated by Denis Quéva
3 months, 1 week ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 03/19/2025
Status: Active
Attachments: 2 files
Logo Logo
Loading...