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
Il manque la pièce jointe (fausse manip)…
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
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
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
Merci pour ta réponse Roberto. Mais ça ne fonctionne pas.
BarsSince est bien compatible avec les arrays.
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
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
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
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 !