Bonjour à tous,
J’utilise la plateforme prorealtime depuis quelques mois. Je trouve cet outil formidable.
Malheureusement, je suis nul en programmation et sollicite votre aide.
Je souhaiterai créer un screener qui permette de détecter des actifs financiers en range.
Une première condition serai que l’actif n’est pas fait de récent plus haut et plus bas depuis n périodes.
Une deuxième condition serai que l’écart entre le plus haut et le plus bas ne dépasse pas x % pendant ces n périodes.
Merci
Bonjour jobilagobe,
Tu trouveras ci-dessous un code de screener pour détecter si une valeur est toujours compris dans un range initié il y a au moins n period.
Par contre, concernant le pourcentage de variation du prix, on testerai quoi exactement ? On compare la hauteur du range vis à vis du prix le plus haut ou du Close actuel ?
n = 50
once hh= high
once ll = low
if high>hh then
count = 0
hh = high
elsif low<ll then
count = 0
ll = low
else
count=count +1
endif
intherange = count >= n
SCREENER [intherange]
Bonjour Nicolas,
Merci pour ta réponse rapide et pour ce code.
Pour la deuxième condition, je souhaiterai limiter les résultats du screener et trouver des actions qui se trouvent dans une situation de congestion ou dans un range de + ou – faible amplitude.
Et donc, j’aimerai pouvoir inclure une deuxième variable qui permette de définir la hauteur du range.
Je pensais prendre la différence entre le plus haut et le plus bas et que cette différence ne dépasse pas un certain pourcentage sur les n périodes étudiées.
Ok j’ai bien compris pour la différence du High-Low 🙂
Mais si je dois en tirer un pourcentage, ce serait vis à vis de quoi ? Car cette différence entre high et low est toujours la même sur les n périodes, sinon le range serait cassé (breakout).
Ou alors, ce que tu cherches à me dire c’est plutôt :
Low/High < x/100
(ou x serait le pourcentage du Low vis à vis du High)
ou bien :
(High-Low)/Close < x/100
(ou x serait le pourcentage de la taille du range vis à vis du dernier Close)
Bonjour Nicolas,
Effectivement, ce que je cherchais correspond à ta deuxième solution :
(High-Low)/Close < x/100
Merci encore pour ton aide ….
Ok voici la version modifiée.
ProScreener scan à partir du début de l’historique, j’ai donc ici codé la façon la plus simple à mon sens de retracer le nombre d’occurrence d’une bougie comprise dans le range déterminé par le plus haut et le plus bas trouvait. Donc il peut y avoir une quantité de bougie beaucoup plus importante dans cette version, que celle demandé dans n :
version 1:
n = 10
x = 10
once hh= high
once ll = low
if high>hh then
count = 0
hh = high
elsif low<ll then
count = 0
ll = low
else
count=count +1
endif
intherange = count >= n
rangepercent = (hh-ll)/Close
validpercent = rangepercent<x/100
SCREENER [intherange AND validpercent] (count as "count")//(rangepercent as "range percent")
version 2: celle-ci devrait être plus efficace, mais je ne trouve pas de résultat.. c’est moi qui doit avoir un bug je ne sais où ! 🙂 Dit moi si tu trouves quelque-chose sinon je m’y pencherai un peu plus que ça.
n = 50
x = 50
once hh= high
once ll = low
hh=highest[n](high)[1]
ll=lowest[n](low)[1]
count = 0
for i = 0 to n do
if high[i]<hh and low[i]>ll then
count=count+1
else
count=0
endif
next
intherange = count >= n
rangepercent = (hh-ll)/Close
validpercent = rangepercent<x/100
SCREENER [intherange AND validpercent] (count as "count")//(rangepercent as "range percent")
Bonsoir Nicolas,
moi non plus, je ne trouve rien.
Et malheureusement, je ne comprends pas non plus la programmation des versions que tu me proposes.
Et en fait, après réflexion, ce qui est important, dans ma démarche, est de trouver des valeurs qui évoluent dans un range de faible amplitude ou hauteur.
Il me semble avoir compris que les fonctions highest and lowest permettent de récupérer le plus haut et la plus bas sur n périodes.
Donc pour screener un faible range, est-il possible d’utiliser la formule :
x= la taille du range
(highest-lowest)/highest < x /100
Merci
Voilà la version avec la formule que tu soumets :
n = 20
x = 10
hh = highest[n](high)
ll = lowest[n](low)
rangepercent = (hh-ll)/hh
validpercent = rangepercent<x/100
SCREENER [validpercent](rangepercent as "range percent")
Merci pour ton aide….
On va dire que c’est un début 🙂
DSL je me suis tromper de code c’est sur celui là que je travaille merci de votre aide
// DECTECTION DE RANGE
//
once hh= high
once ll = low
if hh then
endif
if ll then
endif
DRAWRECTANGLE(barindex, high [0], barindex+50,low [0] ) COLOURED(0,0,0)
RETURN
Détecter un range visuellement, c’est très simple, le plus dur c’est de le synthétiser en version programmatique et systématique. Qu’est ce qui définit le range que tu as tracé en rouge sur ton graphique ? En terme de temps et de prix ? A partir de cette définition, on pourra le coder !
bonjour nicolas!
alors comment je le définis peut importe l’UT c’est caractéristique sont les mêmes,
deux point haut ou bas minimum , non cassé “mèches comprise”
et le dernier ou deux dernier point bas non cassé ou point haut, “mèches comprise”
j’ai essayer avec highest mais sa na pas fonctionner non plus alors que je pense que c’est le terme qui faut mais rien y fait
ensuite j’ai utiliser defparam onlastbaronly = true pour avoir le dernier range et je n’avait plus aucun tracer
Regardes le code ci dessous cela devrait te convenir. Il suffit d’ajuster les parametres de la hauteur de ta boite de range et de la longueur de detection du debut de range. Lorsqu’un range est detecte le systeme va dessiner un rectangle puis continuer a dessiner les extensions de se rectangle tant que nous ne sommes pas sorti du range. Ensuite plus de dessin si sorti du range jusqu’au prochain range.
//Parametre pour la hauteur de la boite de range et la periode initiale
periode=20
taille=100*ticksize
once dessin=0
if dessin=0 and (high>PH1 or low<PB1)then
PH=highest[periode](high)//detection du range sur 20 periodes
PB=lowest[periode](low)// avec Plus haut PH et Plus bas PB
endif
if PH-PB <=taille and dessin=0 THEN // taille du range 10 points
DRAWRECTANGLE(barindex, PB, barindex[periode], PH)
dessin=1 // dessin du premier rectangle si il y a un range detecte
ENDIF
If high <=PH and low>=PB and dessin=1 then
DRAWRECTANGLE(barindex-1, PB, barindex+1,PH) coloured(255,0,0,50)
dessin=1 // dessin de la prolongation du rectangle si il y a continuation du range
PH1=PH
PB1=PB
else
dessin=0 // si sortie du range alors nous arretons le dessin
endif
return
bonjour philippe,
merci du partage!! c’est sympa!