Indicatore che ripete un segmento

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • #153608 quote
    Ermitage
    Participant
    Average

    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

    #153667 quote
    Daniele Maddaluno
    Participant
    Master

    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.

    #153678 quote
    robertogozzi
    Moderator
    New

    Per ripeterlo nel futuro occorre utilizzare la v11 ed usare un’istruzione grafica.

    #153698 quote
    Ermitage
    Participant
    Average

    Buongiorno e grazie per le risposte, utilizzo la V11.1 , allego la videata così da capire meglio cosa intendo, grazie ancora

    #154248 quote
    robertogozzi
    Moderator
    New

    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.

    #154335 quote
    Ermitage
    Participant
    Average

    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
    #154340 quote
    robertogozzi
    Moderator
    New

    No, non è possibile, occorre utilizzare un ciclo FOR…NEXT.

    #154352 quote
    Ermitage
    Participant
    Average

    Grazie sarebbe possibile avere un esempio per capire meglio?

    #154509 quote
    Ermitage
    Participant
    Average

    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
    #154518 quote
    robertogozzi
    Moderator
    New

    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.

    #154597 quote
    Ermitage
    Participant
    Average

    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?

    #154674 quote
    Ermitage
    Participant
    Average

    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
    #154682 quote
    robertogozzi
    Moderator
    New

    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.

    #154765 quote
    Ermitage
    Participant
    Average

    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

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

Indicatore che ripete un segmento


Supporto ProOrder

New Reply
Author
author-avatar
Ermitage @ermitage Participant
Summary

This topic contains 13 replies,
has 3 voices, and was last updated by Ermitage
5 years, 1 month ago.

Topic Details
Forum: Supporto ProOrder
Language: Italian
Started: 12/13/2020
Status: Active
Attachments: 5 files
Logo Logo
Loading...