Синхронизация локального времени Windows с сервером МТ5 - страница 14

 
Alexey Kozitsyn:
Киньте сюда инструкцию по открытию реала на БКС, пожалуйста.
Чтобы не рыскать каждый раз, выложил в профиле.
 
fxsaber:
Чтобы не рыскать каждый раз, выложил в профиле.
Спасибо.
 

Alexey Kozitsyn:
Спасиб

 

Спасибо уже сам сделал
Файлы:
 

Делаю соответствия, различия есть, но незначительные.

По моему мнению, функция записи тиков ордеров в историю работает не првильно (со сделками всё ОК).

Сделаю 300 строк и выложу файл сравнения. 

Добавлено

Проверьте, мог ошибиться 

Файлы:
Book2.zip  671 kb
 
prostotrader:

Сработал точно и в 10-00 и в 14-05

2017.01.26 10:00:00.000 Time_sync_forts (URKA-3.17,H1)  Local time sync is done. Symbol = RTS-3.17 Sync hour = 10 Sync min = 0 Sync sec = 0 Sync ms = 0
2017.01.26 14:05:00.005 Time_sync_forts (URKA-3.17,H1)  Local time sync is done. Symbol = RTS-3.17 Sync hour = 14 Sync min = 5 Sync sec = 0 Sync ms = 5

Добавлено

Пожалуй, уберу BR, чтобы всё происходило автоматичести 3 месяца :) 

А есть идеи как вечерный клиринг "прикрутить", учитывая, что торги могут начаться то в 19-00, то 19-05?
 

Ну вот и всё.

И утренняя сессия и после обоих клирингов. 

Файлы:
 

Работа проделана большая, кропотливая. Поскольку в основе синхронизации времени предложенным способом лежит учет значения пинга, есть вопрос.

Терминал по запросу с идентификатором TERMINAL_PING_LAST дает (по документации MQL) "Последнее известное значение пинга до торгового сервера в микросекундах".

Что это такое, стабильны ли его значения и насколько велики? Много лет вижу эту характеристику в лог-файлах, теперь можно увидеть пинги и в списке серверов прямо в терминале. Причем очень стабильные. Что это?

Вариантов, которые я могу представить, всего два.

1. Это характеристика сети, которую используют маршрутизаторы для анализа путей IP-пакетов, получаемая по сетевому протоколу ICMP и фактически учитывающая лишь аппаратное прохождение сигнала. В конкретном случае измерения пинга между компьютером клиента и сервером - значит, туда обратно между их сетевыми картами. До приложений пакеты с этим протоколом обычно не доходят, это не нужно https://ru.wikipedia.org/wiki/ICMP.

2. Это удвоенное время прохождения сигнала от приложения на сервере до приложения у клиента. 

Кто-нибудь подскажет?

ICMP — Википедия
  • ru.wikipedia.org
ICMP Название: Уровень (по модели OSI): Семейство: Спецификация: ICMP (англ.   — протокол межсетевых управляющих сообщений[1]) — сетевой протокол, входящий в стек протоколов TCP/IP. В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга...
 
Vladimir:

Работа проделана большая, кропотливая. Поскольку в основе синхронизации времени предложенным способом лежит учет значения пинга, есть вопрос.

Терминал по запросу с идентификатором TERMINAL_PING_LAST дает (по документации MQL) "Последнее известное значение пинга до торгового сервера в микросекундах".

Что это такое, стабильны ли его значения и насколько велики? Много лет вижу эту характеристику в лог-файлах, теперь можно увидеть пинги и в списке серверов прямо в терминале. Причем очень стабильные. Что это?

Вариантов, которые я могу представить, всего два.

1. Это характеристика сети, которую используют маршрутизаторы для анализа путей IP-пакетов, получаемая по сетевому протоколу ICMP и фактически учитывающая лишь аппаратное прохождение сигнала. В конкретном случае измерения пинга между компьютером клиента и сервером - значит, туда обратно между их сетевыми картами. До приложений пакеты с этим протоколом обычно не доходят, это не нужно https://ru.wikipedia.org/wiki/ICMP.

2. Это удвоенное время прохождения сигнала от приложения на сервере до приложения у клиента. 

