Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 93

 
Renat Fatkhullin:

Questo è ciò che fa WinAPI.

Non sono d'accordo.
WinAPI non reagisce alla correzione del tempo locale, a differenza di GetMicrosecondCount.


 
Nikolai Semko:

Non sono d'accordo.
WinAPI non reagisce alla correzione del tempo locale, a differenza di GetMicrosecondCount.

Questo perché il tempo mostrato qui non è assoluto, ma piuttosto un delta dall'inizio del programma:

La funzione GetMicrosecondCount() restituisce il numero di microsecondi che sono passati dall'inizio del programma MQL5.

Poiché il valore del contatore è fisso all'inizio dell'applicazione, questo delta è influenzato dai cambiamenti di data. Seriamente cambiare la data sul tuo computer quando il software dipendente dal tempo è in esecuzione è un sabotaggio e un approccio di uomini russi con una motosega giapponese. Per il gusto di un aneddoto, andrà bene.

La giustificazione "beh, il correttore di tempo in background funziona" non funziona qui - la sua correzione è di millisecondi al giorno e non ha alcun effetto.

Iltimer a microsecondi è necessario per la misurazione precisa di piccoli periodi, non per contare dall'inizio dei tempi.

 
Nikolai Semko:

Non sono d'accordo.
WinAPI non reagisce alla correzione dell'ora locale, a differenza di GetMicrosecondCount.

e come vedi l'applicazione pratica di GetMicrosecondCount che rovina l'intero lavoro del programma nella versione attuale? descrivi l'applicazione pratica

per esempio, non vedo nessuna variante né in c++ né qui, tranne quelle descritte da Renat, cioè misurare il tempo di esecuzione del codice con precisione in mcs

cioè non capisco la sua persistenza, francamente

 
Renat Fatkhullin:

Poiché il valore del contatore all'inizio dell'applicazione è fisso, questo delta è influenzato dal cambio di data. Cambiare seriamente la data su un computer quando un software dipendente dal tempo è in funzione è un sabotaggio e l'approccio di uomini russi con una motosega giapponese. Andrà bene come aneddoto.

Ho mostrato volutamente la sincronizzazione dell'ora su Internet nella gif animata. Questo tipo di sincronizzazione è automatica per impostazione predefinita e avviene abbastanza spesso e secondo il programma senza la partecipazione di nessuno.
E non c'è garanzia che al momento della misurazione questa sincronizzazione possa avvenire.
Non mi preoccupo perché so già di questa peculiarità di GetMicrosecondCount() e che questa funzione è più lenta di GetTickCount.
Ma altri, che non leggeranno questo ramo ma leggeranno l'aiuto per questa funzione anche molto attentamente, potrebbero incorrere in problemi se usano GetMicrosecondCount() nella logica reale dell'EA, perché durante i test tutto sarà OK, ma durante il trading reale al momento della sincronizzazione del tempo pianificata o del passaggio all'ora legale, potrebbe accadere OY, specialmente se il tempo diminuisce e si verifica un overflow come ulong.
E a proposito, questa nuova informazione per me non documentata, ha fatto degli aggiustamenti significativi alla logica della classe multitimer, che viene creata ora e che organizza il funzionamento di diversi timer contemporaneamente. Nel lavoro di questa classe, la funzione microsecondi è stata utilizzata con tutta la sua forza. Ma ora capisco che dovrò sacrificare la precisione di 15625 µs, anche per aumentare la sua velocità.
Faber è un pliz. Non è malvagio, è solo insistente, ma è buono.
Merda, sto per essere bannato anch'io :((

 
Renat Fatkhullin:

Questo perché il tempo visualizzato non è assoluto, ma piuttosto un delta dall'inizio del programma:

Poiché il valore del contatore all'avvio dell'applicazione è fisso, questo delta è influenzato dai cambiamenti di data. Cambiando seriamente la data sul computer quando il software dipendente dal tempo è in esecuzione c'è un sabotaggio e l'approccio di uomini russi con una motosega giapponese. Per il gusto di un aneddoto, andrà bene.

La giustificazione "beh, il correttore di tempo in background funziona" non si applica qui - la sua correzione è di millisecondi al giorno e non ha alcun effetto.

Il timer a microsecondi è necessario per la misurazione precisa di piccoli periodi, non per contare dall'inizio del tempo.

Cioè ha senso resettare periodicamente il terminale?

 
Nikolai Semko:

Ho mostrato specificamente la sincronizzazione dell'ora su internet nella gif animata. Questa sincronizzazione è automatica di default per tutti e avviene su un programma senza che nessuno sia coinvolto e abbastanza spesso.

Ho scritto esplicitamente e chiaramente - la correzione giornaliera di millisecondi è automatica.

E sì, sarete altrettanto colpiti da una funzione WinAPI pura (sia GetTickCount che QueryPerformanceCounter) quando infilate uno scarto nella motosega cambiando la data anche di pochi secondi. Non c'è nessuna protezione che si dice di avere. Ha risucchiato dal nulla sia il problema che la presunta soluzione.

Quindi è tutto giusto - questo è ciò che è WinAPI e questa è la realtà.

 
Aleksey Vyazmikin:

Cioè ha senso riavviare il terminale periodicamente?

No.
 
Renat Fatkhullin:
No.

Il mio contatore del tempo di chiusura delle candele inizia a correre di 5 secondi in una settimana, ho pensato che fosse qualcosa a che fare con il software.

Aiuta a riavviare e sincronizzare l'ora con il servizio interessato.

Ho cambiato la batteria della madre non molto tempo fa.

 
Aleksey Vyazmikin:

Il mio contatore del tempo di chiusura delle candele inizia a correre di 5 secondi in una settimana, ho pensato che fosse qualcosa a che fare con il software.

Aiuta a riavviare e sincronizzare l'ora con il servizio interessato.

Ho cambiato la batteria di mia madre non molto tempo fa.

Impostare il servizio Time interno di Windows per sincronizzarsi ogni notte (o più spesso) con pool.ntp.org e la correzione giornaliera sarà in millisecondi.
 
Renat Fatkhullin:
Impostate un servizio Windows Time interno per sincronizzarsi quotidianamente di notte (o più spesso) con pool.ntp.org e la correzione giornaliera sarà in millisecondi.

Configurato, ma non aiuta - non capisco la ragione. Ma il mio server è ntp2.stratum2.ru