Une minute et demie de différence entre l'heure locale et l'heure du tic-tac frais. Ce qu'il faut faire.

 

J'ai écrit un petit Conseiller Expert, qui montre la différence maximale entre l'heure locale de l'ordinateur et l'heure du nouveau tick time_msc (qui vient d'être reçu).

En gros, il mesure TimeLocal() uniquement en millisecondes moins l'heure du dernier tick Tick.teme_msc . Le tick est reçu en utilisant SymbolInfoTick.

Il ne s'en est pas beaucoup moqué. 24 caractères dans l'aperçu du marché. OnTimer() avec une période d'appel de 1 milliseconde. J'interroge tous les symboles avec SymbolInfoTick. Si une tique est nouvelle, je fais des mesures.

J'ai testé le conseiller expert en soirée. Voici les résultats :

Nouveaux ticks capturés 46800

Temps minimal entre l'heure de l'ordinateur local et l'heure de la tique -7048 millisecondes (avec le signe moins)

Temps moyen entre l'heure de l'ordinateur local et l'heure du tic-tac -6819 millisecondes (avec moins)

Temps maximal entre l'heure de l'ordinateur local et l'heure du tic-tac -97082 millisecondes ( avec plus )


Comment faire face à cette situation ?

 
pivomoe:

J'ai écrit un petit conseiller expert, qui montre la différence maximale entre l'heure locale de l'ordinateur et le nouveau tick time_msc (qui vient d'être reçu).

En gros, il mesure TimeLocal() uniquement en millisecondes moins l'heure du dernier tick Tick.teme_msc . Le tick est reçu en utilisant SymbolInfoTick.

Il ne s'en est pas beaucoup moqué. 24 caractères dans l'aperçu du marché. OnTimer() avec une période d'appel de 1 milliseconde. J'interroge tous les symboles avec SymbolInfoTick. Si une tique est nouvelle, je fais des mesures.

J'ai testé le conseiller expert en soirée. Voici les résultats :

Nouveaux ticks capturés 46800

Temps minimal entre l'heure de l'ordinateur local et l'heure de la tique -7048 millisecondes (avec le signe moins)

Temps moyen entre l'heure de l'ordinateur local et l'heure du tic-tac -6819 millisecondes ( avec moins )

Temps maximal entre l'heure de l'ordinateur local et l'heure du tic-tac -97082 millisecondes ( avec plus )


Comment faire face à cette situation ?

J'ai regardé votre code...

Vous ne le faites pas du tout correctement.

Vous devez ajouter les instruments les plus liquides à Market Watch.

Ajoutez ensuite leurs pots d'argent.

Et, lorsque OnBookEvent() se déclenche, copiez 1 tick (le dernier) il y aura du temps et prenez immédiatement l'heure locale et comparez.

Et pourquoi avez-vous besoin de comparer l'heure locale avec l'heure des ticks ?

Si vous avez besoin de savoir s'il est possible de faire du commerce, voici une fonction

//+------------------------------------------------------------------+
//| 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);
}
 

Sur le thème de la pertinence des tics, consultez cet indicateur avec commentaires.

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

J'ai regardé votre code...

Tu ne le fais pas bien du tout.

Vous devez ajouter les instruments les plus liquides à Market Watch.

Ensuite, il faut ajouter les profondeurs de marché de ces instruments.

Et, lorsque OnBookEvent() se déclenche, copiez 1 tick (le dernier) il y aura du temps et prenez immédiatement l'heure locale et comparez.

Et en général, pourquoi avez-vous besoin de comparer l'heure locale avec l'heure ticks ?

