Voici un petit indicateur pour prt qui permet :
- de foncer le fond du graphique hors séance Cash et encore plus hors séance Future
- d'afficher le niveau exact de clôture de la veille (saisie manuelle quotidienne)
- de faire ressortir en un coup d'oeil l'évolution récente des marchés
Ce n'est pas le premier ni le dernier publié ici, surtout pour une fonction aussi simple, mais comme il m'est devenu indispensable je me suis dit qu'il pourrait être utile à d'autres.
Pourquoi cet indicateur ?
Car ig cote les cfd à risque limité 24h/24 et que je passais mon temps à chercher les périodes d'ouverture/fermeture des séances. Plus tard j'ai ajouté l'affichage du cours exact de clôture de la veille, qui est souvent le niveau le plus important dans le comportement de l'indice en séance, et qui ne peut pas être déduit des cours (c'est le résultat d'un calcul publié chaque jour).
Il est adapté aux indices CAC, DAX, DOW, nq, SP500 et applique quasi-automatiquement les horaires de séance correspondants.
Je l'avais commencé avec prt 10, il marche avec la v11 et il y a d'ailleurs peut-être des améliorations à apporter au niveau graphique.
Installation
Créer un nouvel indicateur dans prt et coller le code ci-dessous
Configuration sur chaque graphique
Il y a 5 cases à cocher qui déterminent l'affichage. Si rien n'est coché, rien n'est affiché.
HighlightClosedMarket : cocher pour foncer le graphique hors séance
HighlightClose : cocher pour colorer en rouge/bleu la ligne verticale de la clôture cash
ShowLastClose : cocher pour afficher une ligne horizontale rouge/bleue d'une clôture à l'autre. Conseil : utiliser le style graphique "points" pour éviter l'effet "marches d'escalier".
isUS : cocher pour les marchés US (la détection totalement automatique n'est pas possible à cause des chevauchements entre indices, notamment DAX/nq).
isNotCash : cocher lorsque le graphique affiche le cfd à risque limité du future et non pas du cash, car dans ce cas les niveaux exacts ne sont pas valables.
Saisie manuelle des cours exacts de clôture chaque jour
Par défaut l'indicateur affiche le cours de la veille à 17h30 ou 22h selon le marché. Pour saisir et afficher à la place les Cours de clôture officiels :
1) Ouvrir la fenêtre des propriétés de l'indicateur et cliquer sur "modifier"
2) indiquer la date du jour et les Cours de clôture cash de la veille (récupérables un peu partout : yahoo Finance ou appli Bourse d'iOS, prt version gratuite...)
=> tous les graphiques utilisant cet indicateur seront mis à jour avec les nouvelles valeurs.
Modification des couleurs, seuils de détection des indices etc...
J'ai documenté un peu le code pour qu'il soit facile de modifier les paramètres internes ou d'ajouter des sous-jacents.
Un grand merci à Robinhood car je me suis fortement inspiré de son indicateur de points pivots pour démarrer. Et puis un grand merci à tout le monde sur ce forum sur lequel j'apprends tant chaque jour !
Code : #
// Affichage des séances + niveau de clôture + possibilité de régler le niveau exact réel de clôture chaque jour
//By amis
//2020-2021
defparam DrawOnLastBarOnly = true
// paramètres à changer chaque jour : date et cash close (à récupérer sur PRT free, Yahoo Finance...)
currDate = 20210106 // nécessaire depuis la v11 qui ne permet plus de savoir si on est "aujourd'hui"
currCAC = 5564.60
currDAX = 13651.22
currDOW = 30223.89
currSP500 = 3700.65
currNQ = 12694.70
// cases à cocher
// --------------
// HighlightCloseMarket : fonce le graphique hors séance Cash, encore plus hors séance Future
// HighlightClose : affiche la ligne verticale de clôture en rouge ou bleu
// ShowLastClose : affiche une ligne horizontale chaque jour, au niveau de la bougie de la veille à 17h30 ou 22h selon marché. Cette valeur peut être spécifiée à sa valeur exacte via les variables currXXX ci-dessus
// isUS : le cocher pour les marchés US. La détection automatique totale ne peut pas marcher à cause des chevauchements entre indices, DAX et NQ notamment
// isFuture : le cocher pour ne pas tenir compte des valeurs currXXX et afficher la valeur de la veille à 17h30 ou 22h : utile lorsque le sous-jacent est un cfd à risque limité de Future et non pas d'indice Cash et que l'on souhaite un repère (approximatif mais utile) avec le Cash.
// paramètres internes (si nécessaire, peut être placé en variable utilisateur)
// à modifier si nécessaire pour être capable de distinguer les indices entre eux
minDOW = 17500 // en-dessous c'est le NQ
maxSP500 = 5000 // au-dessus c'est le NQ
maxCAC = 7800 // au-dessus c'est le DAX
// couleurs up & down
rup = 0
gup = 102
bup = 204
rdo = 204
gdo = 0
bdo = 204
// Attention : les cours de cloture EU sont pris à 17h30
// afin d'afficher qqchose dans toutes les unités < 1h
// on peut aussi prendre 17h35 mais on ne verra les clotures que pour 10s, 1 et 5 minutes
// de toutes façons le vrai niveau de clôture doit être récupéré chaque jour sur les bourses officielles
//@TODO : voir s'il est possible de faire mieux depuis PRT v11
EurMarketCloseTime = 173000
//EurMarketCloseTime = 173500
yesterdayClose = 0
// Horaires séances
if isUS then
// US
futstarttime = 000000
starttime = 153000
endtime = 220000
futendtime = 231500
if close > minDOW then
yesterdayClose = currDOW
else
if close < maxSP500 then
yesterdayClose = currSP500
else
yesterdayClose = currNQ
endif
endif
elsif close < maxCAC then
// CAC
futstarttime = 080000
starttime = 090000
endtime = EurMarketCloseTime
futendtime = 220000
yesterdayClose = currCAC
else
// DAX
futstarttime = 011000
starttime = 090000
endtime = EurMarketCloseTime
futendtime = 220000
yesterdayClose = currDAX
endif
// couleur de fond
r = 128
g = 128
b = 128
alpha = 0
// intraday ? (PRT ne donne pas accès à l'UT...)
sum = 0
for i=0 to 10 do
sum = sum + intradayBarIndex[i]
next
isIntraday = sum >= 20
// set background alpha
if (isIntraday) then
if (highlightClosedMarket) then
if opentime >= starttime and opentime < endtime then
// en séance - aucun background
elsif opentime >= futstarttime and opentime < futendtime then
// pre/post market - futures only
alpha = 32
else
// markets closed (cfd à risque limité only)
alpha = 74
endif
endif
// close display
if (opentime = endtime) then
// highlight close if needed
if (HighlightClose > 0) then
if (close > lastClose) then
BACKGROUNDCOLOR(rup,gup,bup,64)
else
BACKGROUNDCOLOR(rdo,gdo,bdo,64)
endif
//alpha = 128
alpha = 0 // don't display anything else
endif
// update lastClose
lastClose = open
endif
endif
// draw only if needed
if (alpha > 0) then
BACKGROUNDCOLOR(r,g,b,alpha)
endif
// DEBUG
//p1 = intradaybarindex
//p2 = days[1]
//drawtext("#p1#",barindex,close - 40)
if (YesterdayClose > 0) and (date = currDate) and (not isNotCash) then
lastClose = YesterdayClose
endif
lastCloseToReturn = 0
if (ShowLastClose) then
lastCloseToReturn = lastClose
endif
// ensure we don't return 0 value (happens before the first close)
//if (lastCloseToReturn = 0) then
//lastCloseToReturn = close
//endif
//
if (close < lastClose) then
rup = rdo
gup = gdo
bup = bdo
endif
return lastCloseToReturn coloured(rup, gup, bup) as "Sessions"