Screener de range

Viewing 15 posts - 1 through 15 (of 24 total)
  • Author
    Posts
  • #6588 quote
    jobilagobe
    Participant
    Junior

    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

    #6609 quote
    Nicolas
    Keymaster
    Master

    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]
    #6631 quote
    jobilagobe
    Participant
    Junior

    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.

    #6635 quote
    Nicolas
    Keymaster
    Master

    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)

    #6662 quote
    jobilagobe
    Participant
    Junior

    Bonjour Nicolas,

    Effectivement, ce que je cherchais correspond à ta deuxième solution :

    (High-Low)/Close < x/100

    Merci encore pour ton aide ….

    #6682 quote
    Nicolas
    Keymaster
    Master

    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")
    #6741 quote
    jobilagobe
    Participant
    Junior

    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

    #6752 quote
    Nicolas
    Keymaster
    Master

    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") 
    #6780 quote
    jobilagobe
    Participant
    Junior

    Merci pour ton aide….

    On va dire que c’est un début 🙂

    loos thanked this post
    #65128 quote
    mohamed
    Participant
    Average

    bonjour

    je travaille sur la detection de range
    mais je n’arrive pas a les calibrer sur deux point haut et un point bas ou inversement
    j’ai ajouter le
    la fonction dessins rectangle pour matérialiser le range sur le graf
     le rectangle rouge je l’es tracer a la main
     c’est le resultat que je cherche a avoir

    merci de votre aide

    // detection de range
    // n= periode
    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
     
    
    DRAWRECTANGLE(barindex, high [0], barindex+50,low [0] ) COLOURED(0,0,0)
    
    RETURN INTHERANGE

     

    Captureff.png Captureff.png
    #65131 quote
    mohamed
    Participant
    Average

    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
    CaptureGGG.png CaptureGGG.png
    #65167 quote
    Nicolas
    Keymaster
    Master

    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 !

    #65266 quote
    mohamed
    Participant
    Average

    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

    #70051 quote
    philippeB
    Participant
    Junior

    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
    Nicolas thanked this post
    detection-de-range.jpg detection-de-range.jpg
    #70574 quote
    mohamed
    Participant
    Average

    bonjour philippe,

    merci du partage!! c’est sympa!

    loos thanked this post
Viewing 15 posts - 1 through 15 (of 24 total)
  • You must be logged in to reply to this topic.

Screener de range


ProScreener : Scanners de Marché & Détection

New Reply
Author
author-avatar
jobilagobe @jobilagobe Participant
Summary

This topic contains 23 replies,
has 6 voices, and was last updated by Henchey
5 years, 9 months ago.

Topic Details
Forum: ProScreener : Scanners de Marché & Détection
Language: French
Started: 05/08/2016
Status: Active
Attachments: 4 files
Logo Logo
Loading...