Aiuto su implementazione codice indicatore
Forums › ProRealTime forum Italiano › Supporto ProBuilder › Aiuto su implementazione codice indicatore
- This topic has 15 replies, 3 voices, and was last updated 6 years ago by DavideSbarra.
Tagged: drawrectangle
-
-
12/07/2018 at 3:13 AM #86482
Salve,
premetto che non sono un programmatore e che non so se su PRT si possa fare cio che sto per chiedere, ma ci provo ugualmente scusandomi in anticipo.
Dunque, ho fatto un indicatore che si avvale di un canale di donchian e quando il prezzo supera il canale alto l’indicatore mi disegna (in chiusura della barra) un rettangolo con ampiezza cha va dal massimo della candela fino al valore del canale alto riferito alla stessa candela (che non è altro che il massimo della candela precedente). Il problema è che il rettangolo si disegna e si ferma sulla candela mentre a me servirebbe che continuasse ad andare avanti man mano che si formano le candele per una distanza di 36 candele dove poi deve chiudersi e restare disegnato sul grafico. Questo se il prezzo nelle 36 candele non va a toccare il rettangolo perche se lo va a toccare il rettangolo deve modificarsi e restringersi al valore del massimo della candela che lo va a toccare e nel caso in cui invece il massimo della candela superi il massimo del rettangolo lo stesso deve cancellarsi dal grafico. Alla fine allego due immagini dove è descritto visivamente cio che intendo è dove si capisce meglio.
So che è una cosa complicata ma lo è ancor di piu per me che non ho le basi di programmazione…… credo che per fare cio ci sia bisogno di un “CICLO FOR” ma va oltre le mie capacità……
Se potete aiutarmi ve ne sarei grato.
Di seguito il codice dell’indicatore e le immagini dove è spiegato il tutto.
12345678Upper = HIGHEST[p](HIGH[1]) //p=36segnale1 = high > UpperIF segnale1 thenDRAWRECTANGLE(barindex,high,barindex,upper) coloured(0,255,255)endifreturnGrazie
12/08/2018 at 11:57 PM #86591Sono riuscito a risolvere parte del problema, ora riesco a far disegnare il rettangolo sul grafico con le condizioni che voglio come da figura allegata.
Quello che non riesco a fare invece e dire all’indicatore che quando il prezzo attraversa il rettangolo, il rettangolo deve cancellarsi.
12345678910111213p=36Lower = LOWEST[p](LOW)segnale2 = lower < Lower[1]cond1=segnale2[1] and low>=lower[2] and low>lower[1]IF cond1 thenDRAWRECTANGLE(barindex-1,lower,barindex[1]+(p),lower[2]) coloured(0,255,255)endifreturnSecondo me va inserito in questa linea dove metto la xxxx
IF cond1 and XXXX then
DRAWRECTANGLE(barindex-1,lower,barindex[1]+(p),lower[2]) coloured(0,255,255)
endif
una condizione che dica all’indicatore che (nell’arco delle 36 candele che dura il rettangolo) il minimo delle 36 candele deve mantenersi maggiore del minimo su cui viene posizionato il rettangolo. Con questa condizione il rettangolo sparisce se il prezzo lo attraversa.
Qualcuno mi aiuta a sviluppare questa condizione perche ci ho provato ma non ottengo il risultato voluto.
Grazie in anticipo
12/09/2018 at 8:16 AM #86594Metti come prima riga:
DEFPARAM DrawOnLastBarOnly=true
12/09/2018 at 7:26 PM #86627Ho provato, ho messo alla prima riga DEFPARAM DrawOnLastBarOnly=true come da te gentilmente indicato ma non funziona.
Mi si cancellano tutti i rettangoli anche quelli che devono rimanere aperti. Praticamente sul grafico non mi appare niente, nessun rettangolo.
12/10/2018 at 1:47 AM #86635E’ (quasi) impossibile quello che chiedi. Non esiste un’istruzione che possa cancellare quello che hai stampato precedentemente, l’unica soluzione è, come ti ho suggerito, di stampare solo in occasione dell’ultima BARRA, per cui “non mantiene” sul grafico il vecchio.
Una possibile alternativa, ma piuttosto complicata e molto lenta potrebbe essere quella di salvare la barra da cui hai iniziato a stampare il rettangolo e stampare al suo posto un rettangolo BIANCO, in tale caso resterebbe un vuoto sul grafico da riempire ristampando (con DRAWCANDLE) tutte la barre fino a quella corrente.
12/10/2018 at 2:50 AM #86637Scusami se insisto Roberto, parlo da ignorante perche ti ripeto di programmazione non me ne intendo…… pero vedendo l’indicatore come si comporta credo che un metodo ci sia.
Mi spiego meglio; Appena le condizioni si verificano il rettangolo mi appare sul grafico e durante la formazione della prima candela se il prezzo va ad interagite col rettangolo questo si modifica restringendosi fino a scomparire del tutto se la candela lo attraversa.
Questo pero accade solo sulla prima candela dopo la formazione del rettangolo e non accade piu se si passa alle successive.
Quindi se il rettangolo (che è gia stampato sul grafico) si cancella e si modifica di dimensioni alla prima candela, di conseguenza deve potersi modificare e cancellare anche sulle successive per cui non credo sia impossibile.
Basterebbe dire all’indicatore (con un ciclo “for”, un ciclo “While”, o un’altra funzione, o una semplice condizione…… questo è quello che non riesco a fare) che iniziando a contare dalla barra in cui si è formato il rettangolo e per le successive 36 candele, il prezzo deve mantenersi sopra il minimo della barra da cui è partito il rettangolo. In questo modo se ad esempio arrivo alla barra 16 e questa ha un minimo inferiore a quello di partenza del rettangolo, lo stesso si cancella nella medesima maniera in cui si cancella sulla prima barra quando il suo minimo diventa inferiore.
Ripeto, se si cancella sulla prima quando il rettangolo è gia stampato sul grafico deve automaticamente cancellarsi anche sulle successive.
Ti allego un link di un video su youtube dove si puo notare l’animazione dell’indicatore…… è un video di 2 ore e 36 minuti, tu vai a 2:15:11 e inizia a guardare di li.
https://www.youtube.com/watch?v=r8J2oPrAgVM&t=8441s
N.B. So che nel video viene utilizzata la MT4 e non è la ProRealTime ma vedendo il comportamento sulla prima candela (che è uguale, identico e preciso a quello che si vede nel video) sono sicurissimo che funziona anche sulla PRT.
12/10/2018 at 3:08 AM #86638Scusami ma dimenticavo una cosa importante…….
Tu prima hai scritto che “Non esiste un’istruzione che possa cancellare quello che hai stampato precedentemente” ed è giustissimo, sono d’accordo con te.
Ma in questo caso non si tratta di cancellare, bensi il rettangolo sparisce perche viene meno la condizione che deve estendersi nell’arco delle 36 candele.
Per cui venendo meno la condizione, la conseguente azione si annulla (e cioè il rettangolo sparisce)
12/10/2018 at 8:21 AM #86642Per fare sparire qualcosa dal video occorre che un’istruzione lo consenta ed il linguaggio ProBuilder non lo consente.
Solo PRT può farlo, come solo PRT può stampare nelle barre future, mentre noi no.
Comunque posso provare a fare come ti ho detto e vedremo come funziona.
12/10/2018 at 2:14 PM #86692ok roberto, grazie infinite
12/10/2018 at 11:06 PM #86729Buonasera Roberto,
partendo dal presupposto che il rettangolo non puo essere cancellato come dici tu, si puo in alternativa ovviare a questo dicendo all’indicatore che se nelle 36 candele viene attraversato dal prezzo cambia colore?
Se cio si puo fare gli metto un colore nero (che è il colore con il quale ho impostato lo sfondo del grafico) ed è come se sparisse.
12/10/2018 at 11:32 PM #86730Non si può cambiare il colore del rettangolo, solo del bordo.
Occorre ripartire dalla barra di inizio rettangolo e stampare una linea verticale nera. Siccome spariranno le candele, vanno ristampate una per una.
Appena ho un po’ di tempo provo a scriverlo.
12/11/2018 at 10:01 AM #86750L’unico modo per farlo (eliminare un rettangolo tracciato) sarebbe far sì che ProBuilder legga il codice nello stesso modo di come fa la maggior parte dell’indicatore MT4: avvia un loop dalla barra corrente a X barre fa e traccia i componenti grafici durante la lettura della cronologia di quel ciclo, MA con un’istruzione DrawOnLastBarOnly, per impedire che gli oggetti vengano disegnati continuamente. Non è così facile, ma può essere fatto. Essere consapevoli del fatto che sarà anche il calcolo intensivo ..
12/11/2018 at 11:59 AM #86812L’unico modo per farlo (eliminare un rettangolo tracciato) sarebbe far sì che ProBuilder legga il codice nello stesso modo di come fa la maggior parte dell’indicatore MT4: avvia un loop dalla barra corrente a X barre fa e traccia i componenti grafici durante la lettura della cronologia di quel ciclo, MA con un’istruzione DrawOnLastBarOnly, per impedire che gli oggetti vengano disegnati continuamente. Non è così facile, ma può essere fatto. Essere consapevoli del fatto che sarà anche il calcolo intensivo ..
se è possibile farlo perche non provarci…… solo che io non sono in grado di farlo
12/12/2018 at 10:04 AM #86923Prova questa soluzione, senza grossi problemi di ritornare indietro, ecc… (ho cambiato il colore del bordo, puoi anche renderlo invisibile mettendo a zero il quarto parametro dei colori):
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748DEFPARAM CalculateOnLastBars = 500//p=36IF BarIndex = 0 THENLowBar = 0LowPrice = 0HighBar = 0HighPrice = 0ENDIF//Lower = LOWEST[p](LOW)CondLow = lower < Lower[1]condL = CondLow[1] and (low >= lower[2]) and (low > lower[1])IF condL thenLowBar = BarIndexLowPrice= min(Lower,Lower[2])ENDIFIF (BarIndex - LowBar) > p THENLowBar = 0LowPrice = 0endifIF close CROSSES UNDER LowPrice THENLowBar = 0LowPrice = 0ENDIF//Higher = highest[p](high)CondHigh = Higher > Higher[1]condH = CondHigh[1] and (high <= Higher[2]) and (high < Higher[1])IF condH thenHighBar = BarIndexHighPrice= max(Higher,Higher[2])ENDIFIF (BarIndex - HighBar) > p THENHighBar = 0HighPrice = 0ENDIFIF close CROSSES OVER HighPrice THENHighBar = 0HighPrice = 0ENDIF//IF LowBar > 0 THENDRAWRECTANGLE(LowBar,lower,barindex,lower[2]) coloured(0,128,0,0)ENDIFIF HighBar > 0 THENDRAWRECTANGLE(HighBar,Higher,barindex,Higher[2]) coloured(0,128,0,0)ENDIFRETURN12/12/2018 at 3:31 PM #86956Grazie mille roberto, sei stato gentilissimo.
Appena ho un po di tempo lo testo e ti faccio sapere.
Grazie ancora.
-
AuthorPosts
Find exclusive trading pro-tools on