Bonjour Nicolas, bonjour à tous,
J’aimerais que mon screener me prévienne lorsqu’un segment est tracé.
J’ai ma base ci-jointe qui fonctionne très bien comme indicateur mais je n’arrive pas à créer le screener qui en ressort.
Peux-tu m’aider s’il-te-plait ?
IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
extremum2=MM1h[1]
extremum1=highest[LookbackMM1h](MM1h)
preciomax2=close[1]
preciomax=Highest[LookbackMM1h](close)
IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
for i=1 to LookbackMM1h
if MM1h[i]=extremum1 then
zz=i
drawsegment (barindex[1], MM1h[1], barindex[zz], MM1h[zz]) coloured(0,0,0)
ENDIF
next
ENDIF
ENDIF
Merci beaucoup !
Il suffit de flagger dans une variable le barindex quand un nouveau segment est tracé, puis pour screener cette condition, il faut simplement tester si cette variable est différente de la période précédente.
Merci Nicolas.
J’ai fait comme suit mais j’ai l’impression que mon screener affiche beaucoup trop de résultats
IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
extremum2=MM1h[1]
extremum1=highest[LookbackMM1h](MM1h)
preciomax2=close[1]
preciomax=Highest[LookbackMM1h](close)
IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
for i=1 to LookbackMM1h
if MM1h[i]=extremum1 then
zz=i
segment1 = barindex[1]
segment2 = MM1h[1]
segment3 = barindex[zz]
segment4 = MM1h[zz]
ENDIF
next
ENDIF
ENDIF
segment = segment1 AND segment2 AND segment3 AND segment4
IF segment <> segment[1] THEN
toutbon = 0
else
toutbon = 1
ENDIF
SCREENER [toutbon]
!
Qu’en penses-tu ?
Qu’est ce que donne la variable “toutbon” dans un indicateur ? Histoire de mener le debuggage jusqu’au bout.
C’est une excellente idée d’avoir pensé à le retourner en indicateur ! 🙂
Ce que j’ai écrit un peu plus haut fonctionne très bien, grâce à toi.
Voici ce que cela donne en image :
Bonjour Nicolas,
Le screener que j’ai créé ci-dessus fonctionne très bien mais il affiche tous les instruments dont il y a eu un segment de tracé, il y a 5 minutes, 15 minutes ou 1 heure or je voudrais qu’il affiche seulement les instruments dont le segment vient d’être tracé à l’instant T.
Que faut-il renseigner dans mon code ?
Merci pour ton aide.
DJ
Ta variable ‘toutbon’ reste à l’état TRUE, il faut donc la remettre à FALSE (soit 0) à chaque nouvelle barre lors de la lecture du code, ainsi on la testera vrai que sur la dernière. Donc ajouter
toutbon=0
en tout début du code par exemple (non testé, car je n’ai plus la logique en tête de ton screener et je ne pense pas que l’on est la dernière version dans le sujet ?).
Merci Nicolas, je vais le tester dans ce sens et reviendrai vers toi pour te dire ce qu’il en est.
Bonjour Nicolas,
Ca ne fonctionne pas, le screener n’a pas détecté le segment tracé comme dans mon indicateur.
C’est un screener qui détecte les divergences de mon indicateur. Voici le code comme tu me l’as suggéré plus haut :
toutbon = 0
IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
extremum2=MM1h[1]
extremum1=highest[LookbackMM1h](MM1h)
preciomax2=close[1]
preciomax=Highest[LookbackMM1h](close)
IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
for i=1 to LookbackMM1h
if MM1h[i]=extremum1 then
zz=i
segment1 = barindex[1]
segment2 = MM1h[1]
segment3 = barindex[zz]
segment4 = MM1h[zz]
ENDIF
next
ENDIF
ENDIF
segment = segment1 AND segment2 AND segment3 AND segment4
IF segment <> segment[1] THEN
toutbon = 0
else
toutbon = 1
ENDIF
SCREENER [toutbon]
Qu’y a-t-il à corriger ? Merci beaucoup.
Alors, je n’ai pas les codes complets pour tester, donc essaie plutôt de cette façon pour voir :
IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
extremum2=MM1h[1]
extremum1=highest[LookbackMM1h](MM1h)
preciomax2=close[1]
preciomax=Highest[LookbackMM1h](close)
IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
for i=1 to LookbackMM1h
if MM1h[i]=extremum1 then
zz=i
segment1 = barindex[1]
segment2 = MM1h[1]
segment3 = barindex[zz]
segment4 = MM1h[zz]
ENDIF
next
ENDIF
ENDIF
segment = segment1 AND segment2 AND segment3 AND segment4
IF segment <> segment[1] THEN
toutbon = 1
else
toutbon = 0
ENDIF
SCREENER [toutbon]
Tu as raison, voici le code complet :
Je l’applique sur un timeframe de 5 minutes.
TF = 5
LookbackMM1h = 720
RGL1h = Linearregression[720/TF](close)
RGLJour = Linearregression[1440/TF](close)
A = (RGL1h - RGLJour)
MM1h = (RGL1h + A)
///divergence baissière
IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
extremum2=MM1h[1]
extremum1=highest[LookbackMM1h](MM1h)
preciomax2=close[1]
preciomax=Highest[LookbackMM1h](close)
IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
for i=1 to LookbackMM1h
if MM1h[i]=extremum1 then
zz=i
segment1 = barindex[1]
segment2 = MM1h[1]
segment3 = barindex[zz]
segment4 = MM1h[zz]
ENDIF
next
ENDIF
ENDIF
segment = segment1 AND segment2 AND segment3 AND segment4
IF segment <> segment[1] THEN
Vente = 0
else
Vente = 1
ENDIF
///divergence haussière
IF (MM1h[1]<MM1h AND MM1h[1]<MM1h[2]) THEN
extremum22d=MM1h[1]
extremum11d=lowest[LookbackMM1h](MM1h)
preciomin2d=close[1]
preciomind=lowest[LookbackMM1h](close)
IF(extremum22d>extremum11d AND preciomin2d<preciomind[1]) THEN
for i2d=1 to LookbackMM1h
if MM1h[i2d]=extremum11d[1] then
zz2d=i2d
segment5 = barindex[1]
segment6 = MM1h[1]
segment7 = barindex[zz2d]
segment8 = MM1h[zz2d]
ENDIF
next
ENDIF
ENDIF
segmentbis = segment5 AND segment6 AND segment7 AND segment8
IF segmentbis <> segmentbis[1] THEN
Achat = 0
else
Achat = 1
ENDIF
SCREENER [Vente OR Achat]
Y a-t-il une erreur d’écriture ?
J’inverserai les conditions booléennes achat et vente pour nous donner le moment où la valeur des coordonnées de tes divergences changent et non pas l’inverse, car tu sembles remettre à 0 leurs tests uniquement quand une nouvelle divergence arrivent ?! (ou alors je n’ai pas compris la logique derrière l’indicateur).
TF = 5
LookbackMM1h = 720
RGL1h = Linearregression[720/TF](close)
RGLJour = Linearregression[1440/TF](close)
A = (RGL1h - RGLJour)
MM1h = (RGL1h + A)
///divergence baissière
IF (MM1h[1]>MM1h AND MM1h[1]>MM1h[2]) THEN
extremum2=MM1h[1]
extremum1=highest[LookbackMM1h](MM1h)
preciomax2=close[1]
preciomax=Highest[LookbackMM1h](close)
IF(extremum2<extremum1 AND preciomax2>preciomax[1]) THEN
for i=1 to LookbackMM1h
if MM1h[i]=extremum1 then
zz=i
segment1 = barindex[1]
segment2 = MM1h[1]
segment3 = barindex[zz]
segment4 = MM1h[zz]
ENDIF
next
ENDIF
ENDIF
segment = segment1 AND segment2 AND segment3 AND segment4
IF segment <> segment[1] THEN
Vente = 1
else
Vente = 0
ENDIF
///divergence haussière
IF (MM1h[1]<MM1h AND MM1h[1]<MM1h[2]) THEN
extremum22d=MM1h[1]
extremum11d=lowest[LookbackMM1h](MM1h)
preciomin2d=close[1]
preciomind=lowest[LookbackMM1h](close)
IF(extremum22d>extremum11d AND preciomin2d<preciomind[1]) THEN
for i2d=1 to LookbackMM1h
if MM1h[i2d]=extremum11d[1] then
zz2d=i2d
segment5 = barindex[1]
segment6 = MM1h[1]
segment7 = barindex[zz2d]
segment8 = MM1h[zz2d]
ENDIF
next
ENDIF
ENDIF
segmentbis = segment5 AND segment6 AND segment7 AND segment8
IF segmentbis <> segmentbis[1] THEN
Achat = 1
else
Achat = 0
ENDIF
SCREENER [Vente OR Achat]
Tu as bien compris l’indicateur. 😉
Je vais inverser les conditions booléennes des variables comme tu me le suggères et voir s’il se passe quelque chose.
Je te tiens au courant de la suite des évènements.
Merci en tout cas !