[SERVICE DESK] Errore nell'ottenere il tempo del TF senior nel timer! - pagina 4

 
Vitaly Gorbunov:
Beh, non direi che è una stampella. Mi aspetto un flusso di citazioni dal server, altrimenti la cronologia non sarà aggiornata. Un'altra opzione è quella di prendere l'ora locale del computer e correggerla per il fuso orario, che può essere calcolato automaticamente e alla fine aspettare comunque l'aggiornamento delle quotazioni. È un po' storto ma non credo che Metakvotov cambierà qualcosa in MT4. Alla fine della giornata è un problema di connessione al server che deve essere gestito in un modo o nell'altro.

Ecco. E hai capito che questo è un problema! Ma, penso che dovrebbe essere corretto e/o l'aiuto dovrebbe essere integrato con un algoritmo per tutti i casi.

La funzione di recupero dei dati non dovrebbe dare dati mancini senza errori e avvertimenti!

Questo non è il mio primo argomento (quello precedente riguardava MT5, non ho avuto alcuna risposta chiara in merito) sulla sincronizzazione e i seguenti blocchi/errori.

 
Alexey Kozitsyn:

Sì, sembra funzionare. Come opzione, può essere usato. Grazie! Ma vorrei comunque che le funzioni funzionassero correttamente.

Funzionerà solo se non ci sono barre mancanti - e questo non può essere garantito. Supponiamo, per esempio, che non ci siano nuove quotazioni sul server per l'ora corrente (e forse anche per l'ora precedente). Di conseguenza, l'ultima barra è una precedente.

 
Ihor Herasko:

Ci sono due errori significativi nel suo approccio alla verifica:

  1. Nella OnInit() dell'indicatore non è possibile ottenere i dati corretti di qualsiasi TF, anche quello corrente. L'OnInit() dell'indicatore all'inizio del terminale viene eseguito quasi in una finestra vuota (potrebbero anche non esserci i dati che erano al momento dell'arresto del terminale). Anche l'ambiente di mercato è spesso ancora indisponibile. L'aiuto contiene molti avvertimenti su cosa non fare in OnInit(). Pertanto, non c'è molto da includere nel suo codice. Di solito, questo è un controllo dei valori dei parametri impostati, il collegamento dei buffer di indicatori agli array, e la creazione di classi, se queste sono utilizzate. Tutto il resto deve essere fatto in OnCalculate().
  2. Tutti questi controlli possono essere fatti solo dopo che OnCalculate è stato chiamato almeno una volta.

Igor, hai rivisto il codice? Dove trovo qualcosa in OnInit()?

2. Quali controlli? Dove sta scritto che l'indicatore deve usare OnCalculate() almeno una volta per funzionare correttamente?

 
Alexey Navoykov:

Funziona solo se non ci sono barre mancanti, il che non può essere garantito. Supponiamo che non ci siano nuove quotazioni sul server per l'ora corrente (e forse anche per l'ora precedente). Di conseguenza, l'ultima barra è una barra precedente.

Questa soluzione (come ho detto, stampella) è molto meglio di niente. Come ho detto (e dimostrato), c'è un bug. Prima gli sviluppatori lo sistemano, meglio è.

 
Così non dà dati falsi, dà l'ultimo dato ricevuto e l'errore non si verificherà fino a quando il terminale inizia a ricevere il flusso di quotazioni. Nel tuo caso, stai cercando di ottenere dati prima che le quotazioni siano ricevute, quindi il programmatore deve gestire lui stesso queste situazioni eccezionali. Così come qualsiasi errore di connessione. Qual è il problema con MT5?
 
Alexey Navoykov:

Funziona solo se non ci sono barre mancanti, il che non può essere garantito. Supponiamo che non ci siano nuove quotazioni sul server per l'ora corrente (e forse anche per l'ora precedente). Rispettivamente, l'ultima barra è una barra precedente.

Il metodo con iBarShift permette di identificare le lacune della storia, ma deve essere controllato a certi intervalli. Ho scritto per me stesso una procedura che se ne occupa, e dopo ho dimenticato le lacune nei programmi MTF.
 
Vitaly Gorbunov:
Così non dà nessun avanzo di dati, dà gli ultimi dati ricevuti e l'errore non si verificherà fino a quando il terminale inizia a ricevere un flusso di quotazioni. Nel vostro caso, state cercando di ricevere i dati prima dell'inizio delle quotazioni. Così come qualsiasi errore di connessione. Qual è il problema con MT5?

Oh, cavolo... Abbiamo già superato quella fase dello smantellamento. Vedi il tuo diario di bordo:

2018.09.21 15:02:42.910 Custom indicator test XAUUSD,H1: removed
2018.09.21 15:15:27.985 test XAUUSD,H1: initialized
2018.09.21 15:15:29.520 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.552 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.589 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.605 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.636 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.667 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.705 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.736 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.768 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.805 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.837 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.868 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.906 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.937 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:29.969 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.006 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.038 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.069 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.106 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.138 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:30.169 test XAUUSD,H1: OnTimer: Связь отсутствует!
2018.09.21 15:15:31.880 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #4066
2018.09.21 15:15:31.900 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.940 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:31.990 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.010 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.074 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.100 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.120 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0
2018.09.21 15:15:32.174 test XAUUSD,H1: test.mq4: Данные истории по последнему часу отсутствуют! Ошибка #0

Sequenza. Prima controlliamo la connessione. Una volta stabilita la connessione, otteniamo l'ora. Spiegatemi, per favore, perché diavolo viene restituito prima l'errore 4066 e poi non viene restituito!? Cosa è cambiato in 20ms dall'ultima chiamata?

 
Vitaly Gorbunov:
Qual è il problema con MT5 lì molto interessante da leggere?

https://www.mql5.com/ru/forum/219829

Клинч в индикаторах mql5.
Клинч в индикаторах mql5.
  • 2017.11.15
  • www.mql5.com
Недавно столкнулся с одной крайне неприятной проблемой...
 
Alexey Kozitsyn:

Questa soluzione (come ho detto, stampella) è molto meglio di niente. Come ho detto (e dimostrato), c'è un bug. Prima gli sviluppatori lo sistemano, meglio è.

Bene, se parliamo della migliore stampella, dovremmo controllare non solo l'ora corrente, ma tutte le ore precedenti dall'ultima barra conosciuta. Altrimenti, ti bloccherai su questo controllo, se non ci sono quotazioni per l'ora corrente.
 
Alexey Kozitsyn:

Oh, cavolo... Abbiamo già superato quel punto. Vedi il tuo diario di bordo:

Sequenza. Prima controlliamo la connessione. Una volta stabilita la connessione, otteniamo l'ora. Spiegatemi, per favore, perché diavolo viene restituito prima l'errore 4066 e poi non viene restituito!? Cosa è cambiato in 20ms dall'ultima chiamata?

I dati vengono caricati errore 4066 poi è un bug metakvotovtsev molto probabilmente ricevuto i dati vengono elaborati per questa situazione un errore non è inventato. Fino a quel punto, tutto ha un senso.