prev_calcolato - pagina 3

 
Alexey Viktorov:

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?

  1. 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.
  2. 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.
 
Alexey Viktorov:

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.
fxsaber:
Non è affatto una stampella. È così che faccio io.
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
 
Karputov Vladimir:
  1. 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.
  2. 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
No, gli scopi non sono così primitivi.
 
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
 
Alexey Viktorov:

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...

О! Ora ha più senso. Risponderò in serata.
 
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
 

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.

 
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.