ProScreener – Code cassure Bollinger haute + fraicheur signal

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • #60845 quote
    Cyssou
    Participant
    Junior

    Bonjour,

    Je suis nouveau sur le forum. A la recherche d’un petit coup de pouce pour savoir ce qui cloche dans mon scrreener…
    Je suis en train d’essayer de coder un screener pour me remonter les cassures de la Bollinger supérieure (par le prix) -Bollinger en paramètre 20, 2-.
    Pas très difficile jusque ici, mais voilà, j’aimerai avoir une fraîcheur de signal, afin d’avoir un suivi. Je souhaiterai donc initier le comptage à partir du moment où le prix casse la Bollinger supérieure et le terminer quand la valeur de la Bollinger supérieure repasse inférieure à celle de sa période précédente (Voici ce que je recherche sur l’image jointe pour être plus explicite : Entrée sur la première flèche rouge -cassure Bollinger Sup et début comptage-, Sortie sur la deuxième flèche rouge -Bollinger Sup devient baissière et fin comptage-).

    [attachment file=60849]

    Voici l’extrait de mon code qui ne fonctionne pas exactement comme il le devrait… :

     

    nb = 0
    periode = 20
    indicator1 = Volume
    indicator2 = BollingerUp[20](close)
    
    //Volumes
    c1 = (indicator1 > 10000)
    
    IF close >= indicator2 THEN
    nb = 1
    ENDIF
    
    IF close < indicator2 THEN
    nb = 0
    ENDIF
    
    IF nb = 1 THEN
    FOR i = 0 TO periode
    IF close[i+1] >= indicator2[i+1] AND indicator2[i] >= indicator2[i+1] THEN
    nb = nb + 1
    ENDIF
    IF indicator2[i] <= indicator2[i+1] THEN
    BREAK
    ENDIF
    NEXT
    ENDIF
    
    cs = nb <> 0
    
    SCREENER[cs AND c1] (nb AS "Fraicheur")
    

     

    Voilà, j’espère que quelqu’un pourra m’aider. J’essaie déjà de le mettre au point depuis un certain temps et j’ai déjà parcouru pas mal de sujets sur le forum. Peut être en ai-je raté un similaire d’ailleurs… Merci de me l’indiquer dans ce cas 🙂

    J’ai également essayé avec la fonction Barindex mais je n’arrive pas à l’utiliser…

    Merci par avance pour vos réponses.

    Capture.jpg Capture.jpg
    #60851 quote
    Nicolas
    Keymaster
    Master

    Si je comprends bien le but est de faire une statistique de cette condition en utilisant ProScreener sur une liste d’actions par exemple ?

    Cette condition a eu lieu sur les dernières “periode”, selon ta variable. Le soucis je pense c’est que tu démarres ta boucle à partir du moment où tu détectes la sortie par le haut et tu cherches en arrière, alors que tu devrais faire une boucle en avant.

    Bref, voilà comment je coderai ta description, si j’ai toutefois bien compris ce que tu cherches à faire :

    bollup = BollingerUp[20](close)
    
    if close crosses over bollup and bollup>bollup[1] and bollup[1]<bollup[2] then 
    first=1
    count=0
    endif
    
    if first=1 then 
    count=count+1
    endif
    
    if bollup<bollup[1] and bollup[1]>bollup[2] then 
    first=0
    endif
    
    screener [count] (count)

    Dans la colonne de tri, tu retrouveras le nombre de bars qu’a duré la dernière occurrence de la condition complète, soit depuis le breakout de la bollinger supérieure jusqu’à sa déclinaison, comme dans l’exemple ci-joint.

    bollinger-break-count-bars.png bollinger-break-count-bars.png
    #60856 quote
    Cyssou
    Participant
    Junior

    Tout d’abord, merci pour la réponse si réactive.

    Le but est d’avoir un historique à partir du croisement de la Boll sup jusqu’à sa déclinaison. Et avoir une colonne de fraicheur de signal avec une fraicheur = 1 à partir de la cassure boll sup. Ceci afin de voir le signal le plus récent en premier mais pouvoir revenir sur les anciens signaux afin de suivre ce qu’il s’est passé ensuite.

    Oui en effet mon code cherche en arrière… Comment chercher en avant dans ce cas ?

    Concernant votre code, j’ai un grand nombre de résultats avec le prix compris dans les bandes de boll ou en dessous et sans cassure de la boll sup…

    Par ailleurs, ce que je cherche à faire est exactement ce que vous avez décrit sur l’image jointe.

    Enfin, peut être serait-il judicieux de limiter le nombre d’actions qu’il me sort avec une condition (cassure boll sup) valable par exemple pour les 20 dernières périodes uniquement ?…

    #60857 quote
    Nicolas
    Keymaster
    Master

    Concernant votre code, j’ai un grand nombre de résultats avec le prix compris dans les bandes de boll ou en dessous et sans cassure de la boll sup…

    Oui c’est ce que j’expliquai, ProScreener démarre 254 barres dans l’historique avant maintenant et le lit jusqu’à la barre présente. Le screener que j’ai posté donne la dernière occurrence de toutes les conditions, peu importe où elle se situe entre maintenant et 254 périodes en arrière.

    EDIT: et c’est ce qui est visible dans l’image, la dernière occurrence a duré 66 bars, mais a eu lieu il y a quelque temps déjà.

    #60859 quote
    Cyssou
    Participant
    Junior

    D’accord. Dans ce cas, je vais essayer de reprendre votre code avec ces infos pour ne pas afficher tous les résultats “passés” et filtrer uniquement sur la dernière période depuis laquelle la bollup est haussière. Merci

    #60865 quote
    Cyssou
    Participant
    Junior

    En fait, concernant l’affichage, comment exécuter le screener uniquement à partir de cette condition :

    close crosses over bollup and bollup>bollup[1] and bollup[1]<bollup[2]

    Et ce jusqu’à celle-ci :

    bollup<bollup[1] and bollup[1]>bollup[2]

    Et ne rien afficher d’autres en dehors de ces conditions.

    Ou comment lui dire de compter que sur une certaine période (qu’elle soit clairement définit ou conditionnelle) au lieu de chercher sur les dernières 254 barres d’historique ?…

    #60871 quote
    Nicolas
    Keymaster
    Master

    Ce qui marque la fin de l’occurrence, c’est cette condition:

    bollup<bollup[1] and bollup[1]>bollup[2]

    Donc on va chercher si celle-ci a eu lieu uniquement sur les 20 dernières barres par exemple:

    bollup = BollingerUp[20](close)
    
    if close crosses over bollup and bollup>bollup[1] and bollup[1]<bollup[2] then
    first=1
    count=0
    endif
    
    if first=1 then
    count=count+1
    endif
    
    reset = bollup<bollup[1] and bollup[1]>bollup[2]
    if reset and first then
    first=0
    endif
    
    test = summation[20](reset and count>0)=1
    
    screener [test] (count)
    #60874 quote
    Cyssou
    Participant
    Junior

    J’ai trouvé la réponse, il suffisait de faire appel à first et non compte comme ceci :

    screener [first] (count)

    Merci beaucoup pour votre aide 🙂

    Dernière question… Suis-je bien certain qu’une action dont le prix casse la bollup mais 2-3 périodes ou plus après cette condition s’affiche ? :

    bollup and bollup>bollup[1] and bollup[1]<bollup[2]

    Car cela signifie bollup actuelle > à bollup période précédente ET bollup précédente < à bollup 2 périodes précédentes.
    Mais donc, qu’en est-il si le prix casse la bollup 2-3 périodes ou plus après cette condition ? Je souhaiterai que les résultats remontent peu importe le nombre de périodes après cette condition où la cassure de la bollup arrivent (plus clairement par exemple, je souhaiterai que si le prix casse la bollup 5 périodes après la condition de départ ci-dessus, l’action s’affiche également)…

    #60879 quote
    Nicolas
    Keymaster
    Master

    J’ai introduit cette condition d’écartement des bandes pour bien marquer un départ, car un Close seul qui croise au dessus de la bande supérieure, ça arrive constamment et on ne pouvait pas marquer un vrai départ, à mon sens. Donc si peu importe le début de cette phase de bandes de bollinger, il faut supprimer cette condition.

    Cyssou thanked this post
    #60893 quote
    Cyssou
    Participant
    Junior

    Voici donc le code final qui rempli la fonction demandée :

    bollup = BollingerUp[20](close)
    period = 20
    vol = volume > 10000
    
    for i=0 to period
    if close crosses over bollup and bollup[i]>bollup[i+1] and bollup[i+1]<bollup[i+2] then
    first=1
    count=0
    endif
    next
    
    if first=1 then
    count=count+1
    endif
     
    if bollup<bollup[1] and bollup[1]>bollup[2] then
    first=0
    endif
     
    screener [first and vol] (count)

    Seul bémol pour avoir exactement ce que j’attendais, je souhaiterai un comptage pour l’exemple ci-dessous à 5 -et non à 2 comme c’est le cas actuellement- (c’est à dire peu importe si le prix repasse au-dessus de la bollup, je souhaite initier le comptage sur la première cassure uniquement). Mais ce code redémarre à zéro à chaque nouvelle cassure et je n’arrive pas à enregistrer comme point de départ la première cassure…

    [attachment file=60894]

    Merci par avance.

    Capture-1.jpg Capture-1.jpg
    #61104 quote
    Cyssou
    Participant
    Junior

    Avez-vous une idée (pour initier le comptage uniquement sur la première cassure) ?

    Merci par avance

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

ProScreener – Code cassure Bollinger haute + fraicheur signal


ProScreener : Scanners de Marché & Détection

New Reply
Author
author-avatar
Cyssou @cyssou Participant
Summary

This topic contains 10 replies,
has 2 voices, and was last updated by Cyssou
8 years, 1 month ago.

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