Indicateur en Screener

Viewing 9 posts - 1 through 9 (of 9 total)
  • Author
    Posts
  • #231549 quote
    Alai-n
    Participant
    Veteran

    Bonjour, j’ai fait plusieurs tentatives infructueuses pour transformer cet indicateur (code ci-joint) en Screener. Quelque chose m’échappe dans la reformulation !!!

    Cet indicateur a été initialement développé par @JC_Bywan , donc si jamais tu étais dans le coin?!

    Un peu d’aide serait apprécié, merci.

    //Entrer en position lorsque le marché clôture au-dessus de la bougie dont le high est le plus haut.
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    once surveillerachat=0
    // Formulation de l'algorithme PriceActionSignal
    PriceActionSignal  = low[3] > low[2] and low[2] < low[1] and high[3] > high[2] and high[2] < high[1] //and close[0] > high[x]
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Signal = 0
    achat = 0
    // Représentation graphique PriceActionSignal
    if PriceActionSignal then
     hautvoulu=max(high[1], high[3])
     basvoulu=low[2]
     Signal = 1.5
     surveillerachat=1
    endif
     
    Validation= close>hautvoulu
    Invalidation= - (close<basvoulu)
    if surveillerachat=1 and validation and not PriceActionSignal then
     achat=2
     surveillerachat=0
    elsif surveillerachat=1 and Invalidation=-1 then
     surveillerachat=-1
    endif
     
    Return Signal as "Signal", surveillerachat style(dottedline,1) as "surveillerachat", achat coloured(0,255,0) style(histogram) as "achat"
    #231550 quote
    JC_Bywan
    Moderator
    Master

    Bjr,

    J’imagine qu’il y avait eu un sujet probuilder dont l’enjeu était de créer une phase de surveillance d’achat en attendant une validation pour avoir choisi ce nom de variable intermédiaire… Tout dépend du critère de sélection souhaité, l’achat validé, ou juste la surveillance qui le précède…

    Si tu veux filtrer seulement les actions où un achat est déclenché via validation, tu peux essayer avec:

    SCREENER[achat=2]

    alors que si tu veux une sélection des actions pour lesquelles il y a phase de surveillance en cours:

    SCREENER[surveillerachat=1]

    Il faudrait aussi supprimer (ou mettre en // si on veut s’en resservir plus tard) les 2 lignes signal=0 et signal1.5 qui ne servent à aucun des 2 screeners

    Et dans le cas du SCREENER[surveillerachat=1] il faudrait supprimer (ou mettre en // si on veut s’en resservir plus tard) les 2 lignes achat=…

    #231551 quote
    Alai-n
    Participant
    Veteran

    Ok je tente les modifs et je te tiens au courant demain!

    Et en effet c’est la partie “Validation” qui m’intéresse tant que l”Invalidation” n’a pas eu lieu!

    Merci

    #231552 quote
    JC_Bywan
    Moderator
    Master

    Alors ça devrait donner:

    //Entrer en position lorsque le marché clôture au-dessus de la bougie dont le high est le plus haut.
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    once surveillerachat=0
    // Formulation de l'algorithme PriceActionSignal
    PriceActionSignal = low[3] > low[2] and low[2] < low[1] and high[3] > high[2] and high[2] < high[1] //and close[0] > high[x]
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Signal = 0
    //achat = 0
    // Représentation graphique PriceActionSignal
    if PriceActionSignal then
    hautvoulu=max(high[1], high[3])
    basvoulu=low[2]
    //Signal = 1.5
    surveillerachat=1
    endif
    
    Validation= close>hautvoulu
    Invalidation= - (close<basvoulu)
    if surveillerachat=1 and validation and not PriceActionSignal then
    //achat=2
    surveillerachat=0
    elsif surveillerachat=1 and Invalidation=-1 then
    surveillerachat=-1
    endif
    
    SCREENER[surveillerachat=1]
    #231568 quote
    Alai-n
    Participant
    Veteran

    Bonjour, bon je patauge… Une petite explication et deux images pour t’expliquer là où je veux aller. Et une ébauche du code que je n’arrive pas à faire fonctionner correctement!

    Je souhaite faire ressortir des configurations en Harami haussier et baissier(image jointe), mais comme je n’aime pas les choses simples, ils doivent être pris sur des chandeliers de 2 jours, soit une bougie = 2 séances. Comme il est impossible de screener des bougies 2 jours sur ProScreener, je passe par l’écriture du code suivant!

    Lorsque toutes les conditions sont validées, je souhaiterais que le screener me retourne une indication 2 ou -2, selon la détection haussiere ou baissiere et ce sur la close[1].

    once surveillerachat=0
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami haussier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance baissière
    TrendH = (HIGHEST[20](HIGH) - CLOSE) / AVERAGETRUERANGE[10]
    //Condition 1: Tendance baissière
    E1 = TrendH > 0
    //Condition 2: Chandeliers précédents de couleur noire
    E2 = open[4]>close[4] and open[3]>close[3] and open[4]>open[3] and close[4]>close[3]
    //Condition 3: Chandeliers en cours formant un harami haussier
    E3 = open[2]>close[3] and close[2]>close[3] and close[1]<open[4]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami baissier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance haussière
    TrendB = (CLOSE - LOWEST[20](LOW)) / AVERAGETRUERANGE[10]
    //Condition 1: Tendance baissière
    E4 = TrendB > 0
    //Condition 2: Chandeliers précédents de couleur blanche
    E5 = open[4]<close[4] and open[3]<close[3] and open[4]<open[3] and close[4]<close[3]
    //Condition 3: Chandeliers en cours formant un harami haussier
    E6 = open[2]<close[3] and close[2]<close[3] and close[1]>open[4]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Achat = 0
    Vente = 0
    
    // Détection Harami haussier
    IF e1 AND e2 AND e3 THEN
    hautvoulu    = open[4]
    basvoulu     = close[3]
    SurveillerAchat = 1
    endif
    validation   = close[1]>hautvoulu
    invalidation = -(close[1]<basvoulu)
    if SurveillerAchat = 1 and validation and not e1 AND e2 AND e3 THEN
    Achat = 2
    SurveillerAchat = 0
    elsif SurveillerAchat = 1 and Invalidation = -1 then
    SurveillerAchat = -1
    
    ENDIF
    
    //Détection Harami baissier
    IF e4 AND e5 AND e6 THEN
    basvoulu    = open[4]
    hautvoulu   = close[3]
    SurveillerVente = -1
    endif
    validation   = close[1]<basvoulu
    invalidation = +(close[1]>hautvoulu)
    if SurveillerVente = -1 and validation and not e4 AND e5 AND e6 THEN
    Vente = -2
    SurveillerVente = 0
    elsif SurveillerVente = -1 and Invalidation = 1 then
    SurveillerVente = 1
    
    ENDIF
    
    Screener[e1 AND e2 AND e3 Or e4 AND e5 AND e6 ](Achat as "Achat",Vente as "Vente")
    
    
    
    Harami-Haussier.png Harami-Haussier.png Harami-Baissier.png Harami-Baissier.png
    #231574 quote
    JC_Bywan
    Moderator
    Master

    J’ai pas vérifié si ce qui est codé correspond à ce qui est écrit pour ta simulation de harami en 2d, mais un premier truc qui interpelle en lisant le code, c’est que si on suppose que ce qui s’appelait avant priceactionsignal est maintenant représenté par le groupement “e1 and e2 and e3” (resp. e4 and e5 and e6), alors attention que “not(e1 and e2 and e3)” qu’on s’attendrait à voir en ligne 37 n’est pas équivalent à ce qui a été écrit “not e1 and e2 and e3” (où le not ne s’applique qu’à e1 quand écrit ainsi), il faut des parenthèses à l’ensemble auquel on applique le “not”. De même, en ligne 53 il faudrait remplacer:  not e4 and e5 and e6  par: not(e4 and e5 and e6). Puis de là reessayer… un bug après l’autre s’il y en a plus qu’un.

    Aussi, par discipline, même quand c’est codé de sorte que ça ne gêne pas (ce qui semble être le cas ici), il vaut mieux changer de nom de variable si on réutilise qq chose pour le sens opposé (ici validation et invalidation à la fois en 35-36 et 51-52). Histoire d’éviter qu’avec des améliorations futures, on se retrouve à faire appel à l’état de l’un des 2 avant la ligne 35, ce qui résulterait en l’utilisation de leur état en version “vente” de la fin du chandelier précédent dans le cas “achat”, et créer involontairement un bug plus tard qu’on aurait pu éviter si les noms avaient été différents dès le départ.

    #231576 quote
    Alai-n
    Participant
    Veteran

    J’ai simplifié le Harami et reformulé en suivant tes directives pour éviter les doublons, mais il n’y a aucun changement sur les résultats ! Photo jointe le Screener ne retourne que la colonne “Achat” et renvoie un 0, je ne comprends pas !!! J’ai l’impression que les bougies [3], [2], [1] sont à leurs places mais que le screener est en phase surveillance et pas en déclenchement d’un “Achat” ou d’une “Vente” Validée …once surveillerachat=0

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami haussier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance baissière
    TrendH = (HIGHEST[20](HIGH) – CLOSE) / AVERAGETRUERANGE[10]
    //
    HaramiHaussier = TrendH > 0 and open[3]>close[3] and open[2]>close[2] and open[3]>open[2] and close[3]>close[2] and open[1]<=close[1] and open[1]>close[2] and close[1]<open[3]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami baissier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance haussière
    TrendB = (CLOSE – LOWEST[20](LOW)) / AVERAGETRUERANGE[10]
    //
    HaramiBaissier = TrendB > 0 and open[3]<close[3] and open[2]<close[2] and open[3]<open[2] and close[3]<close[2] and open[1]>=close[1] and open[1]<close[2] and close[1]>open[3]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Achat = 0
    Vente = 0

    // Détection Harami haussier
    IF HaramiHaussier THEN
    hautvouluH = open[3]
    basvouluH = close[2]
    SurveillerAchat = 1
    endif
    validationH = close[1]>hautvouluH
    invalidationH = -(close[1]<basvouluH)
    if SurveillerAchat = 1 and validationH and not HaramiHaussier THEN
    Achat = 2
    SurveillerAchat = 0
    elsif SurveillerAchat = 1 and InvalidationH = -1 then
    SurveillerAchat = -1

    ENDIF

    //Détection Harami baissier
    IF HaramiBaissier THEN
    basvouluB = open[3]
    hautvouluB = close[2]
    SurveillerVente = -1
    endif
    validationB = close[1]<basvouluB
    invalidationB = +(close[1]>hautvouluB)
    if SurveillerVente = -1 and validationB and not HaramiBaissier THEN
    Vente = -2
    SurveillerVente = 0
    elsif SurveillerVente = -1 and InvalidationB = 1 then
    SurveillerVente = 1

    ENDIF

    Screener[HaramiHaussier Or HaramiBaissier ](Achat as “Achat”,Vente as “Vente”)

    Capture-decran-2024-04-16-152108.png Capture-decran-2024-04-16-152108.png
    #231580 quote
    fifi743
    Participant
    Master

    j’ai modifié le code

    si tu a achat et vente j’ai des signal achat et les vente sont a zero

    si je remplace achat et vente par signal c’est ok

     

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami haussier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance baissière
    TrendH = (HIGHEST[20](HIGH) - CLOSE) / AVERAGETRUERANGE[10]
    //
    HaramiHaussier = TrendH > 0 and open[3]>close[3] and open[2]>close[2] and open[3]>open[2] and close[3]>close[2] and open[1]<=close[1] and open[1]>close[2] and close[1]<open[3]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami baissier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance haussière
    TrendB = (CLOSE - LOWEST[20](LOW)) / AVERAGETRUERANGE[10]
    //
    HaramiBaissier = TrendB > 0 and open[3]<close[3] and open[2]<close[2] and open[3]<open[2] and close[3]<close[2] and open[1]>=close[1] and open[1]<close[2] and close[1]>open[3]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    signal=0
    
    // Détection Harami haussier
    IF HaramiHaussier THEN
    hautvouluH = open[3]
    basvouluH = close[2]
    SurveillerAchat = 1
    endif
    validationH = close[1]>hautvouluH
    invalidationH = -(close[1]<basvouluH)
    cndAchat=SurveillerAchat = 1 and validationH and not HaramiHaussier
    if SurveillerAchat = 1 and validationH and not HaramiHaussier THEN
    signal = 2
    SurveillerAchat = 0
    elsif SurveillerAchat = 1 and InvalidationH = -1 then
    SurveillerAchat = -1
    
    ENDIF
    
    //Détection Harami baissier
    IF HaramiBaissier THEN
    basvouluB = open[3]
    hautvouluB = close[2]
    SurveillerVente = -1
    endif
    validationB = close[1]<basvouluB
    invalidationB = +(close[1]>hautvouluB)
    cndvente=SurveillerVente = -1 and validationB and not HaramiBaissier
    if SurveillerVente = -1 and validationB and not HaramiBaissier THEN
    signal = -2
    SurveillerVente = 0
    elsif SurveillerVente = -1 and InvalidationB = 1 then
    SurveillerVente = 1
    
    ENDIF
    
    Screener[cndAchat Or cndvente ](signal as"signal")
    
    Alai-n thanked this post
    Capture-decran-2024-04-16-162217.png Capture-decran-2024-04-16-162217.png
    #231589 quote
    Alai-n
    Participant
    Veteran

    @fifi743 En effet cela a l’air de fonctionner correctement, je ne comprends pas tout, mais cela retourne une information qui me semble correcte. A voir sur plusieurs séances, si il ne resterait pas un bug quelque part.

    Je reposte ici le code complet, en ayant rajouté la première ligne. Avec quelques explications, si jamais cela intéressait d’autres membres.

    J’ai intitulé ce code Harami en trois temps, mais en définitive il s’agit d’identifier une accélération du cours de bourse après la sortie d’une phase de congestion! Les bougies [3] et [2] marquent une impulsion franche du cours, puis la bougie[1] une indication de congestion au sein de la gamme de prix donné par open[3] jusqu’à la close[2], la clôture d’une bougie en dehors de cette gamme de prix(sortie de range court terme) peut donner une indication de l’évolution des cours à venir, voir définir une zone de Throwback ou Pullback pour se repositionner dans un futur proche! Cette approche ne se suffit pas à elle-même et doit être filtrée par des outils complémentaires…

    @ JC_Bywan @fifi743 merci à tous les deux pour votre aide à la résolution de ma problématique…

    once surveillerachat=0
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami haussier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance baissière
    TrendH = (HIGHEST[20](HIGH) - CLOSE) / AVERAGETRUERANGE[10]
    //
    HaramiHaussier = TrendH > 0 and open[3]>close[3] and open[2]>close[2] and open[3]>open[2] and close[3]>close[2] and open[1]<=close[1] and open[1]>close[2] and close[1]<open[3]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Harami baissier
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //Détermine la force de la tendance haussière
    TrendB = (CLOSE - LOWEST[20](LOW)) / AVERAGETRUERANGE[10]
    //
    HaramiBaissier = TrendB > 0 and open[3]<close[3] and open[2]<close[2] and open[3]<open[2] and close[3]<close[2] and open[1]>=close[1] and open[1]<close[2] and close[1]>open[3]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    signal=0
    
    // Détection Harami haussier
    IF HaramiHaussier THEN
    hautvouluH = open[3]
    basvouluH = close[2]
    SurveillerAchat = 1
    endif
    validationH = close[1]>hautvouluH
    invalidationH = -(close[1]<basvouluH)
    cndAchat=SurveillerAchat = 1 and validationH and not HaramiHaussier
    if SurveillerAchat = 1 and validationH and not HaramiHaussier THEN
    signal = 2
    SurveillerAchat = 0
    elsif SurveillerAchat = 1 and InvalidationH = -1 then
    SurveillerAchat = -1
    
    ENDIF
    
    //Détection Harami baissier
    IF HaramiBaissier THEN
    basvouluB = open[3]
    hautvouluB = close[2]
    SurveillerVente = -1
    endif
    validationB = close[1]<basvouluB
    invalidationB = +(close[1]>hautvouluB)
    cndvente=SurveillerVente = -1 and validationB and not HaramiBaissier
    if SurveillerVente = -1 and validationB and not HaramiBaissier THEN
    signal = -2
    SurveillerVente = 0
    elsif SurveillerVente = -1 and InvalidationB = 1 then
    SurveillerVente = 1
    
    ENDIF
    
    Screener[cndAchat Or cndvente ](signal as"signal")
    fifi743 thanked this post
Viewing 9 posts - 1 through 9 (of 9 total)
  • You must be logged in to reply to this topic.

Indicateur en Screener


ProScreener : Scanners de Marché & Détection

New Reply
Author
author-avatar
Alai-n @alai-n Participant
Summary

This topic contains 8 replies,
has 3 voices, and was last updated by Alai-n
1 year, 10 months ago.

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