Bonjour,
J’aurais aimé avoir un code qui reproduise l’image ci-dessous.
Un plus haut est tracé lorsque la clôture dépasse le précédent plus haut et en même temps le plus bas est tracé à partir du bas de l’impulsion qui a engendré la cassure du plus haut (et inversement pour la tendance baissière).
Ce qui se rapproche le plus est le canal de donchian mais celui ci ne garde les valeurs plus haut/bas que sur une certaine période et non sous les conditions que je viens de donner.
Je ne sais pas par ou commencer pour coder cela.
Merci d’avance.
Bonjour,
sur le graphe on voit que parfois, une clôture casse le précédent plus haut, sans que le plus bas soit mis à jour (voir image attachée, cas des flèches rouges par opposition aux cas de flèches vertes).
Il manque donc dans la description une condition capable de distinguer les cassures de plus haut sans mise à jour du bas de celles avec mise à jour du bas, ce qui pourrait expliquer le manque de réponses des membres du forum jusqu’à maintenant malgré une requête bien formatée et intéressante à coder.
On peut tenter de deviner la condition manquante :
– Eliminons d’emblée celle-ci: être adjacent ou pas à une précédente cassure pendant une impulsion ne peut visiblement pas être cette condition (cas dans le graphe de bas pas mis à jour suite à 2 cassures de précédent haut non adjacentes).
– Un nombre de bougies écoulées depuis la cassure pourrait, il faudrait dire combien, mais cela semble très (trop) arbitraire. On doit pouvoir trouver un critère indépendant du nombre de bougies
– Je tente en inventant ce critère: avoir eu une clôture sous l’open de la bougie ayant eu une clôture qui a cassé un précédent plus haut, comme étant l’élément autorisant une prochaine mise à jour plus haute du plus bas au cas où elle interviendrait avant une inversion par cassure du plus bas. Cela aurait du sens, ce serait le départ d’une autre impulsion à la hausse par rapport à la bougie de cassure de plus haut précédente. Voici ce que ça donnerait, à tester :
// PRC_Imbalances indicator
// 20.11.2023
// JC_Bywan @ www.prorealcode.com
// Sharing ProRealTime knowledge
once bandebas=low
once bandehaut=high
once majbasok=0
once majhautok=0
precbas= lowest[barindex-barrefhaut+1](low)
prechaut= highest[barindex-barrefbas+1](high)
if close<openrefbas then
majbasok=1
endif
if close>openrefhaut then
majhautok=1
endif
if close>bandehaut then
bandehaut=high
barrefhaut=barindex
openrefbas=open
if majbasok then
bandebas=precbas
endif
majbasok=0
endif
if close<bandebas then
bandebas=low
barrefbas=barindex
openrefhaut=open
if majhautok then
bandehaut=prechaut
endif
majhautok=0
endif
return bandehaut as "bande haute", bandebas as "bande basse"
Si tu as un autre critère que celui créé pour décrire ce qui manquait, n’hésite pas à le dire et on verra comment modifier le code en conséquence.
Bonjour et merci de la réponse.
En effet je n’ai pas accès au code original mais il y a bien une condition manquante. Votre proposition ne donne pas exactement le résultat de l’autre indicateur mais l’esprit est parfaitement respecté.
Encore merci, je vais voir si il y a des améliorations possibles que je posterai ici au cas où.
On peut aussi tester avec la mèche plutôt que la clôture qui battrait l’open de référence, via ces petites modifs pour les if de majbasok et majhautok :
// PRC_Imbalances indicator
// 20.11.2023
// JC_Bywan @ www.prorealcode.com
// Sharing ProRealTime knowledge
once bandebas=low
once bandehaut=high
once majbasok=0
once majhautok=0
precbas= lowest[barindex-barrefhaut+1](low)
prechaut= highest[barindex-barrefbas+1](high)
if low<openrefbas then//if close<openrefbas then
majbasok=1
endif
if high>openrefhaut then//if close>openrefhaut then
majhautok=1
endif
if close>bandehaut then
bandehaut=high
barrefhaut=barindex
openrefbas=open
if majbasok then
bandebas=precbas
endif
majbasok=0
endif
if close<bandebas then
bandebas=low
barrefbas=barindex
openrefhaut=open
if majhautok then
bandehaut=prechaut
endif
majhautok=0
endif
return bandehaut as "bande haute", bandebas as "bande basse"
Et si ça ne correspond toujours pas, on pourra aussi tester en prenant low (resp high) plutôt que l’open en référence pour openrefbas (resp openrefhaut)
Cette dernière version respecte moins bien le principe d’obtenir un bornage, on voit que lors d’un up la borne basse se met à jour alors qu’elle devrait rester là ou elle était comme dans la V1
J’ai l’impression que c’est mieux avec
openrefbas=low
openrefhaut=High
Je viens d’ajouter une condition qui permet de m’approcher encore un peu plus de l’indicateur original :
if high>bandehaut and close > open [1] then
if lowonce bandebas=low
once bandehaut=high
once majbasok=0
once majhautok=0
precbas= lowest[barindex-barrefhaut+1](low)
prechaut= highest[barindex-barrefbas+1](high)
if close<openrefbas then
majbasok=1
endif
if close>openrefhaut then
majhautok=1
endif
if high>bandehaut and close > open [1] then
bandehaut=high
barrefhaut=barindex
openrefbas=low
if majbasok then
bandebas=precbas
endif
majbasok=0
endif
if low<bandebas and close < open [1]then
bandebas=low
barrefbas=barindex
openrefhaut=High
if majhautok then
bandehaut=prechaut
endif
majhautok=0
endif
return bandehaut as "bande haute", bandebas as "bande basse"
Autre remarque, l’indicateur original met à jour les bas comme indiqué avec la droite en pointillé ce qui semble logique puisque c’est le bas à l’origine de la cassure, met je ne sais pas comment formuler cette condition.