Problème FOR NEXT et DRAW
Forums › ProRealTime forum Français › Support ProBuilder › Problème FOR NEXT et DRAW
- This topic has 9 replies, 2 voices, and was last updated 11 months ago by Bernard13.
-
-
11/07/2023 at 11:38 AM #223300
Bonjour, ce site est absolument génial, si bien que j’ai eu envie de me jeter dans la programmation. Je me lance dans la programmation avec des tableaux, je m’entraine et là je bloque. Mon indicateur doit afficher un rectangle vert ou rouge en fonction d’une condition dans une boucle FOR NEXT. Lorsque je le lance il s’exécute parfaitement et les rectangle sont tracés, mais si je veux qu’il s’actualise je dois ouvrir le programme et relancer “valider programme”.
FOR NEXT et DRAW123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869spread = 0.5OBJECTIF = 5///////////////////////// CONDITIONS ////////////////////////////////////c0 = time >= 090000 and time < 172000c1 = close > open///////////////////////// TIMING ////////////////////////////////////if time crosses over 085900 theni = -1Timing = 0endifif c0 thenTiming = Timing[1] + 1endif///////////////////////// ENTREE ////////////////////////////////////if c0 and c1 theni2 = ii = i2 + 1$result[i] = 1$entryA[i] = close + spread$TPa[i] = $entryA[i] + objectif + spread$SLa[i] = lowest[2](low)$entryAindex[i] = barindex$PL[i] = 0endif///////////////////////// SORTIE ////////////////////////////////////for j = 0 to lastset($TPa) doif $result[j] = 1 thenif high >= $TPa[j] then$result[j] = 2drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(0,150,0,50)bordercolor(0,150,0)elsif close <= $SLa[j] then$result[j] = 0drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(250,0,0,50)bordercolor(250,0,0)endifendifnext///////////////////////// RESET////////////////////////////////////if time crosses over 172500 thenUnSet($result)UnSet($entryA)UnSet($TPa)UnSet($SLa)UnSet($entryAindex)i = 0j = 0endif/////////////////////////////////////////////////////////////returnJe serai reconnaissant d’un peu d’aide. Merci d’avance 😉
Voici le code
11/08/2023 at 10:33 AM #223347Bonjour,
Pour afficher les rectangles en continu, il faut placer l’instruction DrawRectangle … juste avant Next.
J’ai juste testé sur le Spot Gold 5 secondes. Je n’obtiens que des rectangles rouges. Je n’ai pas poussé mon investigation loin.Très cordialement.
1234567891011121314151617181920212223///////////////////////// SORTIE ////////////////////////////////////for j = 0 to lastset($TPa) doif $result[j] = 1 thenif high >= $TPa[j] then$result[j] = 2r= 0g= 150b= 0a= 50//drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(0,150,0,50)bordercolor(0,150,0)elsif close <= $SLa[j] then$result[j] = 0r= 250g= 0b= 0a= 50//drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(250,0,0,50)bordercolor(250,0,0)endifendifdrawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(r,g,b,a)bordercolor(r,g,b)next11/08/2023 at 2:12 PM #22336711/08/2023 at 7:50 PM #22338611/08/2023 at 9:35 PM #22339211/09/2023 at 9:56 AM #223411Re Bernard13, Merci pour tes recherches qui finalement font … avancer le Schmilblick 😉
Tu as entièrement raison, je te prie de m’excuser, le DRAW est bien dans la boucle mais les rectangles qui s’affichent ne sont pourtant pas corrects.
Ton approche m’a suggéré de placer le DRAW avant le NEXT mais dans la boucle ou le result[j] = 1 doit encore être vérifié.endif
drawrectangle($entryAindex[j], $SLa[j] – 15, $entryAindex[j] – 1, $SLa[j] – 18 )coloured(r,g,b,a)bordercolor(r,g,b)
endifnext
je te joins une capture d’un échantillon avec 3 lignes de rectangles :
celui du haut : le modèle que l’on veut voir apparaitre
en dessous : le modèle issu de ta proposition
tout en bas : mon modèle issu de la modif ci-dessusdis moi ce que tu en penses
Merci encore pour ton aide 🙏
Bonne journée11/09/2023 at 11:17 AM #223421Re Bernard13, finalement j’y suis allé en force !
J’ai créé une autre boucle avec DRAW et les rectangles s’affichent et se remplissent en temps réel.
for j = 0 to lastset($TPa) do
if $result[j] = 2 then
drawrectangle($entryAindex[j], $SLa[j] – 20, $entryAindex[j] – 1, $SLa[j] – 23 )coloured(0,150,0,50)bordercolor(0,150,0)
elsif $result[j] = 0 then
drawrectangle($entryAindex[j], $SLa[j] – 20, $entryAindex[j] – 1, $SLa[j] – 23 )coloured(250,0,0,50)bordercolor(250,0,0)
endif
nextMais j’ai toujours pas compris pourquoi ça fonctionnait pas initialement 😥
Le mystère reste entier
Merci pour ton aide
cordialement
11/09/2023 at 11:51 AM #22342211/14/2023 at 9:57 AM #223686Salut Bernard13, voici le code (surement pas très élégant) en entier. Les conditions sont très simples :
- échantillon en M1 de 9h à 17h25
- condition d’entrée : clôture > ouverture
- condition de sortie en gain : +5 points (moins 1 demi-spread à l’entrée et pareil en sortie)
- condition de sortie en perte : clôture en dessous du lowest[2] du point d’entrée
L’actualisation en temps réel se produit comme prévue mais lorsque la condition de sortie en perte
se réalise avant la clôture le programme conserve cette information même si à la clôture la condition
n’est plus réalisée.
Merci pour ton soutien Bernard 🙏
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576spread = 0.5OBJECTIF = 5///////////////////////// CONDITIONS ////////////////////////////////////c0 = time >= 090000 and time < 172000c1 = close < open///////////////////////// TIMING ////////////////////////////////////if time crosses over 085900 theni = -1Timing = 0endifif c0 thenTiming = Timing[1] + 1endif///////////////////////// ENTREE ////////////////////////////////////if c0 and c1 theni2 = ii = i2 + 1$result[i] = 1$entryv[i] = close - spread$TPV[i] = $entryv[i] - objectif - spread$SLV[i] = highest[2](high)$entryVindex[i] = barindex$PL[i] = 0drawrectangle($entryVindex[i], $SLv[i] + 5, $entryVindex[i] - 1, $SLv[i] + 8 )endif///////////////////////// SORTIE ////////////////////////////////////for j = 0 to lastset($TPv) doif $result[j] = 1 thenif low <= $TPv[j] then$result[j] = 2elsif close > $SLv[j] then$result[j] = 0endifendifnextfor j = 0 to lastset($TPv) doif $result[j] = 2 thendrawrectangle($entryVindex[j], $SLv[j] + 5, $entryVindex[j] - 1, $SLv[j] + 8 )coloured(0,150,0,50)bordercolor(0,150,0)elsif $result[j] = 0 thendrawrectangle($entryVindex[j], $SLv[j] + 5, $entryVindex[j] - 1, $SLv[j] + 8 )coloured(250,0,0,50)bordercolor(250,0,0)endifnext///////////////////////// RESET////////////////////////////////////if time crosses over 172500 thenUnSet($result)UnSet($entryV)UnSet($TPv)UnSet($SLv)UnSet($entryVindex)i = 0j = 0endif/////////////////////////////////////////////////////////////return11/15/2023 at 5:43 PM #223747 -
AuthorPosts
Find exclusive trading pro-tools on