Кто-нибудь подскажет?

На этот вопрос точно могут ответить только разработчики.

Я основывался на втором варианте

> Это удвоенное время прохождения сигнала от приложения на сервере до приложения у клиента.  

 
prostotrader:

Ну вот и всё.

И утренняя сессия и после обоих клирингов. 

Всё работает "как часики" :)

2017.01.30 10:00:00.000 Time_symc_forts (URKA-3.17,H1)  Local time sync is done. Symbol = Si-3.17 Sync hour = 10 Sync min = 0 Sync sec = 0 Sync ms = 0
2017.01.30 14:05:00.002 Time_symc_forts (URKA-3.17,H1)  Local time sync is done. Symbol = Si-3.17 Sync hour = 14 Sync min = 5 Sync sec = 0 Sync ms = 2
2017.01.30 19:00:00.003 Time_symc_forts (URKA-3.17,H1)  Local time sync is done. Symbol = Si-3.17 Sync hour = 19 Sync min = 0 Sync sec = 0 Sync ms = 3

Добавлено

Осталось дождаться когда торги начнуться в 19-05
 

Market closed
Market closed
  • www.mql5.com
Ребята разработчики! Ну когда же Вы синхронизируете время терминала с временем Биржи...
 
prostotrader:

Всё работает "как часики" :)

2017.01.30 10:00:00.000 Time_symc_forts (URKA-3.17,H1)  Local time sync is done. Symbol = Si-3.17 Sync hour = 10 Sync min = 0 Sync sec = 0 Sync ms = 0
2017.01.30 14:05:00.002 Time_symc_forts (URKA-3.17,H1)  Local time sync is done. Symbol = Si-3.17 Sync hour = 14 Sync min = 5 Sync sec = 0 Sync ms = 2
2017.01.30 19:00:00.003 Time_symc_forts (URKA-3.17,H1)  Local time sync is done. Symbol = Si-3.17 Sync hour = 19 Sync min = 0 Sync sec = 0 Sync ms = 3

Добавлено

Осталось дождаться когда торги начнуться в 19-05
 

Добавлено

Для Сергея

https://www.mql5.com/ru/forum/166646 

Ради интереса, включи если не сложно, посмотрим насколько точно синхронизируется время:

//+------------------------------------------------------------------+
//|                                            Delta Time Server.mq5 |
//+------------------------------------------------------------------+
struct _SYSTEMTIME
  {
   short             year;
   short             mon;
   short             day_of_week;
   short             day;
   short             hour;
   short             min;
   short             sec;
   short             msc;
  };

_SYSTEMTIME loc_time;

#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//---
MqlTick tick;
MqlDateTime sv_time;
int tick_msc,ping,time_server,time_local,delta=0,mdelta[10],n=0;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   loc_time.year=0;
   GetLocalTime(loc_time);
   if(loc_time.year>0)
     {
      if(!SymbolInfoTick(_Symbol,tick)) { Print("error SymbolInfoTick: ",GetLastError()); return; }
      ping=TerminalInfoInteger(TERMINAL_PING_LAST)/1000;
      tick_msc=int(tick.time_msc%1000);
      TimeToStruct(tick.time,sv_time);

      time_server=(sv_time.sec+sv_time.min*60)*1000+tick_msc;
      time_local=(loc_time.sec+loc_time.min*60)*1000+loc_time.msc;

      delta=AvgDelta(time_server-time_local);
      
     Print(
           "ping : ",ping,
           " | time server: ",sv_time.hour,":",sv_time.min,":",sv_time.sec,",",tick_msc,
           " | time local: ",loc_time.hour,":",loc_time.min,":",loc_time.sec,",",loc_time.msc,
           " | delta ms: ",delta,
           " | min max delta: ",mdelta[ArrayMaximum(mdelta)]," : ",mdelta[ArrayMinimum(mdelta)],
           "");
     }
  }
//+------------------------------------------------------------------+
int AvgDelta(int d)
  {
   int avgd=0;
   mdelta[n]=d;
   n++; if(n>=10) n=0;
   for(int i=0;i<10;i++) avgd+=mdelta[i];
   return(avgd/10);
  }
//+------------------------------------------------------------------+