DISEGNARE INDICATORE SOLO NELLE ULTIME CANDELE
Forums › ProRealTime forum Italiano › Supporto ProBuilder › DISEGNARE INDICATORE SOLO NELLE ULTIME CANDELE
- This topic has 14 replies, 2 voices, and was last updated 2 years ago by robertodocc.
-
-
04/28/2022 at 8:42 AM #192356
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
04/29/2022 at 9:34 AM #192397Le 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/.
1 user thanked author for this post.
04/29/2022 at 11:54 AM #192407Grazie, anche se non riesco a farlo….troppo difficile per me
R
04/29/2022 at 12:00 PM #192410Se mi dici esattamente cosa vuoi stampare (e in base a quando decidere se stamparlo o meno), posso fartelo.
1 user thanked author for this post.
04/29/2022 at 12:15 PM #192411Visto 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
04/29/2022 at 12:18 PM #192413dimenticavo….ci sono due variabili
delta[0]
RRT[2]
04/29/2022 at 3:19 PM #192433Eccolo:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091DEFPARAM DrawOnLastBarONLY = trueIF BarIndex = 0 THENFOR 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] = 0NEXTENDIFRRT = 1DELTA = 0ROSSA= close < openVERDE= close > openTecSpikeGiu= 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 ATTUALETecSpikeSu= rossa[1] and verde [0] and low < low[1] and (open >= (Close [1] + delta) or open <= (Close [1] - delta))IF TecSpikeGiu OR TecSpikeSu THENFOR i = 10 DOWNTO 2j = 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]NEXTENDIFIf TecSpikeGiu thenIngressoShort = Open-1Stopp=High+2Ri = (Stopp)-(IngressoShort)Tgt = IngressoShort-abs(Ri*RRT)//RRT= RISCK REWARD TARGETSIGNAL = -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] = Tgtelsif TecSpikeSu thenIngressoLong = Open+1Stopp=Low-2Ri = (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] = TgtELSESIGNAL = 0endifFOR i = 1 TO 10BarID = $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 THENdrawtext ("®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 THENdrawtext ("®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)ENDIFNEXTreturnalle 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).
1 user thanked author for this post.
04/29/2022 at 7:46 PM #192448Grazie 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
04/30/2022 at 6:03 AM #192455Buongiorno 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.
04/30/2022 at 9:08 AM #192461A 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).
05/01/2022 at 9:53 PM #192511Se 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 .
05/02/2022 at 4:42 AM #192512Ho capito, è dovuto al fatto che ad ogni candela ristampa gli ultimi 10 valori.
E stampa sempre solo sull’ultima candela.
1 user thanked author for this post.
05/02/2022 at 5:33 AM #192517Sarebbe 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
05/02/2022 at 12:06 PM #192537Avevo 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:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596DEFPARAM DrawOnLastBarONLY = trueRRT = 1DELTA = 0IDX = 1IF BarIndex = 0 THEN$tempBAR[0] = 0FOR 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] = 0NEXTENDIFFOR i = 1 TO 10BarID = $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 THENdrawtext ("®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 THENdrawtext ("®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)ENDIFNEXTROSSA = close < openVERDE = close > openTecSpikeGiu = 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 THENIF $tempBAR[0] <> BarIndex THEN$tempBAR[0] = BarIndexFOR i = 10 DOWNTO 2j = 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]NEXTENDIFENDIFIf TecSpikeGiu[IDX] = 1 thenIngressoShort = Open[IDX]-1Stopp=High[IDX]+2Ri = (Stopp)-(IngressoShort)Tgt = IngressoShort-abs(Ri*RRT)//RRT= RISCK REWARD TARGETSIGNAL = -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] = Tgtelsif TecSpikeSu[IDX] = 1 thenIngressoLong = Open[IDX]+1Stopp = Low[IDX]-2Ri = (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] = TgtELSESIGNAL = 0endifreturnPer 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:
1DEFPARAM DrawOnLastBarONLY = true1 user thanked author for this post.
05/03/2022 at 4:20 PM #192606Ora funziona perfettamente! In associazione con l’altro è perfetto
GRAZIEEE
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on