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
ONCE Lup = 1000000 // Low
ONCE Hdown = 0 //High
ONCE Swing =1 // 1 = Up -1 = Down
ONCE Startbar = 0 // barra inizio segmento
ONCE Endbar = 0 // Barra fine segmento
M= Momentum
IF Swing = 1 AND high < Lup THEN
Endbar = barindex
Lup = low
Swing = -1 // aggiorna stato swing
ELSIF Swing = 1 AND high => Lup THEN
Lup= low
ELSIF Swing = -1 AND low > Hdown THEN
Startbar = barindex
hdown= high
Swing = 1 // aggiorna stato swing
ELSIF Swing = -1 AND low <= Hdown THEN
Hdown = high
ENDIF
DRAWSEGMENT (x1,y1,x2,y2)
x1= barindex[startbar]
y1= M [Startbar]
x2= barindex[Endbar]
y2= M [Endbar]
RETURN
E’ 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:
IF BarIndex > 12 THEN
ed alla riga 30 scrivi:
ENDIF
Spero 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
Buonasera 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
ONCE Lup = 1000000 // Low
ONCE Hdown = 0 //High
ONCE Swing =1 // 1 = Up -1 = Down
ONCE Startbar = 0 // barra inizio segmento
ONCE Endbar = 0 // Barra fine segmento
M= Momentum [12] (Close)
IF Swing = 1 AND high < Lup THEN
Endbar = barindex
Lup = low
Swing = -1 // aggiorna stato swing
ELSIF Swing = 1 AND high => Lup THEN
Lup= low
ELSIF Swing = -1 AND low > Hdown THEN
Startbar = barindex
hdown= high
Swing = 1 // aggiorna stato swing
ELSIF Swing = -1 AND low <= Hdown THEN
Hdown = high
ENDIF
bary1 = barindex [Startbar]
bary2 = barindex [Endbar]
DRAWSEGMENT (x1,y1,x2,y2)
x1= Startbar
y1= M [bary1]
x2= Endbar
y2= M [bary2]
RETURN
Nella sostanza occorre calcolare (o ricalcolare se preferite) il barindex con la formula
bary1 = barindex [Startbar]
bary2 = barindex [Endbar]
e poi utilizzare il barindex ottenuto per determinare il valore che l’indicatore ha in quella barra
y1= 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
La definizione e valorizzazione delle coordinate mettile alla riga 26, altrimenti come fa DRAWSEGMENT a conoscerle?
Ciao 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
Ti spiace riepilogarmi cosa vuoi eveidenziare, cioè le condizione in base alle quali i segmenti devono essere tracciati?
Hai la v10.3 o la v11?
ciao 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
Rieccomi 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
M= Momentum
ONCE Startbar = 0
Condizione = High[5]> Low+(Low*0,05)
IF Condizione then
Endbar = barindex [5]
x1= Startbar
y1= M [Startbar]
x2= Endbar
y2= M [Endbar]
DRAWSEGMENT (x1,y1,x2,y2)
Startbar = Endbar
ENDIF
RETURN
Grazie
Alle righe 8 e 10 devi mettere, tra parentesi quadre:
[BarIndex - Startbar] //riga 8
[BarIndex - Endbar] //riga 10
ah perchè barindex conta da 0 (la prima a sinistra) a diciamo 99 (l’ultima a destra)
invece il valore tra [] conta da 0 (l’ultima a destra) a 99 (la prima a sinistra)
Giusto?
Esatto, 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