DISEGNARE INDICATORE SOLO NELLE ULTIME CANDELE

Viewing 15 posts - 1 through 15 (of 15 total)
  • Author
    Posts
  • #192356 quote
    robertodocc
    Participant
    Average

    Buongiorno Roberto

    Ho creato un indicatore che “disegna” sul grafico una freccia e un testo, ma vorrei che lo facesse solo per le ultime dieci candele, per evitare di appesantire graficamente nei TF più alti. Quale è l’istruzione da dare?

    Grazie

    #192397 quote
    robertogozzi
    Moderator
    Master

    Le istruzioni grafiche stampano ad OGNI barra.

    Con DEFPARAM DRAWONLASTBARONLY=TRUE stamperà sempre ad ogni barra, ma NON gli oggetti delle barre precedenti.

    Quindi, nel tuo caso, occorre usare degli array (o vettori) per memorizzare sempre gli ultimi 10 dati e, usando DEFPARAM DRAWONLASTBARONLY=TRUE, ristamparli tutti e 10 ad ogni barra.

    Quindi se vuoi stampare una freccia devi salvare in 3 diversi array:

    • il numero della barra (BarIndex) dove stampare
    • il tipo di freccia (se non è sempre uguale)
    • il livello di prezzo dove va stampata.

    Qui trovi le istruzioni ed esempi su come usarli https://www.prorealcode.com/topic/array-variables-availability-in-prorealtime/.

    robertodocc thanked this post
    #192407 quote
    robertodocc
    Participant
    Average

    Grazie, anche se non riesco a farlo….troppo difficile per me

    R

    #192410 quote
    robertogozzi
    Moderator
    Master

    Se mi dici esattamente cosa vuoi stampare (e in base a quando decidere se stamparlo o meno), posso fartelo.

    robertodocc thanked this post
    #192411 quote
    robertodocc
    Participant
    Average

    Visto che sei così disponibile…..ti allego il codice dell’indicatore che vorrei funzionasse solo per le ultime dieci candele

    Grazie


    ROSSA= close < open VERDE= close > open
    TecSpikeGiu= verde[1] and rossa [0] and High > high[1] and (open <= Close [1] + delta or open >= Close [1] - delta) //DELTA = DIFF TRA CLOSE PRECEDENTE E OPEN ATTUALE
    TecSpikeSu= rossa[1] and verde [0] and low < low[1] and (open >= (Close [1] + delta) or open <= (Close [1] - delta))
    If TecSpikeGiu then
    IngressoShort = Open-1
    Stopp=High+2
    Ri = (Stopp)-(IngressoShort)
    Tgt = IngressoShort-abs(Ri*RRT)//RRT= RISCK REWARD TARGET
    drawtext ("®Short",barindex,HIGH +(5*PIPSIZE),SansSerif,Bold,20)coloured (200,0,0,1000)
    drawtext ("Sell",barindex,open-1,SansSerif,Standard,15)coloured (0,0,0,1000)
    drawtext ("S-t-o-p",barindex,HIGH+2 ,SansSerif,Standard,15)coloured (0,0,0,1000)
    drawtext (Ri,barindex,HIGH-1 ,SansSerif,Standard,15)coloured (0,0,0,1000)
    drawtext ("T-g-t",barindex,Tgt, SansSerif,Standard,15)coloured (0,0,0,1000)
    SIGNAL = -2
    elsif TecSpikeSu then
    IngressoLong = Open+1
    Stopp=Low-2
    Ri = (IngressoLong)-(Stopp)
    Tgt =IngressoLong+abs(Ri*RRT)
    drawtext ("®Long",barindex,LOW - (5*PIPSIZE),SansSerif,Bold,20)coloured (0,100,0,1000)
    drawtext ("Buy",barindex,open+1,SansSerif,Standard,15)coloured (0,0,0,1000)
    drawtext ("S-t-o-p",barindex,low-2 ,SansSerif,Standard,15)coloured (0,0,0,1000)
    drawtext (Ri,barindex,Low+1,SansSerif,Standard,15)coloured (0,0,0,1000)
    drawtext ("T-g-t",barindex,Tgt, SansSerif,Standard,15)coloured (0,0,0,1000)
    SIGNAL = +2
    ELSE
    SIGNAL = 0
    endif
    return

    TECNICA-rc.txt
    #192413 quote
    robertodocc
    Participant
    Average

    dimenticavo….ci sono due variabili

    delta[0]

    RRT[2]

    #192433 quote
    robertogozzi
    Moderator
    Master

    Eccolo:

    DEFPARAM DrawOnLastBarONLY = true
    IF BarIndex = 0 THEN
    FOR i = 1 TO 10
    $Tipo[i]   = 0
    $Barra[i]  = 0
    $RIval[i]  = 0
    $TGTval[i] = 0
    $x[i]      = 0
    $y[i]      = 0
    $w[i]      = 0
    $u[i]      = 0
    $z[i]      = 0
    NEXT
    ENDIF
    RRT   = 1
    DELTA = 0
    ROSSA= close < open
    VERDE= close > open
    TecSpikeGiu= verde[1] and rossa [0] and High > high[1] and (open <= Close [1] + delta or open >= Close [1] - delta) //DELTA = DIFF TRA CLOSE PRECEDENTE E OPEN ATTUALE
    TecSpikeSu= rossa[1] and verde [0] and low < low[1] and (open >= (Close [1] + delta) or open <= (Close [1] - delta))
    IF TecSpikeGiu OR TecSpikeSu THEN
    FOR i = 10 DOWNTO 2
    j = i - 1
    $Tipo[i]   = $Tipo[j]
    $Barra[i]  = $Barra[j]
    $RIval[i]  = $RIval[j]
    $TGTval[i] = $TGTval[j]
    $x[i]      = $x[j]
    $y[i]      = $y[j]
    $w[i]      = $w[j]
    $u[i]      = $u[j]
    $z[i]      = $z[j]
    NEXT
    ENDIF
    If TecSpikeGiu then
    IngressoShort = Open-1
    Stopp=High+2
    Ri = (Stopp)-(IngressoShort)
    Tgt = IngressoShort-abs(Ri*RRT)//RRT= RISCK REWARD TARGET
    SIGNAL = -2
    $Tipo[1]   = SIGNAL
    $Barra[1]  = BarIndex
    $RIval[1]  = Ri
    $TGTval[1] = Tgt
    $x[1]      = HIGH +(7*PIPSIZE)
    $y[1]      = open - 3*pipsize
    $w[1]      = HIGH+4*pipsize
    $u[1]      = HIGH+1.5*pipsize
    $z[1]      = Tgt
    elsif TecSpikeSu then
    IngressoLong = Open+1
    Stopp=Low-2
    Ri = (IngressoLong)-(Stopp)
    Tgt =IngressoLong+abs(Ri*RRT)
    SIGNAL = 2
    $Tipo[1]   = SIGNAL
    $Barra[1]  = BarIndex
    $RIval[1]  = Ri
    $TGTval[1] = Tgt
    $x[1]      = LOW - (7*PIPSIZE)
    $y[1]      = open+3*pipsize
    $w[1]      = low-4*pipsize
    $u[1]      = low-1.5*pipsize
    $z[1]      = Tgt
    ELSE
    SIGNAL = 0
    endif
    FOR i = 1 TO 10
    BarID      = $Barra[i]
    Ri         = $RIval[i]
    Tgt        = $TGTval[i]
    xx         = $x[i]
    yy         = $y[i]
    ww         = $w[i]
    uu         = $u[i]
    zz         = $z[i]
    IF $Tipo[i] = 2 THEN
    drawtext ("®Long",BarID,xx,SansSerif,Bold,12)coloured (0,100,0,255)
    drawtext ("Buy",BarID,yy,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext ("S-t-o-p",BarID,ww,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext (Ri,BarID,uu,SansSerif,Standard,10)coloured (0,0,0,1000)
    drawtext ("T-g-t",BarID,zz, SansSerif,Standard,10)coloured (0,0,0,255)
    ELSIF $Tipo[i] = -2 THEN
    drawtext ("®Short",BarID,xx,SansSerif,Bold,12)coloured (200,0,0,255)
    drawtext ("Sell",BarID,yy,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext ("S-t-o-p",BarID,ww,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext (Ri,BarID,uu,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext ("T-g-t",BarID,zz, SansSerif,Standard,10)coloured (0,0,0,255)
    ENDIF
    NEXT
    return

    alle due variabili (righe 15 e 16) ho messo dei dati a caso, metti tu i valori corretti.

    L’ultimo parametro di COLOURED è opzionale ed indica la trasparenza desiderata, può andare da 0=invisibile, fino a 255=massima visibilità. Prima c’era 1000, l’ho sostituito con 255. Non segnalava errore, però non so quale trasparenza usasse (forse faceva 1000/255, oppure 1000 MOD 55, o chissà cosa).

    robertodocc thanked this post
    Il-Mio-Indicatore10.itf
    #192448 quote
    robertodocc
    Participant
    Average

    Grazie Roberto

    C’è qualcosa che però non funziona, mi parte l’indicatore solo quando scatta sull’ultima candela la condizione.

    Ho fatto alcune modifiche ma ancora non mi va. Provo a correggere sennò richiedo nuovamente assistenza

    #192455 quote
    robertodocc
    Participant
    Average

    Buongiorno Roberto,

    non capisco perché del comportamento dell’indicatore, forse è un probleme di annidamento di strutture.

    Dovrebbe segnare solo se le ultime candele hanno verso opposto (la prima verde e l9ultima rossa o viceversa, invece una volta che parte l’indicatore, se l’ultima candele inverte il segno, questo rimane sempre attivo. E si modifica solo quando si passa alla candela dopo.

    in sostanza, il trigger dell’azione non dovrebbe essere il passaggio alla candela dopo ma il passare da verde a rossa e viceversa.

    #192461 quote
    robertogozzi
    Moderator
    Master

    A me sembra funzioni esattamente come prima, ho confontato la versione originale che hai postato e la mia e vedo che gli ultimi 10 segnali sono assolutamente identici (sul DAX a 5 minuti).

    #192511 quote
    robertodocc
    Participant
    Average

    Se lo vedi funzionare in realtime non sono uguali. La condizione della diversità di ultima candela rispetto alla penultima fa scattare o no l’indicatore nella versione originale, mentre in quest’ultima no, ovvero l’indicatore resta anche se l’ultima candela inverte, diventando dello stesso segno della penultima. Si sblocca alla chiusura candela, con la nuova .

    #192512 quote
    robertogozzi
    Moderator
    Master

    Ho capito, è dovuto al fatto che ad ogni candela ristampa gli ultimi 10 valori.

    E stampa sempre solo sull’ultima candela.

    robertodocc thanked this post
    #192517 quote
    robertodocc
    Participant
    Average

    Sarebbe altrettanto funzionale se stampasse in modo “definitivo” gli ultimi 9 (dal penultimo a ritroso) e in modo dinamico l’ultimo, sempre che ricorra la condizione trigger fondamentale, ovvero che la candela sia di segno opposto alla precedente

    #192537 quote
    robertogozzi
    Moderator
    Master

    Avevo fatto un errore di scrittura io ed inoltre l’uso degli array per salvare gli ultimi 10 valori in realtà era molto più complicato a causa del fatto che durante una stessa barra, l’indicatore viene eseguito più volte.

    Questa è la versione corretta che ti aggiorna il grafico solo alla CHIUSURA della candela:

    DEFPARAM DrawOnLastBarONLY = true
    RRT   = 1
    DELTA = 0
    IDX   = 1
    IF BarIndex = 0 THEN
    $tempBAR[0]   = 0
    FOR i = 1 TO 10
    $Tipo[i]   = 0
    $Barra[i]  = 0
    $RIval[i]  = 0
    $TGTval[i] = 0
    $x[i]      = 0
    $y[i]      = 0
    $w[i]      = 0
    $u[i]      = 0
    $z[i]      = 0
    NEXT
    ENDIF
    FOR i = 1 TO 10
    BarID      = $Barra[i]
    Ri         = $RIval[i]
    Tgt        = $TGTval[i]
    xx         = $x[i]
    yy         = $y[i]
    ww         = $w[i]
    uu         = $u[i]
    zz         = $z[i]
    IF $Tipo[i] = 2 THEN
    drawtext ("®Long",BarID,xx,SansSerif,Bold,12)coloured (0,100,0,255)
    drawtext ("Buy",BarID,yy,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext ("S-t-o-p",BarID,ww,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext (Ri,BarID,uu,SansSerif,Standard,10)coloured (0,0,0,1000)
    drawtext ("T-g-t",BarID,zz, SansSerif,Standard,10)coloured (0,0,0,255)
    ELSIF $Tipo[i] = -2 THEN
    drawtext ("®Short",BarID,xx,SansSerif,Bold,12)coloured (200,0,0,255)
    drawtext ("Sell",BarID,yy,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext ("S-t-o-p",BarID,ww,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext (Ri,BarID,uu,SansSerif,Standard,10)coloured (0,0,0,255)
    drawtext ("T-g-t",BarID,zz, SansSerif,Standard,10)coloured (0,0,0,255)
    ENDIF
    NEXT
    ROSSA = close < open
    VERDE = close > open
    TecSpikeGiu = verde[1] and rossa [0] and High > high[1] and (open <= Close [1] + delta or open >= Close [1] - delta)
    TecSpikeSu  = rossa[1] and verde [0] and low < low[1] and (open >= (Close [1] + delta) or open <= (Close [1] - delta))
    IF (TecSpikeGiu[IDX] + TecSpikeSu[IDX]) > 0 THEN
    IF $tempBAR[0] <> BarIndex THEN
    $tempBAR[0] = BarIndex
    FOR i = 10 DOWNTO 2
    j          = i - 1
    $Tipo[i]   = $Tipo[j]
    $Barra[i]  = $Barra[j]
    $RIval[i]  = $RIval[j]
    $TGTval[i] = $TGTval[j]
    $x[i]      = $x[j]
    $y[i]      = $y[j]
    $w[i]      = $w[j]
    $u[i]      = $u[j]
    $z[i]      = $z[j]
    NEXT
    ENDIF
    ENDIF
    If TecSpikeGiu[IDX] = 1 then
    IngressoShort = Open[IDX]-1
    Stopp=High[IDX]+2
    Ri = (Stopp)-(IngressoShort)
    Tgt = IngressoShort-abs(Ri*RRT)//RRT= RISCK REWARD TARGET
    SIGNAL       = -2
    $Tipo[1]     = SIGNAL
    $Barra[1]    = BarIndex[IDX]
    $RIval[1]    = Ri
    $TGTval[1]   = Tgt
    $x[1]        = HIGH[IDX] +(7*PIPSIZE)
    $y[1]        = open[IDX] - 3*pipsize
    $w[1]        = HIGH[IDX]+4*pipsize
    $u[1]        = HIGH[IDX]+1.5*pipsize
    $z[1]        = Tgt
    elsif TecSpikeSu[IDX] = 1 then
    IngressoLong = Open[IDX]+1
    Stopp        = Low[IDX]-2
    Ri           = (IngressoLong)-(Stopp)
    Tgt          = IngressoLong+abs(Ri*RRT)
    SIGNAL       = 2
    $Tipo[1]     = SIGNAL
    $Barra[1]    = BarIndex[IDX]
    $RIval[1]    = Ri
    $TGTval[1]   = Tgt
    $x[1]        = LOW[IDX] - (7*PIPSIZE)
    $y[1]        = open[IDX]+3*pipsize
    $w[1]        = low[IDX]-4*pipsize
    $u[1]        = low[IDX]-1.5*pipsize
    $z[1]        = Tgt
    ELSE
    SIGNAL       = 0
    endif
    return

    Per potere vedere anche la candela in corso, devi aggiungere al grafico ANCHE l’indicatore originale (con gli stessi parametri per le variabili, ovviamente), aggiungendo come PRIMA riga questa:

    DEFPARAM DrawOnLastBarONLY = true
    robertodocc thanked this post
    Il-Mio-Indicatore10.itf
    #192606 quote
    robertodocc
    Participant
    Average

    Ora funziona perfettamente! In associazione con l’altro è perfetto

    GRAZIEEE

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

DISEGNARE INDICATORE SOLO NELLE ULTIME CANDELE


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
Summary

This topic contains 14 replies,
has 2 voices, and was last updated by robertodocc
3 years, 10 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 04/28/2022
Status: Active
Attachments: 3 files
Logo Logo
Loading...