Drawsegment con coordinate barindex
Forums › ProRealTime forum Italiano › Supporto ProBuilder › Drawsegment con coordinate barindex
- This topic has 11 replies, 2 voices, and was last updated 4 years ago by
robertogozzi.
-
-
11/01/2020 at 11:10 AM #149129
Buongiorno e buona festa di Ognissanti a tutti,
ho riscontrato un altro ostacolo nella realizzazione di uno script (che allego) e riporto qui sotto.
Lo scopo è quello di tracciare dei segmenti sul Momentum in base a delle coordinate ricavate dal movimento dei prezzi.
L’indicatore infatti vacaricato sul momentum
In sintesi se ho una condizione di start verificata a Barindex 50 e una condizione di end a Barindex 150 voglio tracciare un segmento sul momentum da 50 a 150.
Il problema (sorvolando sulle condizioni ricercate che sono giusto di esempio) è che sul momentum non viene tracciato nulla (o al più una barra orizzontale sul margine superiore del riquadro). Le ho provate un po’ tutte ma non ne vengo a capo.
Grazie a chi vorrà rispodnere
12345678910111213141516171819202122232425262728293031ONCE Lup = 1000000 // LowONCE Hdown = 0 //HighONCE Swing =1 // 1 = Up -1 = DownONCE Startbar = 0 // barra inizio segmentoONCE Endbar = 0 // Barra fine segmentoM= MomentumIF Swing = 1 AND high < Lup THENEndbar = barindexLup = lowSwing = -1 // aggiorna stato swingELSIF Swing = 1 AND high => Lup THENLup= lowELSIF Swing = -1 AND low > Hdown THENStartbar = barindexhdown= highSwing = 1 // aggiorna stato swingELSIF Swing = -1 AND low <= Hdown THENHdown = highENDIFDRAWSEGMENT (x1,y1,x2,y2)x1= barindex[startbar]y1= M [Startbar]x2= barindex[Endbar]y2= M [Endbar]RETURN11/01/2020 at 12:00 PM #149139E’ per questo che sto tardando a risponderti all’altro topic.
Un moderatore, Noobywan , mi ha suggerito (solo per la v10.3, in quanto la v11 funziona correttamente), di verificare che siano trascorse almeno le barre necessarie a calcolare gli indicatori.
Tu hai usato MOMENTUM senza periodi, quindi prende per default 12 ed il parametro CLOSE (ti consiglio però di indicare sempre i periodi e, quando necessario, anche il parametro su cui fare i calcoli), quindi devi scrivere alla riga 9:
1IF BarIndex > 12 THENed alla riga 30 scrivi:
1ENDIF11/02/2020 at 6:43 PM #149314Spero per venerdi di riuscire a provare, al momento sono un po impicciato con il lavoro.
Certo che come dice il detto il diavolo si nasconde nei dettagli.
A tutto avrei pensato tranne che a quello.
Per il momento ringrazio te e Noobywan
11/16/2020 at 6:57 PM #150686Buonasera a tutti,
scrivo sempre per i posteri che dovessero riscontrare la mia stessa problematica.
Atteso che anche con la v. 11 lo script presenta evidenti difetti (in breve vengono si tracciati dei segmenti nell’arco temporale desiderato ma con dei valori insensati che non ho ben compreso dove peschi) la sintassi per così dire corretta da utilizzare per ottenere dei segmenti nell’arco temporale e con i valori corretti è la seguente
123456789101112131415161718192021222324252627282930313233ONCE Lup = 1000000 // LowONCE Hdown = 0 //HighONCE Swing =1 // 1 = Up -1 = DownONCE Startbar = 0 // barra inizio segmentoONCE Endbar = 0 // Barra fine segmentoM= Momentum [12] (Close)IF Swing = 1 AND high < Lup THENEndbar = barindexLup = lowSwing = -1 // aggiorna stato swingELSIF Swing = 1 AND high => Lup THENLup= lowELSIF Swing = -1 AND low > Hdown THENStartbar = barindexhdown= highSwing = 1 // aggiorna stato swingELSIF Swing = -1 AND low <= Hdown THENHdown = highENDIFbary1 = barindex [Startbar]bary2 = barindex [Endbar]DRAWSEGMENT (x1,y1,x2,y2)x1= Startbary1= M [bary1]x2= Endbary2= M [bary2]RETURNNella sostanza occorre calcolare (o ricalcolare se preferite) il barindex con la formula
12bary1 = barindex [Startbar]bary2 = barindex [Endbar]e poi utilizzare il barindex ottenuto per determinare il valore che l’indicatore ha in quella barra
12y1= M [bary1]y2= M [bary2]Il che non ha molto senso visto che i valori di Starbar ed >Endbar vengono correttamente riconosciuti nelle variabili temporali x1 e x2 ma tant’è
Ovviamente come già segnalato dal buon Robert è opportuno indicare il periodo ed il valore di calcolo del Momentum
11/16/2020 at 7:05 PM #150687La definizione e valorizzazione delle coordinate mettile alla riga 26, altrimenti come fa DRAWSEGMENT a conoscerle?
11/16/2020 at 7:55 PM #150692Ciao Roberto,
la tua osservazione è corretta ma anche spostandole a riga 26 il risultato non cambia devo “ridefinire” il barindex altrimenti ottengo valori a casaccio.
Cmq mercoledi quando presumibilmente riesco a rimetterci mano proverò a fare altre prove.
Tra le altre stranezze ho notato che richiamando un indicatore in un altro mi “importa” anche alcuni segmenti tracciati col comando DRAW nell’indicatore importato.
Il problema l’ho aggirato creando una copia dell’indicatore ed eliminando i comandi DRAW
Non saprei…nel caso apriro un altro post con lo script incriminato cosi magari gli dai un’occhiata
11/17/2020 at 2:58 PM #150792Ti spiace riepilogarmi cosa vuoi eveidenziare, cioè le condizione in base alle quali i segmenti devono essere tracciati?
Hai la v10.3 o la v11?
11/23/2020 at 6:08 PM #151336ciao Roberto,
appena ho la mente un po’ libera dai casini quotidiani ti posto un codice di esempio semplice e concreto cos’ cerchiamo di arrivare ad una soluzione.
Voglio solo dire che il problema l’ho risolto (aggirato) ricalcolando il barindex.
Cmq come detto appena possibile scrivo nel dettaglio
12/07/2020 at 7:55 PM #152916Rieccomi con la questione drawsegment
Di seguito un esempio giusto per di script che dovrebeb fare quanto segue
Se la candela 5 ha un high maggiore del 10% rispetto al low della candela 0 deve essere tracciato un segmento sul momentum al valore che lo stesso ha alla fine dell’ultimo segmento tracciato fino alla candela 5
Il problema riscontrato è che il segmento salvo applicare un piccolo escamotage non viene tracciato
Lo script va caricato nel riquadro del momentum
123456789101112131415M= MomentumONCE Startbar = 0Condizione = High[5]> Low+(Low*0,05)IF Condizione thenEndbar = barindex [5]x1= Startbary1= M [Startbar]x2= Endbary2= M [Endbar]DRAWSEGMENT (x1,y1,x2,y2)Startbar = EndbarENDIFRETURNGrazie
12/07/2020 at 10:29 PM #152925Alle righe 8 e 10 devi mettere, tra parentesi quadre:
12[BarIndex - Startbar] //riga 8[BarIndex - Endbar] //riga 1012/08/2020 at 12:58 PM #15295812/08/2020 at 1:24 PM #152968Esatto, l’ultima candela è, ad esempio, BARINDEX=1367 a cui si accede mediante l’indice [0] oppure niente, se STARTBAR (o ENDBAR) sono uguali a BARINDEX, facendo la differenza trovi 0 che è l’indica corretto.
BARINDEX è progressivo, da 0 (la prima candela) in avanti, mentre l’indice da mettere tra le parentesi quadre parte da quella corrente [0] e va indietro.
Ed è ovvio che sia così, un contatore come BARINDEX non può che incrementare indefinitivamente (fino alla chiusura dell’indicatore o della piattaforma), mentre per le candele NON puoi fare riferiomento a quelle future, ma a quelle passate, per cui il loro indice è sempre relativo a quella corrente, quindi parte da 0 e deve essere incrementato man mano che ci si sposta nel passato.
Il BARINDEX delle candele si aggiorna man mano che se ne formano di nuove, ma quella corrente avrà sempre valore 0, quella precedente 1, ecc… quindi se tra parentesi quadre metti BARINDEX ti riferisci alla prima candela caricata:
- close[0] si riferisce al prezzo di chiusura delle candela corrente (che è la candela identificata da BarIndex, ad esempio la 1367esima)
- close[BarIndex] è come se avesse 1367 come indice, quindi si riferisce al prezzo di chiusura della candela 0
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on