Un minuto e mezzo di differenza tra l'ora locale e l'ora fresca di zecca. Cosa fare.

 

Ho scritto un piccolo Expert Advisor, che mostra la massima differenza tra il tempo del computer locale e il tempo del nuovo tick time_msc (appena ricevuto).

Approssimativamente, misura TimeLocal() solo in millisecondi meno il tempo dell'ultimo tick Tick.teme_msc . Il tick viene ricevuto usando SymbolInfoTick.

Non ha preso molto in giro. 24 caratteri nella panoramica del mercato. OnTimer() con periodo di chiamata 1 millisecondo. Sto facendo il polling di tutti i simboli con SymbolInfoTick. Se una zecca è nuova, faccio delle misure.

Ho testato l'Expert Advisor alla sera. Ecco i risultati:

Nuove zecche catturate 46800

Tempo minimo tra l'ora locale del computer e l'ora della zecca -7048 millisecondi (con segno meno)

Tempo medio tra l'ora locale del computer e l'ora del tick -6819 millisecondi (con meno)

Tempo massimo tra l'ora locale del computer e l'ora del tick -97082 millisecondi (con più)


Come affrontare questo?

 
pivomoe:

Ho scritto un piccolo Expert Advisor che mostra la massima differenza tra il tempo del computer locale e il tempo del nuovo tick time_msc (appena ricevuto).

Approssimativamente, misura TimeLocal() solo in millisecondi meno il tempo dell'ultimo tick Tick.teme_msc . Il tick viene ricevuto usando SymbolInfoTick.

Non ha preso molto in giro. 24 caratteri nella panoramica del mercato. OnTimer() con periodo di chiamata 1 millisecondo. Sto facendo il polling di tutti i simboli con SymbolInfoTick. Se una zecca è nuova, faccio delle misure.

Ho testato l'Expert Advisor alla sera. Ecco i risultati:

Nuove zecche catturate 46800

Tempo minimo tra l'ora locale del computer e l'ora della zecca -7048 millisecondi (con segno meno)

Tempo medio tra l'ora locale del computer e l'ora del tick -6819 millisecondi (con meno)

Tempo massimo tra l'ora locale del computer e l'ora del tick -97082 millisecondi (con più)


Come affrontare questo?

Ho dato un'occhiata al tuo codice...

Non lo stai facendo affatto bene.

Devi aggiungere gli strumenti più liquidi a Market Watch.

Poi aggiungete i loro vasi di denaro.

