Buongiorno,
ho scritto una programmino che lavora su TIMEFRAME 30 minuti che necessita del valore dell’ATR[5 daily](close).
Per fare ciò alla fine della routine ho scritto questo codice che mi calcola correttamente l’ATR a 5 periodi su TimeFrame daily e lo memorizza nella Variabile ATR.
TIMEFRAME(Daily)
ATR=AverageTrueRange[5](close)
TIMEFRAME(default)
tuttavia quando il TimeFrame viene aggiornato, ossia crea la nuova candela, il valore della variabile ATR nel TimeFrame 30minuti diventa n/d. a questo punto per eliminare l’errore devo aprire le impostazioni del mio programmino cambiare un parametro e tutto si sistema. Poi alla formazione della candela successiva il problema ritorna.
Il codice viene letto sequenzialmente, per cui se l’ATR daily l’hai messo alla fine, prima può prendere valori errati, oppure nessun valore.
Sposta le righe che hai scritto all’inizio, o comunque PRIMA che la variabile ATR sia utilizzata.
Verifica anche di avere un numero sufficiente di unità per il calcolo, in un giorno ci sono 48 candele (forse meno, se gli orari di trading non sono 24 ore) da 30 minuti, quindi ne servono circa 250.
Forse in questo modo lo risolvi.
Grazie per la risposta, ma il problema si presenta ogni volta che si crea una nuova candela.
Ti allego il codice.
Lo eseguo come indicatore sui prezzi e Time Frame a 30 minuti
DEFPARAM DrawOnLastBarOnly = true
IF IntraDayBarIndex = 0 THEN
MaxIntDay = high
MinIntDay = low
ENDIF
If Abilita then
DrawText(“ATR[5]=#ATR#”,barindex+20,MaxIntDay ) coloured(0,0,255,150) //Blù
endif
TIMEFRAME(Daily)
ATR=AverageTrueRange[5](close)
TIMEFRAME(default)
return
A me funziona correttamente, sia spostando il codice in alto che lasciandolo invariato (però in alto stampa il dato fisso).
N/D mi si ptesenta solo se ho un numero di unità insufficienti.
Averi un’altra domanda se possibile.
Vorrei un codice che mi permettesse di leggere il margine disponibile su uno strumento in modo da poterlo usare all’interno del programma per poter definire il numero di contratti massimi utilizzabili dato il capitale.
Sapresti darmi indicazioni in merito
Purtroppo non è possibile saperlo automaticamente.
Buongiorno, ho notato che nel TF 30 min (di oggi) il valore riportato del ATR del giorno precedente è leggermente diverso da quello rappresentato nel TF daily di ieri. Per esempio se guardo il TF daily ieri avevo un ATR di 127,17 mentre oggi nel TF 30 min mi riporta il valore di ieri pari a 128,49. E’ possibile far coincidere i valori ?.
Grazie
Allego file.
Prova questa versione modificata, che ti fa vedere il valore aggiornato alla candela da 30 minuti precedente, mi sembra sia quasi identico, a parte alcuni decimali (che non hanno molta influenza):
DEFPARAM DrawOnLastBarOnly = true
IF IntraDayBarIndex = 0 THEN
MaxIntDay = high
MinIntDay = low
ENDIF
If Abilita then
MyATR = ATR
x = MyATR[1]
DrawText("ATR[5]=#x#",barindex+20,MaxIntDay ) coloured(0,0,255,150) //Blù
endif
TIMEFRAME(Daily)
ATR=AverageTrueRange[5](close)
TIMEFRAME(default)
return
Buonasera,
a me dice di definire la variabile Abilita
L’avevi tu nel tuo codice, in ogni caso scrivi alla riga 2:
Abilita = 1
oppure definiscila come variabile in modo da poterla cambiare con le proprietà.