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
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.
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
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.
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.
Prova a commentare la riga 16, mettendo all’inizio le doppie barre:
//startbarBI1=endbarBI1
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.
Non capisco bene cosa vuoi disegnare, tutto il rettangolo alle 00:30 alle 08:00, oppure una sola barra per volta?
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.
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
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.
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?
Hai interpretato perfettamente Roberto, ti chiedo ancora scusa.
Il rettangolo dopo le 08.00 può restare visibile e niente bordi. 🙂
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.
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.