ProRealCode - Trading & Coding with ProRealTime™
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"
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=…
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
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]
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")
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.
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”)
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")
@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")
Indicateur en Screener
This topic contains 8 replies,
has 3 voices, and was last updated by Alai-n
1 year, 10 months ago.
| Forum: | ProScreener : Scanners de Marché & Détection |
| Language: | French |
| Started: | 04/15/2024 |
| Status: | Active |
| Attachments: | 4 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.