Synchroniser l'heure locale de Windows avec le serveur MT5 - page 17

 

Seryozh !

Je n'aime ni ma version (syncronisation sur la première affaire) ni la vôtre,

parce qu'il est "autour de l'horloge" et ajuste l'heure presquetout le temps,

alors que le temps ne doit être ajusté qu'avant le début et à la fin des sessions.

Il faut penser à faire un hybride de nos versions.

Jetez-y un coup d'œil et dites-moi ce que vous en pensez

//+------------------------------------------------------------------+
//|                                              Time_sync_forts.mq5 |
//|                   Copyright 2017 Sergey Chalyshev & prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 Sergey Chalyshev & prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.09"
//---
struct _SYSTEMTIME
  {
   short wYear;
   short wMonth;
   short wDayOfWeek;
   short wDay;
   short wHour;
   short wMinute;
   short wSecond;
   short wMilliseconds;
  };

_SYSTEMTIME loc_time;

#import "kernel32.dll"
//void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//
input ENUM_DAY_OF_WEEK FirstDay  = SATURDAY;        //Первый выходной
input ENUM_DAY_OF_WEEK SecondDay = SUNDAY;          //Второй выходной
//
MqlTick tick;
MqlDateTime sv_time, tts_time;
int st_st_mon   = 35100; //09-45
int end_st_mon  = 36000; //10-00
int st_end_mon  = 50280; //13-58
int end_end_mon = 50400; //14-00
int st_st_day   = 50460; //14-01
int end_st_day  = 50700; //14-05
int st_end_day  = 67380; //18-43
int end_end_day = 67500; //18-45
int st_st_evn   = 67560; //18-46
int end_st_evn  = 68400; //19-00
int st_end_evn  = 85680; //23-48
int end_end_evn = 85800; //23-50
//---
bool  is_sync;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_sync = true;
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert Convert To Time function                                  |
//+------------------------------------------------------------------+
bool ConvertToTime(const ulong n_value,_SYSTEMTIME  &a_time)
  {
   MqlDateTime cur_time={0};
   TimeToStruct(datetime(n_value/1000),cur_time);
   if(cur_time.year>0)
     {
      a_time.wDay=short(cur_time.day);
      a_time.wDayOfWeek=short(cur_time.day_of_week);
      a_time.wHour=short(cur_time.hour);
      a_time.wMinute= short(cur_time.min);
      a_time.wMonth = short(cur_time.mon);
      a_time.wSecond= short(cur_time.sec);
      a_time.wYear=short(cur_time.year);
      a_time.wMilliseconds=short(n_value%1000);
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
//| Expert On Tick function                                          |
//+------------------------------------------------------------------+
void OnTick()
{
  tts_time.year = 0;
  TimeTradeServer(tts_time);
  if(tts_time.year > 0)
  {
    if((tts_time.day_of_week == int(FirstDay)) ||
       (tts_time.day_of_week == int(SecondDay))) return;
    int cur_time = tts_time.hour * 3600 + tts_time.min * 60 + tts_time.sec;
    if(((cur_time >= st_st_mon) && (cur_time < end_st_mon)) ||
       ((cur_time >= st_end_mon) && (cur_time < end_end_mon)) ||
       ((cur_time >= st_st_day) && (cur_time < end_st_day)) ||
       ((cur_time >= st_end_day) && (cur_time < end_end_day)) ||
       ((cur_time >= st_st_evn) && (cur_time < end_st_evn)) ||
       ((cur_time >= st_end_evn) && (cur_time < end_end_evn)))
    {
      if(!is_sync)
      {
        if(!SymbolInfoTick(Symbol(), tick))
        {
          Print("Error SymbolInfoTick", GetLastError());
          return;
        }
        sv_time.year = 0;
        TimeToStruct(tick.time, sv_time);
        if(sv_time.year>0)
        {
          ulong last_ping=ulong(NormalizeDouble(double(TerminalInfoInteger(TERMINAL_PING_LAST))/2000,0));
          ulong mls_time=ulong(tick.time_msc%1000);
          if((mls_time+last_ping)>999)
          {
            mls_time=tick.time_msc+last_ping;
            if(!ConvertToTime(mls_time, loc_time)) return;
          }
          else
          {
            loc_time.wYear = short(sv_time.year);
            loc_time.wMonth = short(sv_time.mon);
            loc_time.wDay = short(sv_time.day);
            loc_time.wDayOfWeek = short(sv_time.day_of_week);
            loc_time.wHour = short(sv_time.hour);
            loc_time.wMinute = short(sv_time.min);
            loc_time.wSecond = short(sv_time.sec);
            loc_time.wMilliseconds=short(mls_time+last_ping);
          }
          if(SetLocalTime(loc_time))
          {
            is_sync=true;
            Print("Local time sync is done. Symbol = ",Symbol()," Sync hour = ",loc_time.wHour, " Sync min = ",loc_time.wMinute,
                  " Sync sec = ",loc_time.wSecond," Sync ms = ",loc_time.wMilliseconds);
          }
        }
      }
    }
    else is_sync = false;
  }
}  
//+------------------------------------------------------------------+

Ajouté par

Je n'aime pas non plus le fait que le ping change rarement dans le terminal.

 

Le premier résultat du nouveau conseiller

2017.02.06 09:45:04.524 Net_switcher (Si-3.17,M1)       Local time sync is done. Symbol = Si-3.17 Sync hour = 9 Sync min = 45 Sync sec = 4 Sync ms = 524

2017.02.06 10:33:04.922 Delta_time (BR-3.17,M1) ping : 5 | time current: 2017.02.06 10:33:04 | time server: 10:33:4,710 | time local: 10:33:4,922 | delta ms: -21 | min max delta: 0 : -212
2017.02.06 10:33:08.424 Delta_time (BR-3.17,M1) ping : 5 | time current: 2017.02.06 10:33:08 | time server: 10:33:8,407 | time local: 10:33:8,424 | delta ms: -22 | min max delta: 0 : -212
2017.02.06 10:33:11.244 Delta_time (BR-3.17,M1) ping : 5 | time current: 2017.02.06 10:33:11 | time server: 10:33:11,221 | time local: 10:33:11,244 | delta ms: -25 | min max delta: 0 : -212
2017.02.06 10:33:11.830 Delta_time (BR-3.17,M1) ping : 5 | time current: 2017.02.06 10:33:11 | time server: 10:33:11,806 | time local: 10:33:11,830 | delta ms: -27 | min max delta: 0 : -212
2017.02.06 10:33:11.837 Delta_time (BR-3.17,M1) ping : 5 | time current: 2017.02.06 10:33:11 | time server: 10:33:11,806 | time local: 10:33:11,837 | delta ms: -30 | min max delta: 0 : -212
2017.02.06 10:33:12.026 Delta_time (BR-3.17,M1) ping : 5 | time current: 2017.02.06 10:33:11 | time server: 10:33:11,958 | time local: 10:33:12,26 | delta ms: -37 | min max delta: 0 : -212
 

Avant la fin de la session du matin, l'heure était synchronisée, mais à 14-01 -- 14-04 elle ne l'était pas :(

Apparemment, cela est dû au fait que les applications ont seulement été retirées.

Mais il y a toujours la synchronisation :)

2017.02.06 13:57:59.794 Net_switcher (Si-3.17,M1)       Local time sync is done. Sync hour = 13 Sync min = 57 Sync sec = 59 Sync ms = 794

2017.02.06 14:23:10.145 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:10 | time server: 14:23:10,121 | time local: 14:23:10,145 | delta ms: -2 | min max delta: 0 : -24
2017.02.06 14:23:10.158 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:10 | time server: 14:23:10,144 | time local: 14:23:10,158 | delta ms: -3 | min max delta: 0 : -24
2017.02.06 14:23:12.188 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:12 | time server: 14:23:12,168 | time local: 14:23:12,188 | delta ms: -5 | min max delta: 0 : -24
2017.02.06 14:23:12.188 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:12 | time server: 14:23:12,168 | time local: 14:23:12,188 | delta ms: -7 | min max delta: 0 : -24
2017.02.06 14:23:14.590 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:14 | time server: 14:23:14,569 | time local: 14:23:14,590 | delta ms: -9 | min max delta: 0 : -24
2017.02.06 14:23:14.725 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:14 | time server: 14:23:14,694 | time local: 14:23:14,725 | delta ms: -13 | min max delta: 0 : -31
2017.02.06 14:23:14.727 Delta_time (BR-3.17,M1) ping : 7 | time current: 2017.02.06 14:23:14 | time server: 14:23:14,699 | time local: 14:23:14,727 | delta ms: -15 | min max delta: 0 : -31
 

Les décisions suivantes ont été prises

int st_st_mon   = 35100; //09-45
int end_st_mon  = 36000; //10-00
int st_tr_mon   = 36060; //10-01
int end_tr_mon  = 36120; //10-02
int st_end_mon  = 50280; //13-58
int end_end_mon = 50400; //14-00
int st_st_day   = 50700; //14-05
int end_st_day  = 50760; //14-06
int st_end_day  = 67380; //18-43
int end_end_day = 67500; //18-45
int st_st_evn   = 68700; //19-05
int end_st_evn  = 68760; //19-06
int st_end_evn  = 85680; //23-48
int end_end_evn = 85800; //23-50


Je pense que le sujet est épuisé

Dernière version ici

https://www.mql5.com/ru/forum/167309#comment_4065302

Советники: Time sync FORTS
Советники: Time sync FORTS
  • www.mql5.com
Форум алго-трейдеров MQL5
 

Les développeurs ont désormais la possibilité d'ajouter du temps aux lunettes "à petit feu".

Extrait de la version 5.3 de Spectra

4. les changements technologiques.

  • Séparation de la composante négociation et de la composante compensation

Modernisation du noyau et du module de risque du SDC, visant à stabiliser le système.

  • Changement dans l'implémentation du limiteur de flux de transactions sur le noyauSPECTRAde TCS

Dans la version 5.3, les limiteurs de flux de transactions de la passerelle des clients ont été remplacés par un point unique. Dans les versions précédentes, une restriction par passerelle était utilisée.

  • Fixer les temps d'enregistrement des transactions avec une précision de l'ordre de la nanoseconde

Un nouveau champ moment_ns a été ajouté pour les tables de flux diffusant les transactions et les demandes.

URRRAAAAAAAAAAAAA !

Ajouté

Spectra 5.3 sera en ligne sur la bourse le 27 février 2017.

Ajouté

struct MqlBookInfo
  {
   ENUM_BOOK_TYPE   type;       // тип заявки из перечисления ENUM_BOOK_TYPE
   double           price;      // цена
   long             volume;     // объем
   ulong            moment_ns;  //ООООООООО-ЧЕНЬ ЖДЁМ  
  };
 
prostotrader:

Ajouté

struct MqlBookInfo
  {
   ENUM_BOOK_TYPE   type;       // тип заявки из перечисления ENUM_BOOK_TYPE
   double           price;      // цена
   long             volume;     // объем
   ulong            moment_ns;  //ООООООООО-ЧЕНЬ ЖДЁМ  
  };

Et aussi pour le sentiment (d'après ce que j'ai compris, les informations sur les OI, les warrants, etc. sont appelées ainsi). Une milliseconde serait suffisante dans ce cas. Et en général, plus c'est précis, mieux c'est, mais j'aimerais une seule précision pour toutes les informations possibles.
 
Alexey Kozitsyn:
Et ce serait également pour le sentiment (d'après ce que j'ai compris, les informations sur les OI, les mandats, etc. sont appelées ainsi). Une milliseconde y suffira. Et en général, plus c'est précis, mieux c'est, mais je voudrais une seule précision pour toutes les informations possibles.

Et les non-secondes ULONG s'y intégreront-elles ?

Ajouté

Besoin de voir commentl'échange de moment_ns annoncé

Dans 20 jours, il sera déjà en direct, mais

la documentation n'est pas encore affichée (comme toujours) :(

 
prostotrader:

Et les non-secondes ULONG s'y intégreront-elles ?

Ajouté

Besoin de voir commentl'échange de moment_ns annoncé

Dans 20 jours, il sera déjà en direct, mais

la documentation n'est pas encore affichée (comme toujours) :(

Ça ira et il en restera encore un peu. Mais encore une fois, si vous prenez ce genre de précision, vous devez avoir cette précision pour toutes les informations fournies. Ce serait, bien sûr, irréalisablement cool, mais laissez-les au moins ajouter le temps en millisecondes partout.
 
Обращаем ваше внимание, что новый релиз Spectra 5.3 состоится 27 февраля 2017 г.,
вечерняя дополнительная торговая сессия на срочном рынке 24 февраля 2017 г.
(является торговым днем на срочном рынке) будет отменена.
En attente de temps dans le verre des développeurs....