Bonjour,
J’aimerais pouvoir coder un indicateur qui m’affiche sur le graphique l’écart minimum possible du stop loss par rapport au prix. Par exemple le prix + ou – 8 points pour un ordre sur Nasdaq. J’ai cru comprendre qu’il n’était pas possible pour un indicateur d’effacer ce qui a été tracé mais comme l’indicateur “Zone d’Achat/Vente” semble le faire, je me dis que c’est peut-être possible.
Auriez-vous des pistes à me suggérer, ou le code de l’indicateur “Zone d’Achat/Vente” pour que je puisse le modifier?
Bonne journée.
On peut tracer et effacer, si on dessine uniquement sur la dernière barre et/ou dans le passé.
Concernant ta demande, elle pourrait être réalisé comme ceci:
defparam drawonlastbaronly=true //dessine uniquement sur le dernier chandelier
drawhline(close+8*pointsize) coloured("green") style(dottedline4,2)
drawhline(close-8*pointsize) coloured("crimson") style(dottedline4,2)
RETURN
Super !
Je l’ai modifié pour ne pas tracer sur tout le graphique :
defparam drawonlastbaronly=true //dessine uniquement sur le dernier chandelier
DRAWSEGMENT(barindex, close+8*pointsize, barindex[10], close+8*pointsize) coloured("green") style(dottedline4,2)
DRAWSEGMENT(barindex, close-8*pointsize, barindex[10], close-8*pointsize) coloured("crimson") style(dottedline4,2)
RETURN
- Mais est-il possible de tracer les segments dans l’autre sens? En d’autres termes il faudrait que je puisse utiliser un “barindex” négatif, et comme ce n’est pas possible est-ce qu’il y a une autre solution?
- Par ailleurs est-il possible de récupérer l’information “distance minimale au stop” ? Ou alors faire une condition en fonction de l’actif (je n’en utilise que 4 max)?
Merci.
Désolé je n’ai pas assez réfléchi avant de poster.
J’ai la solution à ma première question à savoir tracer les segments “dans le futur”.
defparam drawonlastbaronly=true //dessine uniquement sur le dernier chandelier
DRAWSEGMENT(barindex+10, close+8*pointsize, barindex[10], close+8*pointsize) coloured("green") style(dottedline4,2)
DRAWTEXT(close+8*pointsize, barindex+15, close+8*pointsize) coloured("green")
DRAWSEGMENT(barindex+10, close-8*pointsize, barindex[10], close-8*pointsize) coloured("crimson") style(dottedline4,2)
DRAWTEXT(close-8*pointsize, barindex+15, close-8*pointsize)coloured("crimson")
RETURN
Maintenant il me reste à savoir si je peux automatiser le “close+8*pointsize” soit en récupérant l’information soit en faisant une condition en fonction de l’actif.
Pas de mot-clé du langage pour récupérer la distance minimale spécifique à IG, il te faudra faire une condition pour chacun des 4 actifs pour stocker les 4 valeurs dans une variable (par exemple distancemini)
if (ta condition qui définit l'actif1) then
distancemini=8
elsif (ta condition qui définit l'actif2) then
distancemini=...
elsif ...
...
endif
et remplacer le 8 dans tes drawsegment par la variable distancemini
C’est bien ce que j’avais en tête mais est-ce que Prorealcode gère le nom des actifs? Sinon je ne vois pas comment le code peut savoir que c’est le Nasdaq et pas n’importe qu’elle autre indice ou paire …
J’ai mis (ta condition qui définit l’actif1) ne sachant pas quels sont tes actifs ni si tu avais déjà une condition préférée parmi les possibles.
Pas de mot-clé pour connaitre l’actif dans probuilder (que dans proscreener à ce jour), mais il y a plusieurs façons de faire même si elles sont temporaires:
–> Par exemple, tu peux prendre les 4 open de ce jour qui sont probablement différentes, et ne pas avoir besoin de les remplacer tant qu’elles restent dans ton historique (dépend de ton UT et du nombre d’unités que tu charges)
if opendate=20231012 and opendate<>opendate[1] then
if open=... then //(actif1)
distancemini=...
elsif ... //(actif2)
...
endif
endif
–> ou bien s’ils sont dans 4 plages très différentes, tu peux encadrer le prix à la louche et ne pas avoir besoin de modifier le code tant que chacun reste dans sa fourchette. Exemple dow / dax /cac / eurusd
if close>30000 then // (dow)
distancemini=...
elsif close>10000 and <20000 then // (dax)
...
elsif close>1000 and close <10000 then // (cac)
...
elsif close<2 then // (euro)
...
endif
mais s’ils sont dans 4 plages similaires, mieux vaut passer par des open à un instant précis qui seront différentes pour les 4
Ah oui je vois, il me faudrait juste modifier le code une fois par jour dans mon AT avec l’instruction DOpen, merci je vais me coder ça.
Pour éviter de modifier le code, il y a encore d’autres possibilités.
Par exemple au niveau des espaces de travail, soit créer son son espace de travail avec 4 fenêtres pour 1 actif= 1 fenêtre et utiliser 4 variantes distinctes de l’indic, chacune sa seule distance mini. Ou encore si on travaille en mono-fenêtre, la possibilité de créer 4 espaces de travail de 1 fenêtre, un espace par actif, et changer d’espace plutôt que de nom d’actif dans la fenêtre du mêem espace (là encore chacun sa variante de l’indic avec une distance mini par variante)
Autre possibilité, le paramètre externe: si on ne travaille qu’avec une fenêtre dans son espace de travail et qu’on ne veut pas changer d’espace, on peut créer pour l’indic un paramètre externe, par exemple nommé “distancemini”, et faire varier sa valeur dans la fenêtre de propriétés, cette façon de faire évite de modifier le code de temps en temps, mais nécessite de modifier le paramètre dans la fenêtre de propriétés à chaque fois qu’on change d’actif dans une même fenêtre graphique. Par contre, il suffit de le faire une seule fois à l’installation si plusieurs fenêtres, une par actif
(si besoin de voir comment créer un paramètre, voir manuel probuilder page 16)
https://www.prorealtime.com/build/pdfs/fr/probuilder.52de148d.pdf
Selon mon utilisation le changement dans le code ne me pose pas de problème, et je verrai via l’affichage de l’indicateur si je n’ai pas pensé à modifier le code. Au final j’arrive à ça :
defparam drawonlastbaronly=true //dessine uniquement sur le dernier chandelier
DRAWTEXT(DOpen(0),-50,-50) ANCHOR(TOPRIGHT )
//----- NASDAQ
if (DOpen(0)= 15269.4) then
distancemini=8
//----- DOW
elsif (DOpen(0)= 33848.5) then
distancemini=12
//----- DAX
elsif (DOpen(0)= 15493.7) then
distancemini=5
//----- EURUSD
elsif (DOpen(0)= 1.06194) then
distancemini=2
endif
DRAWSEGMENT(barindex+10, close+distancemini*pointsize, barindex[10], close+distancemini*pointsize) coloured("green") style(dottedline4,2)
DRAWTEXT(close+distancemini*pointsize, barindex+15, close+distancemini*pointsize) coloured("green")
DRAWSEGMENT(barindex+10, close-distancemini*pointsize, barindex[10], close-distancemini*pointsize) coloured("crimson") style(dottedline4,2)
DRAWTEXT(close-distancemini*pointsize, barindex+15, close-distancemini*pointsize)coloured("crimson")
RETURN