Fate una stampa all'inizio di OnDeinit e dopo aver chiuso il terminale client, guardate il log di Expert e assicuratevi che OnDeinit sia stato chiamato!
Ecco il tuo errore
for(int i=ObjectsTotal()-1;i>=0;i--)
Tu conosci chiaramente gli oggetti che hai creato tu stesso.
Mantenere i loro nomi e cancellarli senza riferimento a ObjectsTotal e ObjectName
PS la nuova build ha aggiunto una funzione per cancellare un gruppo di oggetti per prefisso. Vi aiuterà se nominate i vostri oggetti usando lo stesso prefisso unico nel loro nome
Fate Print all'inizio di OnDeinit e dopo aver chiuso il terminale client, guardate il log di EA e assicuratevi che OnDeinit sia stato chiamato!
Ecco il tuo errore
È chiaro che conosci gli oggetti che hai creato tu stesso.
Salvare i loro nomi e cancellarli senza riferimento a ObjectsTotal e ObjectName
PS La nuova build ha aggiunto una funzione per cancellare un gruppo di oggetti per prefisso. Vi aiuterà se nominate i vostri oggetti usando lo stesso prefisso unico nel loro nome
Ho già avuto modo di testare come funziona la cancellazione di un gruppo di oggetti per prefisso. Ottimo, ma anche il codice compilato nelle build precedenti non funziona. Di conseguenza, può essere usato, per ora, solo per scopi personali. Non dobbiamo forzare gli utenti ad aggiornare per questo. Molti non sanno nemmeno come aggiornare finché non caricano l'aggiornamento sul server DC.
Ecco il punto - l'indicatore è calcolato non solo sull'arrivo dei tick, ma anche sulla prima estrazione e sull'arrivo della storia mancante.
1. Arriva un nuovo tick - l'indicatore viene calcolato.
2. Arriva la cronologia mancante, che riempie il buco tra i dati dell'ultimo avvio del terminale e l'ultimo tick. L'indicatore è calcolato. Ma allo stesso tempo non c'è una nuova condizione del bar!
Per risolvere questo problema è necessario controllare il numero di barre. Circa come questo
Mettete il blocco di inizializzazione del buffer EMPTY_VALUE in Inite. Il problema rimane.
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.
Fate una stampa all'inizio di OnDeinit e dopo aver chiuso il terminale client, guardate il log di Expert e assicuratevi che OnDeinit sia stato chiamato!
Ecco il tuo errore
Tu conosci chiaramente gli oggetti che hai creato tu stesso.
Mantenere i loro nomi e cancellarli senza riferimento a ObjectsTotal e ObjectName
PS la nuova build ha aggiunto una funzione per cancellare un gruppo di oggetti per prefisso. Vi aiuterà se nominate i vostri oggetti usando lo stesso prefisso unico nel loro nome
Fate Print all'inizio di OnDeinit e dopo aver chiuso il terminale client, guardate il log di EA e assicuratevi che OnDeinit sia stato chiamato!
Ecco il tuo errore
È chiaro che conosci gli oggetti che hai creato tu stesso.
Salvare i loro nomi e cancellarli senza riferimento a ObjectsTotal e ObjectName
PS La nuova build ha aggiunto una funzione per cancellare un gruppo di oggetti per prefisso. Vi aiuterà se nominate i vostri oggetti usando lo stesso prefisso unico nel loro nome
In realtà, deinit in tutti i programmi è chiamato quando il terminale è chiuso.
C'è persino un codice speciale per la causa della deinizializzazione. RAGIONE_CHIUSA
E azzera i buffer degli indicatori o no?
E azzera i buffer degli indicatori o no?
La situazione del tuo indicatore è stata risolta.
Ecco il punto - l'indicatore è calcolato non solo sull'arrivo dei tick, ma anche sulla prima estrazione e sull'arrivo della storia mancante.
1. Arriva un nuovo tick - l'indicatore viene calcolato.
2. Arriva la cronologia mancante, che riempie il buco tra i dati dell'ultimo avvio del terminale e l'ultimo tick. L'indicatore è calcolato. Ma allo stesso tempo non c'è una nuova condizione del bar!
Per risolvere questo problema è necessario controllare il numero di barre. Circa come questo
Blocca il blocco di inizializzazione del buffer con un valore vuoto sia in init che in deinit. Il risultato è lo stesso. Cioè non esiste.
Aspettando i commenti degli sviluppatori.
Tutto si azzera. Dopo tutto, il terminale si chiude )))
Hmm. Il blocco di inizializzazione del buffer EMPTY_VALUE è messo in Inite.
Perché? I buffer inite potrebbero non essere ancora allocati.
E quando il buffer è pesantemente bufferizzato (è arrivato un nuovo lotto di dati storici)?
In questi casi, l'inizializzazione dei buffer è fatta prima del calcolo dell'indicatore, quando è chiaro che l'intero indicatore sarà ricalcolato
Perché? I buffer inite potrebbero non essere ancora allocati.
E quando il buffer è molto grande (è arrivato un nuovo lotto di dati storici)?
In questi casi, l'inizializzazione dei buffer è fatta prima del calcolo dell'indicatore, quando è chiaro che l'intero indicatore sarà ricalcolato