Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 74

 
Vitaly Muzichenko:

Come posso scoprire se non ci sono quotazioni perché è un giorno di riposo o se non ci sono quotazioni il giovedì perché il server della sala di negoziazione si è bloccato?

È possibile determinare il fatto che è un giorno di riposo, utilizzando l'ora locale.

E il calcolo di GMTOffset dovrebbe essere fatto solo in OnTick. Finché il tick non è arrivato, non usare il tempo del server nei calcoli. Nella maggior parte dei casi non è davvero necessario.

Come ultima risorsa, se GMTOffset è stato richiesto nel fine settimana, dare un messaggio all'utente e forse richiedere il server GMTOffset da lui.

 
Il GMTOffset sui simboli forex può essere determinato dall'orario di chiusura/apertura della settimana di trading. Dopo tutto, l'ora locale di questo evento è nota.
 
Ihor Herasko:

Il fatto del giorno di riposo può essere determinato dall'ora locale.

Ma il calcolo del GMTOffset del server dovrebbe essere fatto solo a OnTick. Finché il tick non è arrivato, non usate il tempo del server nei calcoli. Nella maggior parte dei casi non è davvero necessario.

Come ultima risorsa, se GMTOffset è richiesto in un fine settimana, allora emettete un messaggio all'utente ed eventualmente richiedete un GMTOffset del server da loro.

fxsaber:
Il GMTOffset sui simboli forex può essere determinato dall'orario di chiusura/apertura della settimana di trading. Dopo tutto, l'ora locale di questo evento è nota.

Non conosciamo l'orario del server il sabato e la domenica, sappiamo solo l'orario di arrivo dell'ultimo preventivo. Inoltre non sappiamo in quale fuso orario lavora il server.

Abbiamo davvero bisogno di una funzione che mostri l'ora attuale del server, qualcosa come: TimeServer(); allora sappiamo sempre che l'ora del server è maggiore dell'ora dell'ultima citazione, significa che o è giorno di riposo, o è appeso. GMTOffset non ci salva.

P.S. La domanda non riguarda solo i simboli forex.
 
Vitaly Muzichenko:

Non sappiamo l'ora del server il sabato e la domenica, sappiamo solo l'ora dell'ultima citazione. Inoltre non sappiamo in quale fuso orario lavora il server.

Per il Forex è risolto come ho detto sopra.

 
Vitaly Muzichenko:

Non sappiamo l'orario del server il sabato e la domenica

Per il fatto di conoscere l'ora locale.

Conosciamo solo l'ora di arrivo dell'ultimo preventivo. Inoltre non sappiamo in quale fuso orario si trova il server.

Abbiamo davvero bisogno di una funzione che mostri l'ora attuale del server, qualcosa come TimeServer(); allora sapremmo sempre se l'ora del server è superiore a quella dell'ultima citazione, il che significa che il server è spento o bloccato. GMTOffset non ci salva.

Se conosciamo l'ora locale, non abbiamo nemmeno bisogno di indovinare. Lo usiamo per decidere se è un fine settimana o no. E conoscere il server GMTOffset ci dà solo la possibilità di calcolare il tempo del server. Non sostengo che la funzione TimeServer() sarebbe utile. Ciononostante, anche senza di essa ora possiamo cavarcela.

 
Ihor Herasko:

L'ora locale è nota.

Se conosci l'ora locale, non devi nemmeno indovinare. Si usa per determinare se è un giorno di riposo o meno. E conoscere il GMTOffset del server dà solo la possibilità di calcolare l'ora del server. Non sostengo che la funzione TimeServer() sarebbe utile. Ciononostante, anche senza di esso, ora puoi cavartela.

Non è il tempo del server.

Документация по MQL5: Дата и время / TimeGMTOffset
Документация по MQL5: Дата и время / TimeGMTOffset
  • www.mql5.com
Возвращает текущую разницу между временем GMT и локальным временем компьютера в секундах с учетом перехода на зимнее или летнее время. Зависит от настроек времени на компьютере пользователя.
 
Vitaly Muzichenko:

Non è l'ora del server.

Sto parlando di TimeLocal(). Naturalmente, abbiamo bisogno anche di TimeGMTOffset. Se ci sono dei tic, possiamo calcolare facilmente il ServerGMTOffset. Se l'EA ha ricevuto almeno un tick reale, sarà in grado di utilizzare TimeLocal() per calcolare l'ora corrente del server.

Il problema si verifica quando l'EA è partito senza l'arrivo del tick. In questo caso, dobbiamo determinare se è il fine settimana. Se è un fine settimana, tutti i calcoli relativi al tempo reale del server dovranno essere rimandati fino alla fine del fine settimana. Se è così necessario eseguire i calcoli durante il fine settimana, allora chiediamo all'utente di specificare ServerGMTOffset. Prendi questi dati e usa TimeLocal() e TimeGMTOffset() per ottenere l'ora corrente del server.

 
Ihor Herasko:

Sto parlando di TimeLocal(). Naturalmente, abbiamo bisogno anche di TimeGMTOffset. Se ci sono dei tic, non abbiamo problemi a calcolare il ServerGMTOffset. Se l'EA ha ricevuto almeno un tick reale, sarà in grado di utilizzare TimeLocal() per calcolare l'ora corrente del server.

Il problema si verifica quando l'EA è partito senza l'arrivo del tick. In questo caso, dobbiamo determinare se è il fine settimana. Se è un fine settimana, tutti i calcoli relativi al tempo reale del server dovranno essere rimandati fino alla fine del fine settimana. Se è così necessario eseguire i calcoli durante il fine settimana, allora chiedete all'utente di specificare ServerGMTOffset. Ricevendo questi dati e usando TimeLocal() e TimeGMTOffset(), otteniamo l'ora attuale del server.

Esattamente. Appendi l'Expert Advisor sul grafico al momento di "no ticks". Questo può essere qualsiasi cosa, e anche un fine settimana.

L'ora dell'ultimo tick è di 15 minuti fa (l'EA non lo sa, e nemmeno noi), ma a che ora gira il server? È davvero 15 minuti fa, o forse 1h.15m, o 3h.15m?

 
Vitaly Muzichenko:

Esattamente. Appendi l'EA sul grafico durante il periodo "senza tick". Questo può essere qualsiasi cosa, e anche un fine settimana.

L'ora dell'ultimo tick è di 15 minuti fa (l'EA non lo sa, e nemmeno noi), ma che ora usa il server? È davvero 15 minuti fa, o può essere 1h.15m, o 3h.15m?

Vitaly, i fusi orari differiscono tra loro di almeno 1 ora. Per essere più precisi, è un multiplo di 1 ora. Rispettivamente, se la differenza è più di un'ora, significa che è successo qualcosa.

Più concretamente è possibile ricevere la differenza tra l'ora locale e quella del server in OnInit, quindi confrontarla con la differenza attuale. In generale, le opzioni sono per i fan.

 
Alexey Viktorov:

Vitaly, i fusi orari differiscono di almeno 1 ora. Per essere più precisi, è un multiplo di 1 ora. Di conseguenza, se la differenza è più di 1 ora, significa che è successo qualcosa.

Più concretamente è possibile ricevere la differenza tra l'ora locale e quella del server in OnInit, poi confrontarla con la differenza attuale. In generale, opzioni per il dilettante.

Ho messo l'EA sul grafico il sabato, ma l'EA può ricevere l'ora dell'ultimo tick, per esempio, sono le 23:58 in Market Watch e la mia ora locale è 04:45. Il tempo del server non lo so.

La mia domanda è: quanto tempo è passato dall'ultimo tick all'ora del server (ora del terminale)

Motivazione: