Indicateur en Screener
Forums › ProRealTime forum Français › Support ProScreener › Indicateur en Screener
- This topic has 8 replies, 3 voices, and was last updated 8 months ago by Alai-n.
-
-
04/15/2024 at 4:36 PM #231549
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.
1234567891011121314151617181920212223242526//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 PriceActionSignalPriceActionSignal = 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 = 0achat = 0// Représentation graphique PriceActionSignalif PriceActionSignal thenhautvoulu=max(high[1], high[3])basvoulu=low[2]Signal = 1.5surveillerachat=1endifValidation= close>hautvouluInvalidation= - (close<basvoulu)if surveillerachat=1 and validation and not PriceActionSignal thenachat=2surveillerachat=0elsif surveillerachat=1 and Invalidation=-1 thensurveillerachat=-1endifReturn Signal as "Signal", surveillerachat style(dottedline,1) as "surveillerachat", achat coloured(0,255,0) style(histogram) as "achat"04/15/2024 at 5:16 PM #231550Bjr,
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=…
04/15/2024 at 5:45 PM #23155104/15/2024 at 5:51 PM #231552Alors ça devrait donner:
1234567891011121314151617181920212223242526//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 PriceActionSignalPriceActionSignal = 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 PriceActionSignalif PriceActionSignal thenhautvoulu=max(high[1], high[3])basvoulu=low[2]//Signal = 1.5surveillerachat=1endifValidation= close>hautvouluInvalidation= - (close<basvoulu)if surveillerachat=1 and validation and not PriceActionSignal then//achat=2surveillerachat=0elsif surveillerachat=1 and Invalidation=-1 thensurveillerachat=-1endifSCREENER[surveillerachat=1]04/16/2024 at 10:45 AM #231568Bonjour, 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].
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061once surveillerachat=0//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Harami haussier//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Détermine la force de la tendance baissièreTrendH = (HIGHEST[20](HIGH) - CLOSE) / AVERAGETRUERANGE[10]//Condition 1: Tendance baissièreE1 = TrendH > 0//Condition 2: Chandeliers précédents de couleur noireE2 = 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 haussierE3 = open[2]>close[3] and close[2]>close[3] and close[1]<open[4]//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Harami baissier//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Détermine la force de la tendance haussièreTrendB = (CLOSE - LOWEST[20](LOW)) / AVERAGETRUERANGE[10]//Condition 1: Tendance baissièreE4 = TrendB > 0//Condition 2: Chandeliers précédents de couleur blancheE5 = 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 haussierE6 = open[2]<close[3] and close[2]<close[3] and close[1]>open[4]////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Achat = 0Vente = 0// Détection Harami haussierIF e1 AND e2 AND e3 THENhautvoulu = open[4]basvoulu = close[3]SurveillerAchat = 1endifvalidation = close[1]>hautvouluinvalidation = -(close[1]<basvoulu)if SurveillerAchat = 1 and validation and not e1 AND e2 AND e3 THENAchat = 2SurveillerAchat = 0elsif SurveillerAchat = 1 and Invalidation = -1 thenSurveillerAchat = -1ENDIF//Détection Harami baissierIF e4 AND e5 AND e6 THENbasvoulu = open[4]hautvoulu = close[3]SurveillerVente = -1endifvalidation = close[1]<basvouluinvalidation = +(close[1]>hautvoulu)if SurveillerVente = -1 and validation and not e4 AND e5 AND e6 THENVente = -2SurveillerVente = 0elsif SurveillerVente = -1 and Invalidation = 1 thenSurveillerVente = 1ENDIFScreener[e1 AND e2 AND e3 Or e4 AND e5 AND e6 ](Achat as "Achat",Vente as "Vente")04/16/2024 at 12:48 PM #231574J’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.
04/16/2024 at 2:21 PM #231576J’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 = -1ENDIF
//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 = 1ENDIF
Screener[HaramiHaussier Or HaramiBaissier ](Achat as “Achat”,Vente as “Vente”)
04/16/2024 at 3:24 PM #231580j’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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Harami haussier//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Détermine la force de la tendance baissièreTrendH = (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èreTrendB = (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 haussierIF HaramiHaussier THENhautvouluH = open[3]basvouluH = close[2]SurveillerAchat = 1endifvalidationH = close[1]>hautvouluHinvalidationH = -(close[1]<basvouluH)cndAchat=SurveillerAchat = 1 and validationH and not HaramiHaussierif SurveillerAchat = 1 and validationH and not HaramiHaussier THENsignal = 2SurveillerAchat = 0elsif SurveillerAchat = 1 and InvalidationH = -1 thenSurveillerAchat = -1ENDIF//Détection Harami baissierIF HaramiBaissier THENbasvouluB = open[3]hautvouluB = close[2]SurveillerVente = -1endifvalidationB = close[1]<basvouluBinvalidationB = +(close[1]>hautvouluB)cndvente=SurveillerVente = -1 and validationB and not HaramiBaissierif SurveillerVente = -1 and validationB and not HaramiBaissier THENsignal = -2SurveillerVente = 0elsif SurveillerVente = -1 and InvalidationB = 1 thenSurveillerVente = 1ENDIFScreener[cndAchat Or cndvente ](signal as"signal")1 user thanked author for this post.
04/16/2024 at 4:37 PM #231589@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…
Harami en Trois Temps(Screener)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253once surveillerachat=0//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Harami haussier//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Détermine la force de la tendance baissièreTrendH = (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èreTrendB = (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 haussierIF HaramiHaussier THENhautvouluH = open[3]basvouluH = close[2]SurveillerAchat = 1endifvalidationH = close[1]>hautvouluHinvalidationH = -(close[1]<basvouluH)cndAchat=SurveillerAchat = 1 and validationH and not HaramiHaussierif SurveillerAchat = 1 and validationH and not HaramiHaussier THENsignal = 2SurveillerAchat = 0elsif SurveillerAchat = 1 and InvalidationH = -1 thenSurveillerAchat = -1ENDIF//Détection Harami baissierIF HaramiBaissier THENbasvouluB = open[3]hautvouluB = close[2]SurveillerVente = -1endifvalidationB = close[1]<basvouluBinvalidationB = +(close[1]>hautvouluB)cndvente=SurveillerVente = -1 and validationB and not HaramiBaissierif SurveillerVente = -1 and validationB and not HaramiBaissier THENsignal = -2SurveillerVente = 0elsif SurveillerVente = -1 and InvalidationB = 1 thenSurveillerVente = 1ENDIFScreener[cndAchat Or cndvente ](signal as"signal")1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on