ProRealCode - Trading & Coding with ProRealTime™
Bonjour,
Cela fait plusieurs mois que je me suis lancée dans la création d’un nouveau screener assez précis et j’arrive enfin à un résultat satisfaisant à ceci près que régulièrement plusieurs titres ne sont pas détectés alors qu’ils correspondent en tout points à mes critères et je n’arrive pas à comprendre pourquoi. Est-ce moi qui ne m’en rends pas compte à force de revoir mon code en boucle ou y a t’il réellement un problème ?
Ci-joint un exemple de titres qui selon moi devraient être détectés mais ne l’ont pas été ainsi que le code en question.
Merci d’avance pour votre aide
Camille
timeframe(1 hour)
c1=close*volume > 50000
Ht = DHigh(1)
Bs = DLow(1)
C = DClose(1)
Pivot = (Ht + Bs + C) / 3
timeframe(daily)
Ht2 = DHigh(1)
Bs2 = DLow(1)
C2 = DClose(1)
Pivot2 = (Ht2 + Bs2 + C2) / 3
timeframe(2 hours)
Ht3 = DHigh(1)
Bs3 = DLow(1)
C3 = DClose(1)
Pivot3 = (Ht3 + Bs3 + C3) / 3
timeframe(5 minutes)
Tenkansen1 = (highest[9](high)+lowest[9](low))/2
Kijunsen1 = (highest[26](high)+lowest[26](low))/2
Stoch = Stochastic[34,3]
VariationVol = Volume / indic
VariationVol2 = (Volume + Volume[1] + Volume[2]) / indic2
c2 = (VariationVol or VariationVol2) > 1
c3= close > pivot or close > pivot2 or close > pivot3
c4 = cd5 or cd15
cd5 =DIplus[14] > DIminus[14]
cv= (((highest[3](high)-lowest[3](low))/lowest[3](low)))*100
c6=cv>1 and cv<5
cond=cv
cr= c4 and c10 and c11
c7 = close >lowest[3](low)
c8 = rsi[21]>rsi[21][1]
c9 = crisk1 or crisk2
crisk1= ((close-Kijunsen1)/Kijunsen1)<0.03
c10= crsi1 or crsi2
crsi1= rsi[21] crosses over 50 or rsi[21][1] crosses over 50 or rsi[21][2] crosses over 50
c11 = cst5 or cst15 or cst1h
cst5= Stoch > Average[3](Stoch) or Stoch >80
c12= cc5 or cc15// or cc1h
cc5= close crosses over kijunsen1 or close crosses over tenkansen1 or close crosses over kijunsen1[1] or close crosses over tenkansen1[1]
timeframe(15 minutes)
Stoch2 = Stochastic[34,3]
indic = Average[250](Volume)/3
indic2 = Average[250](Volume)
Kijunsen2 = (highest[26](high)+lowest[26](low))/2
Tenkansen2 = (highest[9](high)+lowest[9](low))/2
cst15= Stoch2 > Average[3](Stoch2) or Stoch2 >80
crsi2= rsi[21]>50
crisk2= ((close-Kijunsen2)/Kijunsen2)<0.03
cd15 = DIplus[14] > DIminus[14]
cc15= close crosses over kijunsen2 or close crosses over tenkansen2 or close crosses over kijunsen2[1] or close crosses over tenkansen2[1]
timeframe(1 hour)
Stoch3 = Stochastic[34,3]
//Tenkansen3 = (highest[9](high)+lowest[9](low))/2
//Kijunsen3 = (highest[26](high)+lowest[26](low))/2
cst1h= Stoch3 > Average[3](Stoch3) or Stoch3 >80
//cc1h= close crosses over kijunsen3 or close crosses over tenkansen3 or close crosses over kijunsen3[1] or close crosses over tenkansen3[1]
IF c1 and c2 and c6 and c7 and c8 and c9 and c11 and c12 and cr THEN
SCREENER [cond] SORT BY cond AS "Var"
endif
J’ai vague souvenir d’utilisateurs qui avaient fait face à un bug dans certaines conditions avec les commandes de type Dhigh, Dlow etc… Je vérifie avec Nicolas s’il y a eu des nouvelles là-dessus (bug confirmé ou pas, résolution en chemin ou effectuée…)
Désolé, ce n’était pas une bonne piste, il y avait bien eu un problème, mais Nicolas dit que ça a été résolu depuis.
Je pense avoir compris en partie pourquoi la détection ne fonctionne pas sur certains titres.
J’ai oublier le [1] après les 2 derniers close dans mes conditions :
Comme il y a beaucoup de conditions, quand on tombe sur un titre qu’on estime valable selon les conditions du screener mais qui ne ressort pas, pour mieux voir il faudrait transformer le screener en indicateur, avec une ligne return qui inclut toutes les conditions, appliquer cet indicateur au titre et visualiser laquelle des conditions manque, afin de soit voir pourquoi le titre effectivement ne correspond pas, soit trouver un bug dans le code si une des conditions est manquante par erreur:
return cond as "cond", c1 as "c1", c2 as "c2", c6 as "c6", c7 as "c7", c8 as "c8", c9 as "c9", c11 as "c11", c12 as "c12", cr as "cr"
Rebonjour,
Merci pour votre conseil, cela a été efficace et m’a permis de voir quelle(s) conditions posaient problème.
Apparemment dans le code ci dessous, c12 et c13 posent régulièrement problème en renvoyant 0 alors qu’ils devraient être positifs.
c12 est des fois valide et des fois non et continue à posé problème sans que je comprenne pourquoi même après avoir essayer de le modifier comme vous pourrez le voir dans le code qui suit.
Mais c’est réellement c13 qui pose problème car il est réellement tout le temps à 0 même après avoir tenter de le modifier en mettant toutes les composantes de la condition sur le même timeframe cela n’a absolument rien changer.
timeframe(1 hour)
c1=close*volume > 50000
Ht = DHigh(1)
Bs = DLow(1)
C = DClose(1)
Pivot = (Ht + Bs + C) / 3
timeframe(daily)
Ht2 = DHigh(1)
Bs2 = DLow(1)
C2 = DClose(1)
Pivot2 = (Ht2 + Bs2 + C2) / 3
timeframe(2 hours)
Ht3 = DHigh(1)
Bs3 = DLow(1)
C3 = DClose(1)
Pivot3 = (Ht3 + Bs3 + C3) / 3
timeframe(5 minutes)
Tenkansen1 = (highest[9](high)+lowest[9](low))/2
Kijunsen1 = (highest[26](high)+lowest[26](low))/2
Stoch = Stochastic[34,3]
VariationVol = Volume / indic
VariationVol2 = (Volume + Volume[1] + Volume[2]) / indic2
c13 = (VariationVol or VariationVol2) > 1
c14= close > pivot or close > pivot2 or close > pivot3
c4 = cd5 or cd15
cd5 =DIplus[14] > DIminus[14]
cv= (((highest[3](high)-lowest[3](low))/lowest[3](low)))*100
c6=cv>1 and cv<5
cond=cv
cr= c4 and c10 and c11
c7 = close >lowest[3](low)
c8 = rsi[21]>rsi[21][1]
c9 = crisk1 or crisk2
crisk1= ((close-Kijunsen1)/Kijunsen1)<0.03
c10= crsi1 or crsi2
crsi1= rsi[21] crosses over 50 or rsi[21][1] crosses over 50 or rsi[21][2] crosses over 50
c11 = cst5 or cst15 or cst1h
cst5= Stoch > Average[3](Stoch) or Stoch >80
c12= cc5 or cc15// or cc1h
cc5= close crosses over kijunsen1 or close crosses over tenkansen1 or close[1] crosses over kijunsen1[1] or close[1] crosses over tenkansen1[1] or kijunsen1 crosses over close or tenkansen1 crosses over close or kijunsen1[1] crosses over close or tenkansen1[1] crosses over close
timeframe(15 minutes)
Stoch2 = Stochastic[34,3]
Kijunsen2 = (highest[26](high)+lowest[26](low))/2
Tenkansen2 = (highest[9](high)+lowest[9](low))/2
indic = Average[250](Volume)/3
indic2 = Average[250](Volume)
cst15= Stoch2 > Average[3](Stoch2) or Stoch2 >80
crsi2= rsi[21]>50
crisk2= ((close-Kijunsen2)/Kijunsen2)<0.03
cd15 = DIplus[14] > DIminus[14]
cc15= close crosses over kijunsen2 or close crosses over tenkansen2 or close[1] crosses over kijunsen2[1] or close[1] crosses over tenkansen2[1] or kijunsen2 crosses over close or tenkansen2 crosses over close or kijunsen2[1] crosses over close or tenkansen2[1] crosses over close
timeframe(1 hour)
Stoch3 = Stochastic[34,3]
//Tenkansen3 = (highest[9](high)+lowest[9](low))/2
//Kijunsen3 = (highest[26](high)+lowest[26](low))/2
cst1h= Stoch3 > Average[3](Stoch3) or Stoch3 >80
//cc1h= close crosses over kijunsen3 or close crosses over tenkansen3 or close crosses over kijunsen3[1] or close crosses over tenkansen3[1]
return cond as "cond", c1 as "c1", c13 as "c13", c6 as "c6", c7 as "c7", c8 as "c8", c9 as "c9", c11 as "c11", c12 as "c12", cr as "cr", c14 as "c14"
Bonjour effectivement les noms c2 et c3 étaient déjà pris en lignes 14 et 22, et c’est bien de les avoir rebaptisées (c13 et c14)
Maintenant, en ce qui concerne le contenu de c13, écrire (A or B) est une syntaxe réservées aux conditions, pas aux valeurs numériques, du coup A et B (c’est à dire dans votre code VariationVol et VariationVol2) sont considérées comme conditions égales à 0 ou 1 au lieu d’avoir leurs valeurs numériques, et 1 n’étant pas strictement supérieur à 1, cela met forcément c13=0 dans tous les cas.
Il aurait fallu écrire: A>1 or B>1 pour que A et B soient considérées pour leurs valeurs numériques sans être transformées en conditions, et pouvoir les comparer à 1. Autrement dit:
c13 = (VariationVol > 1) or (VariationVol2 > 1)
Apparemment cela semble effectivement avoir résolu le problème sur c13 mais j’ai du également mettre les conditions indic et indic 2 sur le timeframe 5 minutes car ces conditions buguaient des fois sur certains titres sur le timeframe 15 minutes.
Merci pour cette solution, cependant il reste c12 qui pose problème car non validé alors que les prix croissent pourtant la tenkan à la hausse ( ou inversement ) comme dans l’exemple ci-joint.
Avez-vous une idée de ce qui peut poser ce problème ?
Je ne vois pas très bien la bougie qui précède, mais j’ai l’impression que sa close était aussi au-dessus de la tenkan? Auquel cas le cross over n’était pas fait sur ces 2 bougies là, mais plusieurs autres avant. Si la close de la précédente était bien déjà au-delà de la tenkan, bien tenir compte que “close cross over” c’est une syntaxe pour faire ressortir la bougie où la close a basculé de côté par rapport à ce qui suit le terme cross over, mais si ça c’est passé 2 ou 3 bougies avant, ou si depuis la close précédente au-dessus, l’intérieur de la bougie en cours traverse en bas avec low mais remonte au-dessus avec close, alors le cross over n’est pas vrai pour la close.
Effectivement autant pour moi la bougie précédente était bien déjà au-dessus de la tenkan…
Mais dans ce cas est-il possible d’écrire une condition afin de détecter un rebond sur la kijun ou la tenkan svp ?
La définition du rebond de l’un ne sera pas forcément valable pour autrui, tout dépend de combien en arrière on regarde pour définir si on vient d’assez loin, et de combien après on veut attendre pour confirmer l’éloignement, ou si plus pressé on veut juste quelque chose qui se passe sur la bougie en cours par rapport à la précedente quitte à ne détecter qu’une proximité plutôt qu’un rebond… Au plus pressé on pourrait faire la combinaison close[1]>tenkan and low<=tenkan and close>tenkan (en plus du cross over, pas à la place de)
Super cela fonctionne effectivement à merveille.
Encore merci pour votre aide et en vous souhaitant une bonne fin de journée à vous.
Camille
Bonjour,
Il semblerais que la condition c14 du screener pose régulièrement problème, je soupçonne un bug car les résultats sont pour le moins étrange.
Quand je regarde avec l’indicateur la condition est noté une première fois à 0 puis quand je regarde à nouveau le titre quelques secondes après la condition apparait comme étant validée puis de nouveau invalide.
Ci-joint un exemple de titre ou je rencontre le problème.
Cordialement
Camille
Bonjour, je vois que ta c14 est liée à des calculs de pivots partant des variables ht, bs, c (…2 …3) en mtf. Dans le même esprit de debugging qui a mené à visualiser les conditions, il te faut probablement visualiser en indic séparé tes 3 variables pivots, pour trouver si un des 3 pivots change d’abord, puis à laquelle des ht, bs, c variables c’est dû (puis de là, si par exemple c’est dû à celles du plus grand timeframe, vérifier la quantité d’historique dispo)
timeframe(1 hour)
Ht = DHigh(1)
Bs = DLow(1)
C = DClose(1)
Pivot = (Ht + Bs + C) / 3
timeframe(daily)
Ht2 = DHigh(1)
Bs2 = DLow(1)
C2 = DClose(1)
Pivot2 = (Ht2 + Bs2 + C2) / 3
timeframe(2 hours)
Ht3 = DHigh(1)
Bs3 = DLow(1)
C3 = DClose(1)
Pivot3 = (Ht3 + Bs3 + C3) / 3
timeframe(5 minutes)
c14= close > pivot or close > pivot2 or close > pivot3
return pivot, pivot2, pivot3
// return Ht, Bs, C, Ht2, Bs2, C2, Ht3, Bs3, C3
J’ai résolu le problème pour la condition c14 mais les conditions c10, c11 et c 12 posent également problème.
Sur les 2 exemples ci-dessous sur l’un les conditions c10 et c12 renvoient 0 alors qu’elles sont visiblement valides sur le 5 minutes tandis que c11 est comptée comme étant valide alors qu’elle ne l’est pas et sur l’autre la condition c11 est notée comme étant invalide alors qu’elle l’est … C’est vraiment le monde à l’envers, est-ce que mon code est faux à ce point ? Il me semble pourtant correcte.
timeframe(1 hour)
c1=close*volume > 50000
Pivot = (High[1] + Low[1] + Close[1] + Open[0])/4
timeframe(4 hours)
Pivot2 = (High[1] + Low[1] + Close[1] + Open[0])/4
timeframe(2 hours)
Pivot3 = (High[1] + Low[1] + Close[1] + Open[0])/4
timeframe(5 minutes)
Tenkansen1 = (highest[9](high)+lowest[9](low))/2
Kijunsen1 = (highest[26](high)+lowest[26](low))/2
Stoch = Stochastic[34,3](close)
indic = Average[250](Volume)
indic2 = Average[250](Volume)*3
VariationVol = Volume / indic
VariationVol2 = (Volume + Volume[1] + Volume[2]) / indic2
c13 = (VariationVol > 1) or (VariationVol2 > 1)
c14= close > pivot or close > pivot2 or close > pivot3
c4 = cd5 or cd15
cd5 =DIplus[14] > DIminus[14]
cv= (((highest[3](high)-lowest[3](low))/lowest[3](low)))*100
c6=cv>1 and cv<5
cond=cv
c7 = close >lowest[3](low)
c8 = rsi[21]>rsi[21][1]
c9 = crisk1 or crisk2
crisk1= ((close-Kijunsen1)/Kijunsen1)<0.03
c10= crsi1 or crsi2
crsi1= rsi[21] crosses over 50 or rsi[21][1] crosses over 50 or rsi[21][2] crosses over 50
c11 = cst5 or cst15 or cst1h
cst5= Stoch > Average[3](Stoch) or Stoch >80
c12= cc5 or cc15// or cc1h
cc5= close crosses over kijunsen1 or close crosses over tenkansen1 or close[1] crosses over kijunsen1[1] or close[1] crosses over tenkansen1[1] or kijunsen1 crosses over close or tenkansen1 crosses over close or kijunsen1[1] crosses over close or tenkansen1[1] crosses over close or (close[1]>kijunsen1 and low<=kijunsen1 and close>kijunsen1) or ( close[1]>tenkansen1 and low<=tenkansen1 and close>tenkansen1 ) or (close[2]>kijunsen1[1] and low[1]<=kijunsen1[1] and close[1]>kijunsen1[1]) or ( close[2]>tenkansen1[1] and low[1]<=tenkansen1[1] and close[1]>tenkansen1[1])
timeframe(15 minutes)
Stoch2 = Stochastic[34,3](close)
Kijunsen2 = (highest[26](high)+lowest[26](low))/2
Tenkansen2 = (highest[9](high)+lowest[9](low))/2
cst15= Stoch2 > Average[3](Stoch2) or Stoch2 >80
crsi2= rsi[21]>50
crisk2= ((close-Kijunsen2)/Kijunsen2)<0.03
cd15 = DIplus[14] > DIminus[14]
cc15= close crosses over kijunsen2 or close crosses over tenkansen2 or close[1] crosses over kijunsen2[1] or close[1] crosses over tenkansen2[1] or kijunsen2 crosses over close or tenkansen2 crosses over close or kijunsen2[1] crosses over close or tenkansen2[1] crosses over close or (close[1]>kijunsen2 and low<=kijunsen2 and close>kijunsen2) or ( close[1]>tenkansen2 and low<=tenkansen2 and close>tenkansen2 ) or (close[2]>kijunsen2[1] and low[1]<=kijunsen2[1] and close[1]>kijunsen2[1]) or ( close[2]>tenkansen2[1] and low[1]<=tenkansen2[1] and close[1]>tenkansen2[1])
timeframe(1 hour)
Stoch3 = Stochastic[34,3](close)
//Tenkansen3 = (highest[9](high)+lowest[9](low))/2
//Kijunsen3 = (highest[26](high)+lowest[26](low))/2
cst1h= Stoch3 > Average[3](Stoch3) or Stoch3 >80
//cc1h= close crosses over kijunsen3 or close crosses over tenkansen3 or close crosses over kijunsen3[1] or close crosses over tenkansen3[1]
return cond as "cond", c1 as "c1",c4 as "c4", c13 as "c13", c6 as "c6", c7 as "c7", c8 as "c8", c9 as "c9",c10 as "c10", c11 as "c11", c12 as "c12", c14 as "c14"
screener indicateurs multiples
This topic contains 18 replies,
has 2 voices, and was last updated by CamilleRour
4 years, 8 months ago.
| Forum: | ProScreener : Scanners de Marché & Détection |
| Language: | French |
| Started: | 04/14/2021 |
| Status: | Active |
| Attachments: | 7 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.