E, quando OnBookEvent() si innesca, copiare 1 tick (l'ultimo) ci sarà il tempo e prendere immediatamente il tempo locale e confrontare.

E perché avete bisogno di confrontare l'ora locale con l'ora dei tic?

Se avete bisogno di sapere se è possibile fare trading, ecco una funzione

//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime()
{
  MqlDateTime cur_time, sv_time;
  cur_time.year = 0;
  TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера.
  if(cur_time.year > 0)
  {
    sv_time.year = 0;
    TimeCurrent(sv_time); //Возвращает последнее известное время сервера
    if(sv_time.year > 0)
    {
    //  if((cur_time.day_of_week == int(FirstDay)) ||
    //     (cur_time.day_of_week == int(SecondDay))) return(false); //Проверка на выходные
      if(cur_time.day_of_week == sv_time.day_of_week)
      {
        ulong tr_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec;
        if(((tr_time >= time_st_mon) && (tr_time < 50370)) ||  //10:00:01 - 13:59:30
           ((tr_time >= time_st_day) && (tr_time < 67470)) ||  //14:05:01 - 19:44:30 
           ((tr_time >= time_st_evn) && (tr_time < 85770)))    //19:05:01 - 23:49:30
        {
          return(true);
        }  
      }  
    } 
  }   
  return(false);
}
 

Sul tema della rilevanza delle zecche, guardate questo indicatore con i commenti.

Ping
Ping
  • www.mql5.com
Для торговли важным параметром является актуальность текущей цены. На него влияет множество факторов, самый популярный из которых - сетевой пинг между терминалом и торговым сервером. Но часто из виду упускается другой параметр: так называемый "внутренний пинг терминала" - дополнительный лаг котировок внутри самого терминала (платформы). Даже...
 
prostotrader:

Guardato il tuo codice...

Non lo stai facendo affatto bene.

Devi aggiungere gli strumenti più liquidi a Market Watch.

Poi, aggiungete le profondità di mercato di questi strumenti.

E, quando OnBookEvent() si innesca, copiare 1 tick (l'ultimo) ci sarà il tempo e prendere immediatamente il tempo locale e confrontare.

E in generale, perché avete bisogno di confrontare l'ora locale con l'ora in tick?

Perché avete bisogno di fare tutto, attraverso uno stack? Solo per far apparire meglio il codice? Se ho un simbolo nella panoramica del mercato, non significa che c'è una sincronizzazione costante e posso accedere agli ultimi 4096 tick del simbolo direttamente dalla cache (cioè istantaneamente)? In ogni caso la tua idea deve essere testata. L'unica cosa che non capisco, cosa significa "copy 1 tick (last)" per calcolare il tick cambiando la tazza?

E in generale, perché avete bisogno di confrontare l'ora locale con l'ora del tick?

Prendere decisioni di trading basate sui prezzi di ieri non è una buona idea. Comprare SBER a 100 ieri potrebbe essere una buona idea dal punto di vista dell'algoritmo, ma oggi devi venderlo a 80.

 
pivomoe:

Perché fare tutto attraverso un vetro? Solo per far apparire meglio il codice? Se ho un simbolo nella panoramica del mercato, non significa che c'è una sincronizzazione costante e posso accedere agli ultimi 4096 tick sul simbolo direttamente dalla cache (cioè istantaneamente)? In ogni caso la tua idea deve essere testata. L'unica cosa che non capisco, cosa significa "copy 1 tick (last)" per calcolare il tick cambiando la tazza?

E in generale perché avete bisogno di confrontare l'ora locale con l'ora del tick?

Prendere decisioni di trading basate sui prezzi di ieri non è una buona idea. Ieri SBER a 100 può essere una buona idea dal punto di vista dell'algoritmo, ma oggi si dovrebbe vendere a 80.

Perché fai una domanda se sai tutto da solo?

Faccia come crede.

 
prostotrader:

Perché fai questa domanda se sai tutto da solo?

Faccia come crede.

Lo chiedo in tutta serietà. Durante la programmazione in MQL, mi sono reso conto che non bisogna fidarsi né dell'aiuto né delle informazioni fornite dal terminale. Non è altro che un'informazione per riflettere. È possibile che il tick dia informazioni prima (più stabili) diSymbolInfoTick.

A proposito, ecco il tick che è arrivato con un ritardo di un minuto e mezzo:

Nuovo MA Differenza massima 97082 SBPR-3.19 Ora locale 2019.03.15 21:05:31.842 Ora di scansione 2019.03.15 21:03:54.760

Non c'era niente di criminale nella storia della zecca in questo minuto. Due zecche in un minuto.

 
pivomoe:

Lo chiedo in tutta serietà. Quando stavo programmando in MQL, mi sono reso conto che non bisogna fidarsi né dell'aiuto né delle informazioni fornite dal terminale. Non è altro che un'informazione. È possibile che il tick dia informazioni prima (più stabili) diSymbolInfoTick.

A proposito, ecco il tick che è arrivato con un ritardo di un minuto e mezzo:

Nuovo MA Differenza massima 97082 SBPR-3.19 Ora locale 2019.03.15 21:05:31.842 Ora di scansione 2019.03.15 21:03:54.760

Non c'era nulla di criminale nella storia della zecca in questo minuto. Due zecche in un minuto.

Non hai capito niente!

Non si preoccupa affatto dell'ora locale.

Solo il tempo del server di TRADING è importante!

Ci sono sessioni di trading, durante questo tempo si può commerciare.

Il tempo di trading non è determinato dall'ora locale,

e l'ora del server commerciale.

 
prostotrader:

Ti manca completamente il punto!

Non ti interessa affatto l'ora locale.

Conta solo il tempo del server di TRADING!

Ci sono sessioni di trading, durante questo tempo si può commerciare.

Il tempo di trading non è determinato dall'ora locale,

e l'ora del server commerciale.

Devo aver spiegato male il punto.fxsaber, mi ha capito perché capisce l'importanza di ottenere nuovi tick senza ritardi e ha dato un link al suo indicatore, che fa la stessa cosa del mio codice, ma in forma grafica. Non ha alcuna relazione con i tempi di scambio.

Cercherò di spiegarlo sulle mie dita.

Alle 16:39.59.999 ora locale l'Expert Advisor riceve il primo tick per ogni simbolo dalla panoramica del mercato e lo memorizza.

Alle 16:40.00.000, l'Expert Advisor interroga nuovamente l'ultimo tick per ogni simbolo. Per alcuni di loro ci sono nuove zecche.

La maggior parte delle nuove zecche sono accompagnate da un tempo ( time_msc ) di circa 16:39.59.000. Ma uno è arrivato con un tempo di 16:38.30.335.

Si scopre che non c'era nessun tick alle 16:39.59.999 (locali), ma è apparso improvvisamente un millisecondo dopo ed era addirittura 16:38:30, anche se di solito è diverso solo di un secondo.

Dopo tali zecche non si verifica una buona idea. Supponiamo di richiedere l'ultimo tick del simbolo illiquido nel commercio reale. Otteniamo il tempo di tick (time_msc)

che differisce da quello locale di due minuti. Immediatamente ci sono ipotesi che qualcuno sappia già di un tick avvenuto 90, 60 o 30 secondi fa, e il nostro EA non lo sa, e potrebbe essere punito da un colpo a un ordine limite, per esempio.

Questo problema deve essere risolto.

 
pivomoe:

Ilfxsaber mi ha capito, perché capisce l'importanza di ottenere nuovi tick senza ritardi e ha dato un link al suo indicatore, che fa qualcosa di simile al mio codice, ma in forma grafica. Non ha alcuna relazione con i tempi di scambio.

Cercherò di spiegare sulle mie dita.

Alle 16:39.59.999 ora locale l'Expert Advisor riceve il primo tick per ogni simbolo dalla panoramica del mercato e lo memorizza.

Alle 16:40.00.000, l'Expert Advisor interroga nuovamente l'ultimo tick per ogni simbolo. Per alcuni di loro ci sono nuove zecche.

La maggior parte delle nuove zecche sono accompagnate da un tempo ( time_msc ) di circa 16:39.59.000. Ma uno è arrivato con un tempo di 16:38.30.335.

Si scopre che non c'era nessun tick alle 16:39.59.999 (locali), ma è apparso improvvisamente un millisecondo dopo ed era addirittura 16:38:30, anche se di solito è diverso solo di un secondo.

Dopo tali zecche non si verifica una buona idea. Supponiamo di richiedere l'ultimo tick del simbolo illiquido nel commercio reale. Otteniamo il tempo di tick (time_msc)

che differisce da quello locale di due minuti. Immediatamente ci sono ipotesi che qualcuno sappia già di un tick avvenuto 90, 60 o 30 secondi fa, e il nostro EA non lo sa, e potrebbe essere punito da un colpo a un ordine limite, per esempio.

Questo problema deve essere risolto.

Non dovete "combattere" nulla. Dovreste capire come vengono ricevuti i tick nel terminale e correttamente

elaborarli correttamente!

https://www.mql5.com/ru/code/16210

Лента всех сделок
Лента всех сделок
  • www.mql5.com
Хитрый усреднитель Hello Smart Эксперт усредняет убыточные позиции по определенному алгоритму. ColorJSatl_Digit Сглаженный быстрый цифровой фильтр JSatl с цветовой индикацией направления движения, с отображением последнего значения в виде ценовой метки и с возможностью округлять уровни...
 
prostotrader:

Non c'è bisogno di "combattere" qualcosa, ma di capire come le zecche entrano nel terminale e di gestirle correttamente!

per gestirli correttamente!

Puoi finalmente condividere questa conoscenza? Anche se attraverso il vostro metodo, è possibile ottenere un nuovo evento tick prima, si scopre che mi date un pesce e non una canna da pesca, cioè non spiegare perché questo è il caso.

Dove trovi la sicurezza che il tuo metodo è più veloce del mio? Mi sono perso qualcosa nella documentazione? Forse avete determinato sperimentalmente che il terminale è più disposto a dare nuovi tick quando è abbonato a un bicchiere?

Implementerò il passaggio in questo EA dal mio modo di catturare nuovi tick al tuo.

 
pivomoe:

Puoi finalmente condividere questa conoscenza? Anche se attraverso il tuo metodo, si può ottenere un nuovo evento tick prima, si scopre che mi stai dando un pesce e non una canna da pesca, cioè non spieghi perché questo è il caso.

Dove trovi la sicurezza che il tuo metodo è più veloce del mio? Mi sono perso qualcosa nella documentazione? Forse avete determinato sperimentalmente che il terminale dà nuovi tic più facilmente abbonandosi a un bicchiere?

Implementerò il cambio in questo EA dal mio modo di catturare nuovi tick al tuo.

C'è il codice sorgente con i commenti.

Vi sentite pigri a guardarci dentro? O qualcosa non è chiaro?