Buongiorno e buona domenica a tutti,
ho riscontratto un altro problema con gli screener ovvero l’errore bloccante allegato nell’immagine .
Il messaggio compare quando utilizzo la funzione for do next in particolare mi è capitato in due occasioni
Nella prima (uno screener derivante da un indice personalizzato) ho risolto frapponendo fra le diverse funzioni “FOR” un “IF” del tutto inutile, in pratica dopo ogni comando “NEXT” ho inserito un IF (del tipo IF 1>0)
Nel secondo caso (uno screener a se stante in cui cioè tutti i comandi sono inclusi nello screener stesso) il problema si presenta quando inserisco la funzione FOR dove il parametro iniziale è dato da (Barindex-Abar) e quello finale da (Barinex-Bbar) dove Abar e Bbar sono delle posizioni calcolate in precedenza.
La domanda è da cosa dipende questo errore ma soprattutto in cosa sbaglio e come è risolvibile senza sotterfugi tipo quello descritto sopra?
Grazie
Per il problema del negativo, un indice di riferimento non deve essere inferiore a 0 o ad 1 (dipende dove lo usi), quindi puoi usare MAX per risolverlo:
Indice = .... //calcolo del valore
If close[max(0,Indice)] ..... //assicurarsi che non sia < 0
Per l’altro errore, ProScreener può solo accedere alle ultime 254 barre, non oltre.
Ciao Roberto,
dunque ho fatto delle prove per verificare di rispettare i requisiti >0 e <254 (in pratica ho inserito le differenze barindex-Abar e barindex-Bbar come criteri) ed i valori riportati sono tutti tra 49 e 20 (cosa corretta visto che sto ricercando dati nelle ultime 60 candele) quindi rispettano i vincoli detti sopra.
Ma se riporto le due differenze come valori di riferimento per il “FOR” continua a darmi errore.
Inoltre barindex-Abar viene utilizzata poco prima nello stesso screen senza dare problemi
Per farla breve questo screen funziona
//Settings
myA, myB, myC, myD, myE, myAbar, myEbar = CALL "1 TS Finder classic (screener)"
//Codizioni
//Configurazione base
C1= myC<myA and MyC<MyE
//Tempi
C4 = ((Barindex-MyAbar) - (Barindex-MyEbar))=> 10//il tempo di formazione calcolato dalla spalla SX (A) alla spalla DX (E) non deve essere inferiore a 10 candele
C5 = ((Barindex-MyAbar) - (Barindex-MyEbar))<= 30//il tempo di formazione calcolato dalla spalla SX (A) alla spalla DX (E) non deve essere inferiore a 10 candele
//Volumi
//Vol = Volume
C7= barindex-myAbar
SCREENER [C1 and C2 and C3 and C4 and C5] (C7 as "prova")
questo invece mi restituisce errore
//Settings
myA, myB, myC, myD, myE, myAbar, myEbar = CALL "1 TS Finder classic (screener)"
//Codizioni
//Configurazione base
C1= myC<myA and MyC<MyE
//Tempi
C4 = ((Barindex-MyAbar) - (Barindex-MyEbar))=> 10//il tempo di formazione calcolato dalla spalla SX (A) alla spalla DX (E) non deve essere inferiore a 10 candele
C5 = ((Barindex-MyAbar) - (Barindex-MyEbar))<= 30//il tempo di formazione calcolato dalla spalla SX (A) alla spalla DX (E) non deve essere inferiore a 10 candele
//Volumi
Vol = Volume
FOR i = barindex-myAbar TO 60 DO
VolA=VolA+Vol[i]
NEXT
SCREENER [C1 and C2 and C3 and C4 and C5 and C7]
Ancora una volta credo non dipenda dallo script in se ma da qualche bug (simile a quello che non restituisce risultati se nell’indice richiamato dallo screene si usano le funzioni draw)
Alego anche printstamp dei risultati se uso il criterio C7 come si può notare tutti i valori sono ben lontani da 254 e sono positivi
Eh nulla, scusate i post uno dietro l’altro ma alla fine ho tamponato così
//Volume
Vol = Volume
//OA
IF myObar<myAbar THEN
VolOA=0
FOR i=barindex-myAbar to barindex-myObar DO
VolOA= VolOA+Vol[i]
NEXT
ENDIF
Obar è sempre e comunque < di Abar quindi all’atto pratico non cambia nulla solo che così lo screen funge.
Mi piacerebbe cmq capire da cosa dipende o se sbaglio qualcosa io nello script perchè francamentem i da un po’ fastidio ritrovarmi un codice con un IF inutile nel mezzo
Prova a scrivere la riga 17 così:
VolA=VolA+Vol[max(0,i)]
Ciao Roberto,
ora funziona anche senza l’IF ma giuro non ho modificato nulla, stavo provando ad inserire la riga di comando da te suggerita e quindi ho eliminato l’IF ho rilanciato lo screen senza IF ed ha funzionato.
Non so che dire.
Grazie della disponibilità