Alerte une fois le segment tracé

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #88806 quote
    Matriciel
    Participant
    Master

    Bonjour Nicolas, bonjour à tous,

    J’aimerais que mon screener me prévienne lorsqu’un segment est tracé.

    J’ai ma base ci-jointe qui fonctionne très bien comme indicateur mais je n’arrive pas à créer le screener qui en ressort.

    Peux-tu m’aider s’il-te-plait ?

    IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
    extremum2=MM1h[1]
    extremum1=highest[LookbackMM1h](MM1h)
    preciomax2=close[1]
    preciomax=Highest[LookbackMM1h](close)
    IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
    for i=1 to LookbackMM1h
    if MM1h[i]=extremum1 then
    zz=i
    drawsegment (barindex[1], MM1h[1], barindex[zz], MM1h[zz]) coloured(0,0,0)
    ENDIF
    next
    ENDIF
    ENDIF

    Merci beaucoup !

    #88816 quote
    Nicolas
    Keymaster
    Master

    Il suffit de flagger dans une variable le barindex quand un nouveau segment est tracé, puis pour screener cette condition, il faut simplement tester si cette variable est différente de la période précédente.

    #88829 quote
    Matriciel
    Participant
    Master

    Merci Nicolas.

    J’ai fait comme suit mais j’ai l’impression que mon screener affiche beaucoup trop de résultats

    IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
    extremum2=MM1h[1]
    extremum1=highest[LookbackMM1h](MM1h)
    preciomax2=close[1]
    preciomax=Highest[LookbackMM1h](close)
    IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
    for i=1 to LookbackMM1h
    if MM1h[i]=extremum1 then
    zz=i
    segment1 = barindex[1]
    segment2 = MM1h[1]
    segment3 = barindex[zz]
    segment4 = MM1h[zz]
    ENDIF
    next
    ENDIF
    ENDIF
    
    segment = segment1 AND segment2 AND segment3 AND segment4
    
    IF segment <> segment[1] THEN
    toutbon = 0
    else
    toutbon = 1
    ENDIF
     
    SCREENER [toutbon]

     

    !

    Qu’en penses-tu ?

    #89207 quote
    Nicolas
    Keymaster
    Master

    Qu’est ce que donne la variable “toutbon” dans un indicateur ? Histoire de mener le debuggage jusqu’au bout.

    #89218 quote
    Matriciel
    Participant
    Master

    C’est une excellente idée d’avoir pensé à le retourner en indicateur ! 🙂

    Ce que j’ai écrit un peu plus haut fonctionne très bien, grâce à toi.

    Voici ce que cela donne en image :

    Toutbon.jpg Toutbon.jpg
    #95930 quote
    Matriciel
    Participant
    Master

    Bonjour Nicolas,

    Le screener que j’ai créé ci-dessus fonctionne très bien mais il affiche tous les instruments dont il y a eu un segment de tracé, il y a 5 minutes, 15 minutes ou 1 heure or je voudrais qu’il affiche seulement les instruments dont le segment vient d’être tracé à l’instant T.

    Que faut-il renseigner dans mon code ?

    Merci pour ton aide.

    DJ

    #95953 quote
    Nicolas
    Keymaster
    Master

    Ta variable ‘toutbon’ reste à l’état TRUE, il faut donc la remettre à FALSE (soit 0) à chaque nouvelle barre lors de la lecture du code, ainsi on la testera vrai que sur la dernière. Donc ajouter

    toutbon=0

    en tout début du code par exemple (non testé, car je n’ai plus la logique en tête de ton screener et je ne pense pas que l’on est la dernière version dans le sujet ?).

    Matriciel thanked this post
    #95960 quote
    Matriciel
    Participant
    Master

    Merci Nicolas, je vais le tester dans ce sens et reviendrai vers toi pour te dire ce qu’il en est.

    #96029 quote
    Matriciel
    Participant
    Master

    Bonjour Nicolas,

    Ca ne fonctionne pas, le screener n’a pas détecté le segment tracé comme dans mon indicateur.

    C’est un screener qui détecte les divergences de mon indicateur. Voici le code comme tu me l’as suggéré plus haut :

    toutbon = 0
    
    IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
    extremum2=MM1h[1]
    extremum1=highest[LookbackMM1h](MM1h)
    preciomax2=close[1]
    preciomax=Highest[LookbackMM1h](close)
    IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
    for i=1 to LookbackMM1h
    if MM1h[i]=extremum1 then
    zz=i
    segment1 = barindex[1]
    segment2 = MM1h[1]
    segment3 = barindex[zz]
    segment4 = MM1h[zz]
    ENDIF
    next
    ENDIF
    ENDIF
     
    segment = segment1 AND segment2 AND segment3 AND segment4
     
    IF segment <> segment[1] THEN
    toutbon = 0
    else
    toutbon = 1
    ENDIF
     
    SCREENER [toutbon]
    

    Qu’y a-t-il à corriger ? Merci beaucoup.

    #96035 quote
    Nicolas
    Keymaster
    Master

    Alors, je n’ai pas les codes complets pour tester, donc essaie plutôt de cette façon pour voir :

    IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
    extremum2=MM1h[1]
    extremum1=highest[LookbackMM1h](MM1h)
    preciomax2=close[1]
    preciomax=Highest[LookbackMM1h](close)
    IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
    for i=1 to LookbackMM1h
    if MM1h[i]=extremum1 then
    zz=i
    segment1 = barindex[1]
    segment2 = MM1h[1]
    segment3 = barindex[zz]
    segment4 = MM1h[zz]
    ENDIF
    next
    ENDIF
    ENDIF
     
    segment = segment1 AND segment2 AND segment3 AND segment4
     
    IF segment <> segment[1] THEN
    toutbon = 1
    else
    toutbon = 0
    ENDIF
     
    SCREENER [toutbon]
    #96083 quote
    Matriciel
    Participant
    Master

    Tu as raison, voici le code complet :

    Je l’applique sur un timeframe de 5 minutes.

    TF = 5
    LookbackMM1h = 720
    
    RGL1h = Linearregression[720/TF](close)
    RGLJour = Linearregression[1440/TF](close)
    
    A = (RGL1h - RGLJour)
    MM1h = (RGL1h + A)
    
    ///divergence baissière
    IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
    extremum2=MM1h[1]
    extremum1=highest[LookbackMM1h](MM1h)
    preciomax2=close[1]
    preciomax=Highest[LookbackMM1h](close)
    IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
    for i=1 to LookbackMM1h
    if MM1h[i]=extremum1 then
    zz=i
    segment1 = barindex[1]
    segment2 = MM1h[1]
    segment3 = barindex[zz]
    segment4 = MM1h[zz]
    ENDIF
    next
    ENDIF
    ENDIF
    
    segment = segment1 AND segment2 AND segment3 AND segment4
    
    IF segment <> segment[1] THEN
    Vente = 0
    else
    Vente = 1
    ENDIF
    
    ///divergence haussière
    IF (MM1h[1]<MM1h AND MM1h[1]<MM1h[2]) THEN
    extremum22d=MM1h[1]
    extremum11d=lowest[LookbackMM1h](MM1h)
    preciomin2d=close[1]
    preciomind=lowest[LookbackMM1h](close)
    IF(extremum22d>extremum11d AND preciomin2d<preciomind[1]) THEN
    for i2d=1 to LookbackMM1h
    if MM1h[i2d]=extremum11d[1] then
    zz2d=i2d
    segment5 = barindex[1]
    segment6 = MM1h[1]
    segment7 = barindex[zz2d]
    segment8 = MM1h[zz2d]
    ENDIF
    next
    ENDIF
    ENDIF
    
    segmentbis = segment5 AND segment6 AND segment7 AND segment8
    
    IF segmentbis <> segmentbis[1] THEN
    Achat = 0
    else
    Achat = 1
    ENDIF
    
    SCREENER [Vente OR Achat]

    Y a-t-il une erreur d’écriture ?

    #96084 quote
    Nicolas
    Keymaster
    Master

    J’inverserai les conditions booléennes achat et vente pour nous donner le moment où la valeur des coordonnées de tes divergences changent et non pas l’inverse, car tu sembles remettre à 0 leurs tests uniquement quand une nouvelle divergence arrivent ?! (ou alors je n’ai pas compris la logique derrière l’indicateur).

    TF = 5
    LookbackMM1h = 720
    
    RGL1h = Linearregression[720/TF](close)
    RGLJour = Linearregression[1440/TF](close)
    
    A = (RGL1h - RGLJour)
    MM1h = (RGL1h + A)
    
    ///divergence baissière
    IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
    extremum2=MM1h[1]
    extremum1=highest[LookbackMM1h](MM1h)
    preciomax2=close[1]
    preciomax=Highest[LookbackMM1h](close)
    IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
    for i=1 to LookbackMM1h
    if MM1h[i]=extremum1 then
    zz=i
    segment1 = barindex[1]
    segment2 = MM1h[1]
    segment3 = barindex[zz]
    segment4 = MM1h[zz]
    ENDIF
    next
    ENDIF
    ENDIF
    
    segment = segment1 AND segment2 AND segment3 AND segment4
    
    IF segment <> segment[1] THEN
    Vente = 1
    else
    Vente = 0
    ENDIF
    
    ///divergence haussière
    IF (MM1h[1]<MM1h AND MM1h[1]<MM1h[2]) THEN
    extremum22d=MM1h[1]
    extremum11d=lowest[LookbackMM1h](MM1h)
    preciomin2d=close[1]
    preciomind=lowest[LookbackMM1h](close)
    IF(extremum22d>extremum11d AND preciomin2d<preciomind[1]) THEN
    for i2d=1 to LookbackMM1h
    if MM1h[i2d]=extremum11d[1] then
    zz2d=i2d
    segment5 = barindex[1]
    segment6 = MM1h[1]
    segment7 = barindex[zz2d]
    segment8 = MM1h[zz2d]
    ENDIF
    next
    ENDIF
    ENDIF
    
    segmentbis = segment5 AND segment6 AND segment7 AND segment8
    
    IF segmentbis <> segmentbis[1] THEN
    Achat = 1
    else
    Achat = 0
    ENDIF
    
    SCREENER [Vente OR Achat]
    #96099 quote
    Matriciel
    Participant
    Master

    Tu as bien compris l’indicateur. 😉

    Je vais inverser les conditions booléennes des variables comme tu me le suggères et voir s’il se passe quelque chose.

    Je te tiens au courant de la suite des évènements.

    Merci en tout cas !

Viewing 13 posts - 1 through 13 (of 13 total)
  • You must be logged in to reply to this topic.

Alerte une fois le segment tracé


ProScreener : Scanners de Marché & Détection

New Reply
Author
author-avatar
Matriciel @matriciel Participant
Summary

This topic contains 12 replies,
has 2 voices, and was last updated by Matriciel
6 years, 11 months ago.

Topic Details
Forum: ProScreener : Scanners de Marché & Détection
Language: French
Started: 01/16/2019
Status: Active
Attachments: 1 files
Logo Logo
Loading...