Pourquoi devez-vous tout faire par le biais d'une pile ? Juste pour que le code soit plus beau ? Si j'ai un symbole dans la vue d'ensemble du marché, cela ne signifie-t-il pas qu'il y a une synchronisation constante et que je peux accéder aux 4096 derniers ticks pour le symbole directement à partir du cache (c'est-à-dire instantanément) ? Dans tous les cas, votre idée doit être testée. La seule chose que je ne comprends pas, c'est ce que signifie "copy 1 tick (last)" pour calculer le tick en changeant la tasse ?

Et en général, pourquoi avez-vous besoin de comparer l'heure locale avec l'heure tic-tac ?

Prendre des décisions commerciales sur la base des prix d'hier n'est pas une bonne idée. Acheter le SBER à 100 hier peut être une bonne idée du point de vue de l'algorithme, mais aujourd'hui vous devez le vendre à 80.

 
pivomoe:

Pourquoi tout faire, à travers un verre ? Juste pour que le code soit plus beau ? Si j'ai un symbole dans la vue d'ensemble du marché, cela ne signifie-t-il pas qu'il y a une synchronisation constante et que je peux accéder aux 4096 derniers ticks sur le symbole directement à partir du cache (c'est-à-dire instantanément) ? Dans tous les cas, votre idée doit être testée. La seule chose que je ne comprends pas, c'est ce que signifie "copy 1 tick (last)" pour calculer le tick en changeant la tasse ?

Et en général, pourquoi avez-vous besoin de comparer l'heure locale avec l'heure tic-tac ?

Prendre des décisions commerciales sur la base des prix d'hier n'est pas une bonne idée. Hier, le SBER à 100 peut être une bonne idée du point de vue de l'algorithme, mais aujourd'hui vous devriez le vendre à 80.

Pourquoi posez-vous une question si vous savez tout vous-même.

Faites comme bon vous semble.

 
prostotrader:

Pourquoi posez-vous la question si vous savez tout vous-même ?

Faites comme bon vous semble.

Je vous le demande très sérieusement. En programmant en MQL, j'ai réalisé qu'il ne fallait se fier ni à l'aide ni aux informations fournies par le terminal. Ce n'est rien de plus qu'un élément d'information pour la réflexion. Il est possible que le tick donne des informations plus tôt (plus stable) queSymbolInfoTick.

Au fait, voici le tic-tac qui est arrivé avec un retard d'une minute et demie :

Nouvelle MA Différence maximale 97082 SBPR-3.19 Heure locale 2019.03.15 21:05:31.842 Heure théorique 2019.03.15 21:03:54.760

Il n'y avait rien de criminel dans l'histoire du tic-tac à cette minute. Deux tics en une minute.

 
pivomoe:

Je vous le demande très sérieusement. Lorsque je programmais en MQL, je me suis rendu compte qu'il ne fallait se fier ni à l'aide ni aux informations fournies par le terminal. Ce n'est rien de plus qu'un élément d'information. Il est possible que le tick donne des informations plus tôt (plus stable) queSymbolInfoTick.

Au fait, voici le tic-tac qui est arrivé avec un retard d'une minute et demie :

Nouvelle MA Différence maximale 97082 SBPR-3.19 Heure locale 2019.03.15 21:05:31.842 Heure théorique 2019.03.15 21:03:54.760

Il n'y avait rien de criminel dans l'histoire du tic-tac à cette minute. Deux tics en une minute.

Vous êtes complètement à côté de la plaque !

Je ne me soucie pas du tout de votre heure locale.

Seule l'heure du serveur TRADING est importante !

Il y a des sessions de négociation, pendant lesquelles vous pouvez négocier.

L'heure de négociation n'est pas déterminée par votre heure locale,

et l'heure du serveur commercial.

 
prostotrader:

Vous êtes complètement à côté de la plaque !

Vous ne vous souciez pas du tout de votre heure locale.

Seule l'heure du serveur TRADING compte !

Il y a des sessions de négociation, pendant lesquelles vous pouvez négocier.

L'heure de négociation n'est pas déterminée par votre heure locale,

et l'heure du serveur commercial.

Je dois avoir mal expliqué le point.fxsaber, m'a compris car il comprend l'importance d'obtenir de nouveaux ticks sans délais et a donné un lien vers son indicateur, qui fait la même chose que mon code, mais sous forme graphique. Il n'a aucun rapport avec le calendrier des échanges.

Je vais essayer d'expliquer sur mes doigts.

A 16:39.59.999 heure locale, le conseiller expert reçoit le premier tick, pour chaque symbole, de l'aperçu du marché et le stocke.

À 16:40.00.000, le conseiller expert interroge à nouveau le dernier tick pour chaque symbole. Pour certains d'entre eux, nous obtenons de nouveaux tics.

La plupart des nouveaux ticks sont accompagnés d'une heure ( time_msc ) d'environ 16:39.59.000. Mais l'un d'eux est arrivé avec un temps de 16:38.30.335.

