Synchronisierung der Windows-Ortszeit mit dem MT5-Server - Seite 17

 

Serjosh!

Ich mag weder meine Version (Syncronisierung beim ersten Geschäft) noch Ihre Version,

weil es "rund um die Uhr" läuft und die Zeit fastständig anpasst,

Die Zeit muss nur vor Beginn und am Ende der Sitzungen angepasst werden.

Wir müssen darüber nachdenken, eine Mischform unserer Versionen zu erstellen.

Sehen Sie es sich an und sagen Sie mir, was Sie davon halten

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

Hinzugefügt von

Mir gefällt auch nicht, dass sich der Ping im Terminal selten ändert.

 

Das erste Ergebnis des neuen Beraters

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
 

Vor dem Ende der Morgensitzung war die Zeit synchronisiert, aber um 14-01 - 14-04 war sie es nicht :(

Offensichtlich ist dies darauf zurückzuführen, dass die Anträge nur heruntergenommen wurden.

Aber es gibt immer noch eine 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
 

Sie haben sich für Folgendes entschieden

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


Ich denke, das Thema ist erschöpft

Neueste Version hier

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

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

Die Entwickler haben jetzt die Möglichkeit, die Zeit für Gläser "in kleinen Blut

Aus der Veröffentlichung von Spectra 5.3

4. technologische Veränderungen.

  • Trennung der Handels- und Clearingkomponente

Modernisierung des Kern- und Risikomoduls des FKS mit dem Ziel der Stabilisierung des Systems.

  • Änderung bei der Implementierung des Transaktionsflussbegrenzers auf dem TCSSPECTRA-Kern

In Version 5.3 wurden die Transaktionsflussbegrenzer des Gateways von den Clients durch einen einzigen Punkt ersetzt. In früheren Versionen wurde eine Beschränkung pro Gateway verwendet.

  • Festlegen von Transaktionsprotokollierungszeiten mit Nanosekundengenauigkeit

Ein neues moment_ns-Feld wurde für die Flow-Tabellen zur Übertragung von Transaktionen und Anfragen hinzugefügt.

URRRAAAAAAAAAAA!

Hinzugefügt

Spectra 5.3 wird am 27. Februar 2017 an der Börse freigeschaltet.

Hinzugefügt

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

Hinzugefügt

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

Und auch für das Sentiment (soweit ich weiß, werden die Informationen über OI, Optionsscheine usw. so genannt). Da würde eine Millisekunde ausreichen. Und im Allgemeinen gilt: je genauer, desto besser, aber ich möchte eine Genauigkeit für alle möglichen Informationen.
 
Alexey Kozitsyn:
Und es wäre auch für das Sentiment (soweit ich weiß, werden die Informationen über OI, Optionsscheine usw. so genannt). Da reicht eine Millisekunde aus. Und im Allgemeinen gilt: je präziser, desto besser, aber ich möchte eine Genauigkeit für alle möglichen Informationen.

Und passen die ULONG-Nicht-Sekunden hinein?

Hinzugefügt

Muss sehen, wieder moment_ns Austausch angekündigt

In 20 Tagen wird sie bereits live sein, aber

die Dokumentation ist noch nicht veröffentlicht (wie immer) :(

 
prostotrader:

Und passen die ULONG-Nicht-Sekunden hinein?

Hinzugefügt

Muss sehen, wieder moment_ns Austausch angekündigt

In 20 Tagen wird sie bereits live sein, aber

die Dokumentation ist (wie immer) noch nicht veröffentlicht :(

Es wird passen und es wird noch etwas übrig bleiben. Aber wenn man diese Art von Genauigkeit voraussetzt, muss man diese Genauigkeit auch für alle bereitgestellten Informationen haben. Das wäre natürlich unrealistisch cool, aber sie sollten wenigstens überall die Zeit in Millisekunden angeben.
 
Обращаем ваше внимание, что новый релиз Spectra 5.3 состоится 27 февраля 2017 г.,
вечерняя дополнительная торговая сессия на срочном рынке 24 февраля 2017 г.
(является торговым днем на срочном рынке) будет отменена.
Warten auf Zeit im Glas von den Entwicklern....