Buonasera, avrei la necessità di creare un indicatore che a seconda del time frame (es. 15minuti) disegni un segmento orizzontale (lungo es 56 barre), partendo da una certa data e ora e lo ripeta nel futuro,
Il segmento in oggetto rispetto all’asse delle y dovrebbe essere posizionato al disotto del minimo della candela ( o al di sottodel minimo + una certa distanza)
allego una videata con segmenti creati a mano per spiegare meglio cosa vorrei ottenere
lo stesso dicasi per il posizionamento di un testo ( lettera A e lettere B1 e B2) in figura, anche queste vorrei che venissero posizionate in un certo punto del segmento (sia lungo la X relativa e sia lungo la coordinata Y relativa del segmento disegnato)
grazie
Hai scritto “allego una videata”, ma non c’è allegato.
Io personalmente preferisco disegnare con le linee e inserire una trasparenza quando non voglio visualizzare il livello, ma lo potresti anche fare con il DRAWSEGMENT…
Come idea potresti usare qualcosa del genere:
// Settings
mytime = 90000 // the candle (in time tf) to spot the low
maxbarsplot = 10 // for how many candles you want that level plotted
mydist = 0 // your pesonal distance from the minimum
if opentime = mytime then
level = low
count = 1
endif
if opentime[1] >= mytime and count < maxbarsplot then
count = count + 1
transparency = 255
else
transparency = 0
endif
return level - mydist coloured(0, 0, 0, transparency)
Per la data basta che aggiungi un controllo su “opendate” nel primo if.
Per ripeterlo nel futuro occorre utilizzare la v11 ed usare un’istruzione grafica.
Buongiorno e grazie per le risposte, utilizzo la V11.1 , allego la videata così da capire meglio cosa intendo, grazie ancora
Questo è un esempio:
defparam drawonlastbaronly = true
ONCE Nbarre = 56
IF low = lowest[30](low) THEN
Minimo = low
Inizio = BarIndex
ENDIF
DrawSegment(Inizio,Minimo,BarIndex + Nbarre,Minimo) coloured(255,0,0,255)
RETURN
se vuoi utilizzare una data di cui non conosci BarIndex, vedi DateToBarIndex https://www.prorealcode.com/documentation/datetobarindex/.
Ovviamente tutto questo solo con la nuova versione 11 della piattaforma, ma credo che ormai l’abbiano tutti, al massimo entro tutto il fine settimana, anche sui conti reali.
Buonasera Roberto,
innanzitutto grazie mille, chiedo ancora una cosa, se è possibile: avere bene un chiarimento dell’istruzione highest[54](high) del codice sotto e se fosse possibile determinare il minimo di una candela all’interno di un intervallo temporale
(es low = valore minimo di prezzo tra le candele comprese tra 17/12/2020 16:00 e 18/12/2020 16:00)
grazie
defparam drawonlastbaronly=true
mydate = 20210630
drawsegment(datetobarindex(20200101),close,datetobarindex(mydate),highest[54](high))
drawtext("#mydate#",datetobarindex(mydate),highest[54](high),dialog,bold,30) coloured(255,0,0)
return
No, non è possibile, occorre utilizzare un ciclo FOR…NEXT.
Grazie sarebbe possibile avere un esempio per capire meglio?
Buonasera, sono riuscito a scrivere un codice che in parte esegue quanto richiesto, il codice è piuttosto grezzo e richiede sicuramente di essere affinato, tuttavia partendo ad esempio dal 15 dicembre ore 16:00 riesco a disegnare il segmento se non fosse che non riesco a proiettarlo nel futuro.
Allego codice e ben venga chi riesce ad ottimizzarlo, in particolare non sono bene come far avanzare il valore “mydate” (dalle 16:00 del giorno x alle 16 del giorno x+1, considerando che raggiunto il venerdì dovrei farlo avanzare al lunedì), ho usato l’artifizio di sommare 1000000 al mydate espresso come YYYYMMDDhhmmss ma ovviamente necessita di controlli.
Grazie per l’aiuto
defparam drawonlastbaronly=true
mydate = 20201215160000
mydist = 0.5
GapA = 0.5
GapB = 0.5
inizio=135
fine=191
For i=1 to 5
minimo = 999999
//barraminimo = 0
massimo = 0
//barramassimo = 0
For j=inizio to fine
IF low[j] < minimo THEN
minimo = low[j]
//barraminimo = j
endif
IF high[j] > massimo THEN
massimo = high[j]
//barramassimo = j
endif
next
drawsegment(datetobarindex(mydate),minimo-GapA,datetobarindex(mydate+1000000),minimo-GapA)coloured(255,0,0)
drawtext("A",datetobarindex(mydate+930000),minimo-GapA-mydist,dialog,bold,20) coloured(255,0,0)
drawtext("B2",datetobarindex(mydate+963000),massimo+GapB,dialog,bold,20) coloured(255,0,0)
drawtext("B1",datetobarindex(mydate+33000),massimo+GapB,dialog,bold,20) coloured(255,0,0)
mydate = mydate+1000000
inizio = inizio-56
fine = fine-56
If inizio <0 then
inizio = 0
endif
Next
return
Hai assegnato a MyDate il valore 2020 12 15 160000 ore 16:00:00 del 15/12/2020
poi ci sommi 930000
risultato 2020 12 16 090000 ore 09:00:00 del 16/12/2020
che è un risultato errato, qualunque fosse la somma che volevi fare, che siano state 93 ore o 9 ore e 30 minuti.
Sommare le date è molto lungo e comporta facilmente errori.
Ad ogni modo per stampare nel futuro puoi usare una data o una barra futura:
drawtext("A",datetobarindex(20201222114500),minimo-GapA-mydist,dialog,bold,20) coloured(255,0,0)
drawtext("A",BarIndex + 15,minimo-GapA-mydist,dialog,bold,20) coloured(255,0,0)
nel primo caso gli dici di stampare alle ore 11:45 del 22/12/2020 e calcola da solo le barre necessarie, nel secondo caso gli dici tu a quale barra stampare.
Grazie Roberto per la consueta disponibilità. Purtroppo per rendere dinamico l’indicatore avrei bisogno di capire se è possibile determinare nota la data la relativa numero di barra, mi spiego alla data del 15-12-2020 16:00:00 la relativa barra è la 191. È possibile nota la data e ora della barra avere il relativo numero di barra?
Buonasera,
ho provato ad inserire un semplice codice per determinate la posizione della candela nota una certa data nel passato, nell’esempio inserisco su TF 15M la data 15/12/2020 16:00 e ottengo
che la candela è la 510 (cioè sul mio grafico con la visualizzazione attuale la posizione della candela è la 510 da sinistra verso destra). Se volessi sapere la posizione da destra verso sinistra. Come posso fare? Quindi ottenere il valore di 191
Grazie per l’aiuto
defparam drawonlastbaronly=true
FOR i=0 to barindex
IF Opendate[i] = 20201215 and Opentime[i]=160000 THEN
contatore = barindex[i]+1
BREAK
ENDIF
NEXT
return contatore
No, purtroppo DATETOBARINDEX può essere usato solo direttamente nell’istruzione DRAW…., il risultato della conversione non può essere assegnato ad una variabile, quindi il suo valore di barIndex è sconosciuto.
Buonasera Roberto,
ma una cosa semplicissima che non riesco a fare è questa se il barindex che ovviamente varia da 0 a 769, io ho determinato il mio contatore che ha valore pari a 537
Voglio assegnare ad una costante il valore pari a 769 -537=232 cioè non voglio semplicemente fare differenza = barindex-contatore, in quanto ovviamente mi viene fuori una retta io vorrei un valore costante
cioè tirare fuori il valore 232 e assegnarlo ad una variabile costante.
Mi sembra banale ma non riesco