Problème FOR NEXT et DRAW

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #223300 quote
    durden69
    Participant
    New

    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”.

    spread = 0.5
    OBJECTIF  = 5
    
    /////////////////////////  CONDITIONS ////////////////////////////////////
    
    c0 = time >= 090000 and time < 172000
    c1 = close > open
    
    /////////////////////////  TIMING ////////////////////////////////////
    if time crosses over 085900 then
    i = -1
    Timing = 0
    endif
    
    if c0 then
    Timing = Timing[1] + 1
    endif
    
    /////////////////////////  ENTREE ////////////////////////////////////
    
    if c0 and c1 then
    
    i2 = i
    i = 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] = 0
    
    endif
    
    /////////////////////////  SORTIE  ////////////////////////////////////
    
    for j = 0 to lastset($TPa) do
    
    if $result[j] = 1 then
    
    if high >= $TPa[j] then
    $result[j] = 2
    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] = 0
    drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(250,0,0,50)bordercolor(250,0,0)
    
    endif
    
    endif
    next
    
    /////////////////////////  RESET////////////////////////////////////
    
    if time crosses over 172500 then
    
    UnSet($result)
    UnSet($entryA)
    UnSet($TPa)
    UnSet($SLa)
    UnSet($entryAindex)
    
    i = 0
    j = 0
    endif
    
    /////////////////////////////////////////////////////////////
    
    return

     

    Je serai reconnaissant d’un peu d’aide. Merci d’avance 😉

    Voici le code

    #223347 quote
    Bernard13
    Participant
    Average

    Bonjour,

    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.

    ///////////////////////// SORTIE ////////////////////////////////////
    for j = 0 to lastset($TPa) do
    if $result[j] = 1 then
    if high >= $TPa[j] then
    $result[j] = 2
    r= 0
    g= 150
    b= 0
    a= 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] = 0
    r= 250
    g= 0
    b= 0
    a= 50
    //drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(250,0,0,50)bordercolor(250,0,0)
    endif
    endif
    
    drawrectangle($entryAindex[j], $SLa[j] - 5, $entryAindex[j] - 1, $SLa[j] - 8 )coloured(r,g,b,a)bordercolor(r,g,b)
    
    next
    #223367 quote
    durden69
    Participant
    New

    Salut Bernard13, forcément en sortant l’instruction de la boucle le tracé du rectangle n’est plus soumis à condition et il s’exécute sous chaque bougie 🤦‍♂️ .
    On ne fait pas plus avancer le Schmilblick …

    #223386 quote
    Bernard13
    Participant
    Average

    Re durden69
    Sauf erreur de ma part DrawRectangle est bien … dans … la boucle FOR … NEXT dans ma proposition et les rectangles s’affichent bien en continu.
    Peux-tu joindre une copie d’écran de ton problème ?
    Cordialement.

    #223392 quote
    Bernard13
    Participant
    Average

    Re Voici ce que j’obtiens en continu …

    Durden69-Indicateur-2023-11-08-213316.png Durden69-Indicateur-2023-11-08-213316.png
    #223411 quote
    durden69
    Participant
    New

    Re 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)
    endif

    next

    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-dessus

    dis moi ce que tu en penses

    Merci encore pour ton aide 🙏
    Bonne journée

    #223421 quote
    durden69
    Participant
    New

    Re 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
    next

    Mais j’ai toujours pas compris pourquoi ça fonctionnait pas initialement 😥

    Le mystère reste entier

    Merci pour ton aide

    cordialement

    #223422 quote
    Bernard13
    Participant
    Average

    Re durden69
    Le texte ci-dessus de ta capture d’écran est tronqué …
    J’attends la capture de l’échantillon …
    Le diable se cache toujours dans les détails ! 😀
    A bientôt. 🙂

    #223686 quote
    durden69
    Participant
    New

    Salut 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 🙏

    spread = 0.5
    OBJECTIF  = 5
    
    /////////////////////////  CONDITIONS ////////////////////////////////////
    
    c0 = time >= 090000 and time < 172000
    c1 = close < open
    
    /////////////////////////  TIMING ////////////////////////////////////
    if time crosses over 085900 then
    i = -1
    Timing = 0
    endif
    
    if c0 then
    Timing = Timing[1] + 1
    endif
    
    /////////////////////////  ENTREE ////////////////////////////////////
    
    if c0 and c1 then
    
    i2 = i
    i = 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] = 0
    drawrectangle($entryVindex[i], $SLv[i] + 5, $entryVindex[i] - 1, $SLv[i] + 8 )
    
    endif
    
    /////////////////////////  SORTIE  ////////////////////////////////////
    
    for j = 0 to lastset($TPv) do
    
    if $result[j] = 1 then
    
    if low <= $TPv[j] then
    $result[j] = 2
    
    elsif close > $SLv[j] then
    $result[j] = 0
    
    endif
    endif
    next
    
    for j = 0 to lastset($TPv) do
    if $result[j] = 2 then
    drawrectangle($entryVindex[j], $SLv[j] + 5, $entryVindex[j] - 1, $SLv[j] + 8 )coloured(0,150,0,50)bordercolor(0,150,0)
    elsif $result[j] = 0 then
    drawrectangle($entryVindex[j], $SLv[j] + 5, $entryVindex[j] - 1, $SLv[j] + 8 )coloured(250,0,0,50)bordercolor(250,0,0)
    
    endif
    next
    
    /////////////////////////  RESET////////////////////////////////////
    
    if time crosses over 172500 then
    
    UnSet($result)
    UnSet($entryV)
    UnSet($TPv)
    UnSet($SLv)
    UnSet($entryVindex)
    
    i = 0
    j = 0
    endif
    
    /////////////////////////////////////////////////////////////
    
    return
    
    #223747 quote
    Bernard13
    Participant
    Average

    Merci durden69, je vais essayer de regarder çà. 🙂

Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.

Problème FOR NEXT et DRAW


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
durden69 @durden69 Participant
Summary

This topic contains 9 replies,
has 2 voices, and was last updated by Bernard13
2 years, 4 months ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 11/07/2023
Status: Active
Attachments: 1 files
Logo Logo
Loading...