Indicatore Filtro Orario

Viewing 15 posts - 1 through 15 (of 25 total)
  • Author
    Posts
  • #237544 quote
    Gianpy
    Participant
    New

    Buonasera,

    ho iniziato a impostare il codice per un indicatore che mi colora il background del grafico a seconda del momento della giornata.

    Funziona, però mi piacerebbe che disegnasse solo nella giornata di oggi.

    Qualcuno mi può aiutare? Grazie in anticipo!

     

    startBI1 = 003000
    endBI1 = 080000
    startBO1 = 093000
    endBO1 = 110000
    startBI2 = 150000
    endBI2 = 163000
    startBO2 = 180000
    endBO2 = 180000
    startBI3 = 200000
    endBI3 = 203000
    startBO3 = 220000
    endBO3 = 223000
    currentDay = date
    
    if intradaybarindex=0 then
    alreadydrawnBI1 = 0
    alreadydrawnBI2 = 0
    alreadydrawnBI3 = 0
    alreadydrawnBO1 = 0
    alreadydrawnBO2 = 0
    alreadydrawnBO3 = 0
    endif
    
    if time>=startBI1 and time<=endBI1 and date = currentDay then
    backgroundcolor("Green",5)
    alreadydrawnBI1=1
    endif
    
    if time>=startBI2 and time<=endBI2 and date = currentDay then
    backgroundcolor("Green",5)
    alreadydrawnBI2=1
    endif
    
    if time>=startBI3 and time<=endBI3 and date = currentDay then
    backgroundcolor("Green",5)
    alreadydrawnBI3=1
    endif
    
    if time>=startBO1 and time<=endBO1 and date = currentDay then
    backgroundcolor("Red",5)
    alreadydrawnBO1=1
    endif
    
    if time>=startBO2 and time<=endBO2 and date = currentDay then
    backgroundcolor("Red",5)
    alreadydrawnBO2=1
    endif
    
    if time>=startBO3 and time<=endBO3 and date = currentDay then
    backgroundcolor("Red",5)
    alreadydrawnBO3=1
    endif
    
    RETURN
    
    #237545 quote
    robertogozzi
    Moderator
    Master

    No, non è possibile annullare i giorni precedenti.

    Esiste DEFPARAM DrawOnLastBarOnly che può essere settato su TRUE o FALSE, ma riguarda solo gli oggetti stampati con le varia istruzioni DRAW.

    #237548 quote
    Iván González
    Moderator
    Master

    Potresti anche fare qualcosa di simile a quello che ho fatto in quest'altro post: https://www.prorealcode.com/topic/affihcer-seulement-sur-periode-choisi/#post-237414 Si tratta di disegnare un rettangolo. Puoi far passare il rettangolo da 0 a un numero molto alto imitando l'istruzione backgroundcolor

    robertogozzi and Gianpy thanked this post
    #237567 quote
    Gianpy
    Participant
    New

    Grazie Ivan!! Non ci avevo pensato.

    Ho provato a modificare in questo modo (inserisco solo una parte di codice, per semplificare):

     

    DEFPARAM DrawOnLastBarOnly=true
    
    startBI1 = 003000
    endBI1 = 080000
    
    if time=startBI1 then
    startbarBI1=barindex
    endif
    
    if time<=endBI1 then
    endbarBI1=barindex
    endif
    
    if time>=startBI1 and time<=endBI1 then
    drawrectangle(startbarBI1,1000000,endbarBI1,0) coloured("Green",25) bordercolor("Green",25)
    //backgroundcolor("Green",5)
    endif
    
    RETURN
    

    Tuttavia, se lascio backgroundcolor, in effetti disegna correttamente. Con il rettangolo non mi disegna niente (sicuramente sbaglio qualcosa io).

    Tra l’altro mi è venuta in mente un’altra cosa… io avrei bisogno che disegnasse in tempo reale. Così com’è lo fa o attende la fine del tempo prefissato in alto?

    Mi spiego meglio… se questo filtro deve disegnare fra mezzanotte e le 8 del mattino, lui aspetta che siano le 08.01? Perché, se sono le 3.00, a me piacerebbe trovarmi la candela corrente su sfondo verde, così come anche le precedenti, fino a mezzanotte.

    Per questo ho modificato l’istuzione “if time<=endBI1 then endbarBI1=barindex endif” in “if time<=endBI1 then endbarBI1=barindex endif”. Non so se ho fatto giusto ma, anche così, con backgroundcolor pare disegnare correttamente.

    Spero di essermi spiegato in maniera esaustiva.

    E chiedo ancora scusa per la confusione che creo, ma davvero a livello programmazione sono imbarazzante.

    #237621 quote
    Gianpy
    Participant
    New

    Ho modificato così:

     

    DEFPARAM DrawOnLastBarOnly=true
     
    startBI1 = 003000
    endBI1 = 080000
     
    if time=startBI1 then
    startbarBI1=barindex
    endif
     
    if time<=endBI1 then
    endbarBI1=barindex
    endif
     
    if time>=startBI1 and time<=endBI1 then
    drawrectangle(startbarBI1,1000000,endbarBI1,0) coloured("Green",25) bordercolor("Green",25)
    startbarBI1=endbarBI1
    endif
     
    RETURN

    Funziona. Anche se esteticamente non è bellissimo per via dei bordi e anche a causa del fatto che, in corrispondenza della prima candela, chiaramente il rettangolo si riduce a una linea verticale (metto immagine).

    Mi rimane da capire se disegna in tempo reale, ma lo verificherò oggi.

    L’altro problema è che, inserendo la prima riga per fare disegnare solo oggi, pare non disegnare affatto.

    #237666 quote
    robertogozzi
    Moderator
    Master

    Prova a commentare la riga 16, mettendo all’inizio le doppie barre:

    //startbarBI1=endbarBI1
    #237706 quote
    Gianpy
    Participant
    New

    Quella è proprio la riga che ho aggiunto per farlo funzionare quasi (e sottolineo quasi, ovviamente) correttamente. Se la tolgo, torno esattamente alla situazione di prima.

    #237720 quote
    robertogozzi
    Moderator
    Master

    Non capisco bene cosa vuoi disegnare, tutto il rettangolo alle 00:30 alle 08:00, oppure una sola barra per volta?

    #237741 quote
    Gianpy
    Participant
    New

    Hai assolutamente ragione, Roberto. Provo a spiegarmi meglio.

    Di base sì, mi piacerebbe che disegnasse un rettangolo alla volta, fra le 00.00 e le 08.00, in tempo reale.

    Ora… mi rendo conto che a mezzanotte magari non può che fare una linea verticale verde (ma va bene così). Poi, a mezzanotte e mezza, mi piacerebbe che facesse un rettangolo fra le candele di mezzanotte e mezzanotte e mezza. Poi un altro fra le 00.30 e le 01.00 e così via 08.00.

    Spero di essermi riuscito a spiegare meglio, questa volta.

    #237761 quote
    robertogozzi
    Moderator
    Master

    Questo fa quello che chiedi, che venga usata la riga DEFPARAM DrawOnLastBarOnly=true oppure no:

    //DEFPARAM DrawOnLastBarOnly=true
    ONCE startBI1 = 000000
    ONCE endBI1   = 080000
    ONCE FirstBar = 0
    
    IF (Time = startBI1) THEN
       FirstBar = BarIndex
    ENDIF
    IF Time >= startBI1 AND Time <= endBI1 THEN
       if (Minute MOD 30) = 0 THEN
          startBar = barindex
       endif
       endBar = BarIndex
       IF startBar <> startBar[1] THEN
          drawrectangle(startBar,1000000,endBar,0) coloured("Green",15) bordercolor("Green",15)
       ENDIF
    ELSE
       drawrectangle(FirstBar,1000000,endBar,0) coloured("Green",15) bordercolor("Green",15)
    ENDIF
    RETURN
    Iván González thanked this post
    #237764 quote
    Gianpy
    Participant
    New

    Grazie mille, Roberto!

    In effetti, credo che tu ti sia avvicinato parecchio. Tuttavia, restituisce ancora degli errori.

    Ti invio due screenshot. In quello che si chiama “FO con prima riga” ho incluso il parametro per disegnare solo oggi. Come vedi non disegna i rettangoli di oggi, però ne fa uno enorme nel passato.

    Il secondo, quello che ho nominato “FO senza prima riga”, non ha il parametro e disegna, in effetti, correttamente i rettangoli di oggi. Tuttavia, disegna anche un rettangolo enorme nel passato. Se guardi l’inizio dello screenshot, noterai che è il grosso rettangolo è più scuro perché ce ne sono due sovrapposti. E più vai indietro nel tempo più, chiaramente, diventa scuro.

    #237769 quote
    robertogozzi
    Moderator
    Master

    Riepilogo quello che ho compreso:

    • voui che dalle ore 00:00 stampi ogni 30 minuti un rettangolo che va dalla barra del primo minuto fino alla barra del 30esimo minuto (dal minuto 0 al minuto 29 e poi dal minuto 30 al minuto 59)
    • vuoi che ogni rettangolo resti visibile fino alle 08:00

    Dopo le 08:00 che deve succedere,tutto sparisce oppure il rettangolo tra le 00:00 e le 08:00 deve restare?

    Ogni rettangolo dei 30 minuti deve avere il bordo visibile oppure no?

    #237774 quote
    Gianpy
    Participant
    New

    Hai interpretato perfettamente Roberto, ti chiedo ancora scusa.

    Il rettangolo dopo le 08.00 può restare visibile e niente bordi. 🙂

    #237782 quote
    robertogozzi
    Moderator
    Master

    Quindi se usi DEFPARAM DrawOnLastBarOnly=true, vedrai i singoli rettangoli mentre si formano e, dopo le 8, un unico rettangolo grande senza.

    Se non usi DEFPARAM DrawOnLastBarOnly=true, vedrai s singoli rettangoli, che vengono mantenuti sempre, anche per i giorni passati.

    Iván González thanked this post
    #237785 quote
    Gianpy
    Participant
    New

    Ok, Roberto. Grazie mille.

    Il problema è che, togliendo la prima riga, non solo rimangono i quadrati che servono ma, come ti dicevo, ne viene disegnato anche uno grosso, successivo alle 08.00 che arriva fino a mezzanotte. Se guardi l’immagine che ti ho allegato te ne accorgi.

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

Indicatore Filtro Orario


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
Gianpy @gianpy Participant
Summary

This topic contains 24 replies,
has 3 voices, and was last updated by Gianpy
1 year, 4 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/13/2024
Status: Active
Attachments: 7 files
Logo Logo
Loading...