Buongiorno, succede una cosa strana. Ho sviluppato degli indicatori che fanno dei calcoli su un grafico da 30K bars EURUSD futures Full. Questi calcoli, che non vi posto perchè è un sistema troppo complesso di oltre 1000 righe di codice, sono basati sulle date di inizio del grafico e ritornano dei dati che sono stati certificati. Se però l’indicatore lo chiamo da un ProOrder, i risultati appaiono come se il ProOrder fosse partito da una data di circa 1.5 mesi in anticipo.
Ovviamente ho controllato la data inizio del BT che è risultata corretta.
Come spiegate un comportamento simile ?
Prova ad inserire all’inizio
DEFPARAM PreLoadBars = 0
Bene funziona in parte. Con questa modifica effettivamente alcuni calcoli si allineano ma non tutti.
La cosa che sorprende di piu è questa:
Chiamo un indicatore da ProOrder che fa dei calcoli e mi restituisce dei valori.
Se attacco lo stesso indicatore sul grafico passandogli esattamente gli stessi parametri ch egli apsso con il ProOrder, mi restituisce dati diversi
Vi è mai capitato che la maschera degli input si incasinasse ? Ho dovuto cancellare e ricreare una variabile di input altrimenti non la vedeva……….
Gli indicatori precaricano SEMPRE 500 barre, infatti se stampui il valore di BarIndex, vedrai che inizia da 500. Questo valore non può essere modificato.
Però non so se anche gli indicatori richiamati da ProOrder fanno questo precaricamento. Penso di no, quindi questa potrebbe essere una causa delle differenze rimaste.
Però non ne sono certo, forse @nicolas può darci una risposta.
Questo indicatore utilizza date fisse per il suo calcolo? Qualcosa del tipo:
Se data=….
Piu che altro fa calcoli relativi alle barre usando BarIndex
Spiego meglio cosa faccio:
Ho un indicatore “pippo” che richiama al suo interno l’indicatore “Pluto” passandogli dei parametri, per cui:
====== Indicatore Pippo ======
p1 = 1
p2 = 2
p3 =3
A, B = CALL “Pluto” [p1, p2, p3]
Return A, B
L’indicatore Pluto è fatto cosi:
====== Indicatore Pluto ======
p1 = 1
p2 = 2
p3 = 3
bla bla bla…..
Return A, B
Con questa architettura dovrebbe funzionare, ne ho fatti altri cosi, invece non va. In pratica se metto p1 = 10 dentro Pippo, Pluto continua a lavorare con P1 = 1. Se invece lo cambio dentro a Pluto P1 = 10 si vedono gli effetti
Al momento, a parte una differenza di calcolo dovuta alla quantità di cronologia disponibile diversa tra quella visualizzata per l’indicatore e quella interna a probacktest, non posso spiegare queste differenze, e senza aver letto il codice completo.
Tuttavia, puoi provare a impostare preloadbars=10000 e visualizzare solo una quantità di unità pari o inferiore a 10000 e vedere se questo fa la differenza in meglio.
Allora vi aggiorno, il motivo della differenza lo abbiamo capito, erano le 500 barre precaricate sui grafici che non vengono precaricate in BT quando Defparam PreloadBars = 0.
Ma il problema dei disallineamenti rimaneva e sembrava legata alla incapacità del primo indicatore di chiamare il secondo passandogli delle variabili. Alla fine ho risolto cancellando e reinserendo completamente le variabili nell’interfaccia BT, nell’header insomma. E’ la seconda o la terza volta che quella interfaccia mi crea problemi. Visivamente sembra tutto ok ma in realtà non funziona correttamente. Sarebbe molto meglio mettere le variabili in un file (come fa MT4) che sia editabile, in modo da poter controllare eventuali anomalie. Con l’attuale sistema ti devi fidare che vada tutto bene e perdere un sacco di tempo quando non è cosi.
Per testare le variabili nel codice, puoi utilizzare le seguenti istruzioni:
GRAPH
GRAPHONPRICE
PRINT
Che differenza c’è tra Graph/GraphOnPrice e PRINT ?
Domanda: c’è un limite al numero di parametri che possono essere inseriti nell’header di un indicatotre o ProOrder ?
Alessandro Furlani ha scritto: Che differenza c’è tra Graph/GraphOnPrice e PRINT?
GRAPH visualizza i valori delle variabili sotto il grafico.
GRAPHONPRICE visualizza i valori delle variabili sul grafico dei prezzi
PRINT visualizza i valori delle variabili come una tabella in una finestra separata.
Tutte queste istruzioni ti permetteranno di eseguire il debug dei valori delle tue variabili durante la tua prossima sessione di programmazione.
Alessandro Furlani wrote: Domanda: c’è un limite al numero di parametri che possono essere inseriti nell’header di un indicatotre o ProOrder ?
Non ho un’idea precisa del limite massimo, ma sono più di 100 le variabili esterne possibili per un indicatore.