L'incredibile capacità di rispondere alla domanda sbagliata...
Ora spiegatemi cosa succede se:
1. 100 barre ricalcolate, inserite nei buffer da 0 a 99 inclusi (consideriamo la direzione come serie temporale) il valore 1.03
2. Improvvisamente, la storia è stata caricata e prev_calculato è diventato 0.
Da quale barra dell'indicatore il valore sarà 1,03?
Per calcolare l'indicizzazione come nelle serie temporali, dovremmo impostare il flag AS_SERIES in OnInit() del buffer dell'indicatore - ecco perché preferisco usare il concetto "la barra più a destra" - in questo modo nessuno sarà erroneamente informato.
Ecco la risposta:
if(prev_calculated==0) { //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории for(int i=0;i<rates_total;i++) ExtBuffer[i]=1.01; return(rates_total); }
a "prev_calculated==0" assolutamente tutti gli elementi del buffer dell'indicatore saranno reinizializzati con i valori "1.01" e usciranno immediatamente con "return(rates_total);". Cioè, nessuna traccia dei precedenti valori "1.03" rimarrà nel buffer dell'indicatore.
Meglio spiegare come sbarazzarsi dei rifiuti laPRIMA volta che si avvia l'indicatore.
È semplice - dimentica prev_calculated, crea il tuo duplicato senza il "buco nel lato". Se vuoi tenere traccia delle barre calcolate in precedenza - comefxsaber nell'esempio.
Se un semplice flag first run / non più first run è sufficiente, sostituire prev_calculated con static bool b_First_Run. Oppure potete mettere l'inizializzazione del buffer a OnInint
Per considerare l'indicizzazione come in una serie temporale, dovremmo impostare il flag AS_SERIES in OnInit() del buffer dell'indicatore - ecco perché preferisco usare "rightmost bar" - così nessuno sarà erroneamente informato.
Ecco la risposta:
if(prev_calculated==0) { //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории for(int i=0;i<rates_total;i++) ExtBuffer[i]=1.01; return(rates_total); }
a "prev_calculated==0" assolutamente tutti gli elementi del buffer dell'indicatore saranno reinizializzati con i valori "1.01" e usciranno immediatamente con "return(rates_total);". Cioè, nessuna traccia dei precedenti valori "1.03" rimarrà nel buffer dell'indicatore.
Quindi, questo è il problema che dovrebbe essere risolto. Non ho bisogno di spazzatura (non proprio, ma interferisce con la visualizzazione), ma ho bisogno di salvare i calcoli precedenti dell'indicatore. Quando si avvia l'indicatore la PRIMA volta il buffer diventa spazzatura, e quando si carica la storia tutto ciò che è stato inserito nei buffer dovrebbe essere salvato... e preferibilmente senza salvarlo in un file o in GV.
aggiunto:
Questo ha lo scopo di stimare il drawdown in tempo reale ogni minuto. L'Expert Advisor lavora per una settimana senza fermarsi, e invece della visualizzazione settimanale vedremo solo l'ultimo valore, che è visibile anche senza l'indicatore.
Alexander Puzanov: Se un semplice flag di prima esecuzione / non più di prima esecuzione è sufficiente, sostituire prev_calculated con static bool b_First_Run. E potete mettere l'inizializzazione del buffer in OnInint
fxsaber: No, gli obiettivi non sono così primitivi.
Questo non è il tuo suggerimento,Alexey Viktorov come ho capito ha solo bisogno di azzerare i buffer al primo avvio e non toccare nulla in essi durante qualsiasi paginazione
Quindi questo è il problema che deve essere risolto. Non ho bisogno di spazzatura (non ne ho bisogno, ma interferisce con la visualizzazione), ma ho bisogno di salvare i calcoli precedenti dell'indicatore. Quando si avvia l'indicatore la PRIMA volta il buffer diventa spazzatura, e quando si carica la storia tutto ciò che è stato inserito nei buffer dovrebbe essere salvato... e preferibilmente senza salvarlo in un file o in GV.
aggiunto:
Questo è inteso come una stima in tempo reale del drawdown ogni minuto. L'Expert Advisor lavora per una settimana senza fermarsi, e invece della visualizzazione settimanale vedremo solo l'ultimo valore, che è visibile anche senza indicatore...
Alexander Puzanov: Alexey Viktorov, come ho capito, ha bisogno solo di questo: azzerare i buffer al primo avvio e non toccare nulla in essi durante tutta la paginazione
Naturalmente, ho iniziato con l'inizializzazione dei buffer in OnInit(), ma qualcosa era sbagliato. Non ricordo cosa e li ho inizializzati in OnCalculate con prev_calculated == 0
Anche quando l'indicatore viene rimosso dal grafico e impostato di nuovo, NON TUTTI, ma alcuni buffer hanno ancora i vecchi valori. Non sono nemmeno esattamente quelli che erano prima, ma uno di questi valori si estende su diverse barre.
Karputov Vladimir: Ora ha più senso. Vi farò sapere stasera.
Scusa per il ritardo nella risposta. L'unico modo per salvare i valori calcolati per questo lasso di tempo è salvarli in un file. Questo richiede una sincronizzazione - i dati dovrebbero essere distribuiti sulle loro barre quando si legge dal file. Il modo più logico è quello di sincronizzarlo con il tempo di apertura della barra, ma ci possono essere alcune sfumature: per esempio, il tempo di apertura della barra (salvato in un file) era 2016.09.05. 25:02, ma ora c'è una barra sul grafico con tempo uguale a 2016.09.05. 25:01.
Karputov Vladimir: Scusa per il ritardo nella risposta. L'unico modo per salvare i valori calcolati per un determinato periodo di tempo è quello di salvarli in un file. È necessario occuparsi della sincronizzazione - in modo che quando si legge dal file i dati siano posizionati sulle loro barre. La soluzione più logica è la sincronizzazione secondo il tempo di apertura della barra, ma ci possono essere alcune sottigliezze: per esempio, il tempo di apertura della barra (salvato in un file) era 2016.09.05. 25:02, ma ora c'è una barra sul grafico con il tempo uguale a 2016.09.05. 25:01.
O forse sarebbe meglio attirare l'attenzione degli sviluppatori sul problema dell'inizializzazione dei buffer degli indicatori? Perché non c'è questo problema in MT4? Forse di nuovo una comprensione non completa? Il problema è che anche dopo l'inizializzazione obbligatoria dei buffer dopo aver tolto un indicatore da un grafico in CIASCUNO di essi, non tutti i buffer contengono spazzatura, e non possiamo scaricarla da lì...
Personalmente non mi dispiacciono le stampelle, ma solo se queste stampelle non sono troppo complicate e con effetto positivo. Ma scrivere su un file e poi leggerlo è una stampella scadente.
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
L'incredibile capacità di rispondere alla domanda sbagliata...
Ora spiegatemi cosa succede se:
1. 100 barre ricalcolate, inserite nei buffer da 0 a 99 inclusi (consideriamo la direzione come serie temporale) il valore 1.03
2. Improvvisamente, la storia è stata caricata e prev_calculato è diventato 0.
Da quale barra dell'indicatore il valore sarà 1,03?
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
Meglio spiegare come sbarazzarsi dei rifiuti laPRIMA volta che si avvia l'indicatore.
Non è affatto una stampella. È così che faccio io.
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
Quindi, questo è il problema che dovrebbe essere risolto. Non ho bisogno di spazzatura (non proprio, ma interferisce con la visualizzazione), ma ho bisogno di salvare i calcoli precedenti dell'indicatore. Quando si avvia l'indicatore la PRIMA volta il buffer diventa spazzatura, e quando si carica la storia tutto ciò che è stato inserito nei buffer dovrebbe essere salvato... e preferibilmente senza salvarlo in un file o in GV.
aggiunto:
Questo ha lo scopo di stimare il drawdown in tempo reale ogni minuto. L'Expert Advisor lavora per una settimana senza fermarsi, e invece della visualizzazione settimanale vedremo solo l'ultimo valore, che è visibile anche senza l'indicatore.
Se un semplice flag di prima esecuzione / non più di prima esecuzione è sufficiente, sostituire prev_calculated con static bool b_First_Run. E potete mettere l'inizializzazione del buffer in OnInint
No, gli obiettivi non sono così primitivi.
Quindi questo è il problema che deve essere risolto. Non ho bisogno di spazzatura (non ne ho bisogno, ma interferisce con la visualizzazione), ma ho bisogno di salvare i calcoli precedenti dell'indicatore. Quando si avvia l'indicatore la PRIMA volta il buffer diventa spazzatura, e quando si carica la storia tutto ciò che è stato inserito nei buffer dovrebbe essere salvato... e preferibilmente senza salvarlo in un file o in GV.
aggiunto:
Questo è inteso come una stima in tempo reale del drawdown ogni minuto. L'Expert Advisor lavora per una settimana senza fermarsi, e invece della visualizzazione settimanale vedremo solo l'ultimo valore, che è visibile anche senza indicatore...
Alexey Viktorov, come ho capito, ha bisogno solo di questo: azzerare i buffer al primo avvio e non toccare nulla in essi durante tutta la paginazione
Ricontrollato cosa succede se gli array di buffer sono inizializzati in OnInit().
Anche quando l'indicatore viene rimosso dal grafico e impostato di nuovo, NON TUTTI, ma alcuni buffer hanno ancora i vecchi valori. Non sono nemmeno esattamente quelli che erano prima, ma uno di questi valori si estende su diverse barre.
Ora ha più senso. Vi farò sapere stasera.
Scusa per il ritardo nella risposta. L'unico modo per salvare i valori calcolati per un determinato periodo di tempo è quello di salvarli in un file. È necessario occuparsi della sincronizzazione - in modo che quando si legge dal file i dati siano posizionati sulle loro barre. La soluzione più logica è la sincronizzazione secondo il tempo di apertura della barra, ma ci possono essere alcune sottigliezze: per esempio, il tempo di apertura della barra (salvato in un file) era 2016.09.05. 25:02, ma ora c'è una barra sul grafico con il tempo uguale a 2016.09.05. 25:01.
O forse sarebbe meglio attirare l'attenzione degli sviluppatori sul problema dell'inizializzazione dei buffer degli indicatori? Perché non c'è questo problema in MT4? Forse di nuovo una comprensione non completa? Il problema è che anche dopo l'inizializzazione obbligatoria dei buffer dopo aver tolto un indicatore da un grafico in CIASCUNO di essi, non tutti i buffer contengono spazzatura, e non possiamo scaricarla da lì...
Personalmente non mi dispiacciono le stampelle, ma solo se queste stampelle non sono troppo complicate e con effetto positivo. Ma scrivere su un file e poi leggerlo è una stampella scadente.