Il s'avère qu'il n'y avait pas de tic-tac à 16:39.59.999 (local), mais qu'il est soudainement apparu une milliseconde plus tard et qu'il était même 16:38:30, bien qu'habituellement il ne diffère que d'une seconde.

Après de tels tics, ce n'est pas une bonne idée. Supposons que nous demandions le dernier tick du symbole illiquide dans la transaction réelle. Nous obtenons l'heure du tic (time_msc)

qui diffère de l'heure locale de deux minutes. On suppose immédiatement que quelqu'un est déjà au courant d'un tick qui s'est produit il y a 90, 60 ou 30 secondes, et que notre EA ne le sait pas, et qu'il peut être puni par une frappe sur un ordre à cours limité, par exemple.

Ce problème doit être résolu.

 
pivomoe:

Lefxsaber m'a compris, car il comprend l'importance d'obtenir de nouveaux ticks sans délai et a donné un lien vers son indicateur, qui fait quelque chose de similaire à mon code, mais sous forme graphique. Il n'a aucun rapport avec le calendrier des échanges.

Je vais essayer d'expliquer sur mes doigts.

À 16:39.59.999 heure locale, le conseiller expert reçoit le premier tick, pour chaque symbole, de l'aperçu du marché et le stocke.

À 16:40.00.000, le conseiller expert interroge à nouveau le dernier tick pour chaque symbole. Pour certains d'entre eux, nous obtenons de nouveaux tics.

La plupart des nouveaux ticks sont accompagnés d'une heure ( time_msc ) d'environ 16:39.59.000. Mais l'un d'eux est arrivé avec un temps de 16:38.30.335.

Il s'avère qu'il n'y avait pas de tic-tac à 16:39.59.999 (local), mais qu'il est soudainement apparu une milliseconde plus tard et qu'il était même 16:38:30, bien qu'habituellement il ne diffère que d'une seconde.

Après de tels tics, ce n'est pas une bonne idée. Supposons que nous demandions le dernier tick du symbole illiquide dans la transaction réelle. Nous obtenons le temps de tic (time_msc)

qui diffère de l'heure locale de deux minutes. On suppose immédiatement que quelqu'un est déjà au courant d'un tick qui s'est produit il y a 90, 60 ou 30 secondes, et que notre EA ne le sait pas, et qu'il peut être puni par une frappe sur un ordre à cours limité, par exemple.

Ce problème doit être résolu.

Vous n'avez pas besoin de "combattre" quoi que ce soit. Vous devez comprendre comment les ticks sont reçus dans le terminal et correctement

les traiter correctement !

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

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

Il n'est pas nécessaire de " combattre " quoi que ce soit, mais de comprendre comment les tics arrivent dans le terminal et de les gérer correctement !

Manipulez-les correctement !

Pouvez-vous enfin partager cette connaissance ? Même si par votre méthode, vous pouvez obtenir un nouvel événement tick plus tôt, il s'avère que vous me donnez un poisson et non une canne à pêche, c'est-à-dire que vous n'expliquez pas pourquoi c'est le cas.

D'où vous vient cette certitude que votre méthode est plus rapide que la mienne ? J'ai raté quelque chose dans la documentation ? Peut-être avez-vous déterminé expérimentalement que le terminal est plus disposé à donner de nouveaux ticks lorsqu'il est abonné à un verre ?

Je vais mettre en œuvre le changement dans cet EA de ma façon de capturer les nouveaux ticks à la vôtre.

 
pivomoe:

Pouvez-vous enfin partager cette connaissance ? Même si, grâce à votre méthode, vous pouvez obtenir un nouvel événement tick plus tôt, il s'avère que vous me donnez un poisson et non une canne à pêche, c'est-à-dire que vous n'expliquez pas pourquoi c'est le cas.

D'où vous vient cette certitude que votre méthode est plus rapide que la mienne ? J'ai raté quelque chose dans la documentation ? Peut-être avez-vous déterminé expérimentalement que le terminal donne plus facilement de nouveaux ticks en vous abonnant à un verre ?

Je vais mettre en place un changement dans cet EA de ma façon de capturer les nouveaux ticks à la vôtre.

Il y a le code source avec des commentaires.

Vous avez la flemme de le parcourir ? Ou quelque chose n'est pas clair ?