Bonjour,
Je cherche à coder un indicateur qui montre les volumes sans tenir compte de ceux de la barre de clôture sur les UT M15 et M5. En effet, les volumes de clôture étant très supérieurs à ceux des autres barres, les volumes sont très peu lisibles sur les graphiques intraday (toutes les barres sont écrasées sauf celles de clôture ; confer capture d’écran). Comme il n’est pas possible de modifier l’échelle des ordonnées de l’indicateur de volume fourni par défaut, j’ai créé mon propre indicateur avec le code ci-dessous. Cela fonctionne bien, sauf sur les graphiques M5 qui ne comportent pas 102 barres par jour (parfois, il n’y a que 101, 100 ou encore moins de barres en raison de trous dans les cotations). Avez-vous une idée pour résoudre ce problème ?
Merci d’avance.
// Indicateur de volumes sans les clôtures
// Codes couleurs :
// Vert (80, 210, 80)
// Rouge (220, 100, 100)
// Noir (0, 0, 0)
// Bleu ciel (0, 127, 255, 25)
DEFPARAM CALCULATEONLASTBARS = 400
// Définition des variables
MyVolume = Average[50](Volume)
Hausse = close >= close[1]
Baisse = close < close[1]
period = 200
// Il y a 102 barres intraday sur un graphe M5 et 34 sur un graphe M15
IF Highest[period](IntradayBarIndex) = 102 THEN
BACKGROUNDCOLOR (0, 127, 255, 25)
SMA = Average[200](Volume)
IF IntradayBarIndex = 102 THEN
Result = MyVolume
r = 0
g = 0
b = 0
ELSE
Result = volume
IF Hausse THEN
r = 80
g = 210
b = 80
ELSIF Baisse THEN
r = 220
g = 100
b = 100
ENDIF
ENDIF
ELSIF Highest[period](IntradayBarIndex) = 34 THEN
BACKGROUNDCOLOR (0, 127, 255, 25)
SMA = Average[200](Volume)
IF IntradayBarIndex = 34 THEN
Result = MyVolume
r = 0
g = 0
b = 0
ELSE
Result = volume
IF Hausse THEN
r = 80
g = 210
b = 80
ELSIF Baisse THEN
r = 220
g = 100
b = 100
ENDIF
ENDIF
ELSE
SMA = Average[50](Volume)
Result = Volume
IF Hausse THEN
r = 80
g = 210
b = 80
ELSIF Baisse THEN
r = 220
g = 100
b = 100
ENDIF
ENDIF
RETURN Result COLOURED(r, g, b) STYLE(Histogram) AS "Volumes sans clôtures", SMA AS "SMA200"
Bjr,
On peut par exemple utiliser une condition sur l’horaire d’ouverture de la portion à éliminer plutôt qu’un nombre de barres, pour à la fois : traiter en une seule fois les UT intra que tu souhaites au lieu d’avoir un bout de code pour chaque UT, et éviter tout problème de barre vide en cours de journée en cas de titre peu liquide:
if opentime<173000 then
monvol=volume
else
monvol=0
endif
if close>=close[1] then
rouge=80
vert=210
bleu=80
else
rouge=220
vert=100
bleu=100
endif
return monvol style(HISTOGRAM) coloured(rouge,vert,bleu)
Merci infiniment pour cette réponse rapide et cette solution bien plus simple que ce que j’avais imaginé au départ ! ça marche parfaitement.
En réalité, au lieu d’avoir des volumes à zéro pour la clôture, je souhaiterais afficher une barre noire qui a comme valeur la MM50 des volumes. J’ai changé dans le code proposé monvol=0 par monvol=Average[50](Volume) mais je ne sais pas comment coder pour avoir la barre en noire… Pouvez-vous m’indiquer une solution ? Merci d’avance.
Dans ce cas, on peut modifier ainsi:
if opentime<173000 then
monvol=volume
if close>=close[1] then
rouge=80
vert=210
bleu=80
else
rouge=220
vert=100
bleu=100
endif
else
monvol=average[50](Volume)
rouge=0
vert=0
bleu=0
endif
return monvol style(HISTOGRAM) coloured(rouge,vert,bleu)
C’est exactement ce qu’il me fallait. Merci beaucoup ! Les volumes sont maintenant lisibles sur tous mes graphes.