ФОРТС. Вопросы по исполнению - страница 107

 
Aleksey Vyazmikin:

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

Получил ответ от брокера

"

Добрый день, Алексей Вячеславович! Ответ от разработчиков - 

Похоже на сетевые задержки на стороне клиента, вот как проходило исполнение на стороне торгового сервера:

"

Как я понимаю из лога:

1. Время исполнение примерно одинаковое

2. Информация об исполнении пришла от сервера и была обработана программой с задержкой в 3 секунды

Ссылка на задержку с моей стороны в 3 секунды - звучит весьма странно, так как интернет у меня достаточно хороший до роутера на проводе, канал не был перегружен. Компьютерные ядра не были загружены на 100%, но, возможно часть ядер была загружена на 100%.

Тогда получается:

1. Разработчики не обеспечили надлежащее управление приоритетами задачь (потоками), которые должны в первую очередь рассчитываться ЦП, а само ядро MT5 могло бы всегда принудительно занимать наименее загруженное ядро процессора. А при загрузке 100% уменьшать приоритет выполнения для расчета для индикаторов и другого пользовательского кода.

2. Логам MT5 нельзя верить.

Да, сейчас, вообще никому нельзя верить.

Наказание за содеянное, в России, никогда не было соизмеримо.

Можно украсть коробок спичек и сесть на 3-и года, но если ты воруешь спички вагонами,

то тебе ничего не будет!

По Вашим логам МТ5:

2018.04.25 16:49:28.972 Trades  '***': exchange buy 10.00 Si-6.18 at market                                       - терминал отдал приказ серверу МТ5 на покупку
2018.04.25 16:49:29.186 Trades  '***': accepted exchange buy 10.00 Si-6.18 at market                              - сервер МТ5 проверил ордер и утвердил его правильность 
2018.04.25 16:49:29.387 Trades  '***': exchange buy 10.00 Si-6.18 at market placed for execution                  - сервер МТ5 отправмл ордер на Биржу
2018.04.25 16:49:30.002 Trades  '***': order #87849076 buy 10.00 / 10.00 Si-6.18 at market done in 1030.179 ms    - сервер МТ5 рапортовал, что ордер исполнился

а это

2018.04.25 16:49:30.405 Trades  '***': deal #48508923 buy 1.00 Si-6.18 at 62788 done (based on order #87849076)
2018.04.25 16:49:30.819 Trades  '***': deal #48508924 buy 1.00 Si-6.18 at 62788 done (based on order #87849076)
2018.04.25 16:49:31.032 Trades  '***': deal #48508925 buy 5.00 Si-6.18 at 62788 done (based on order #87849076)
2018.04.25 16:49:31.635 Trades  '***': deal #48508926 buy 1.00 Si-6.18 at 62789 done (based on order #87849076)
2018.04.25 16:49:32.058 Trades  '***': deal #48508927 buy 1.00 Si-6.18 at 62789 done (based on order #87849076)
2018.04.25 16:49:32.264 Trades  '***': deal #48508928 buy 1.00 Si-6.18 at 62789 done (based on order #87849076)

просто расшифровка сделок

Добавлено

Из логов СЕРВЕРА видно, что в ядре биржи все исполнилось мгновенно, задерски в 3-4 мс, это задержки от брокера до ядра биржи, т.к сделки в Плаза 2 идут отдельным потоком,

который получается сервером не реал-тайм, а "срезами".

Короче, нужно трясти броера и разработчиков.

"Сетевые задержки" не у нас с Вами, а у них!

Добавлено

Каждое утро (да м днем бывает) по нескольку секунд не исполняется команда

2018.04.26 10:02:35.202 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:36.208 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:37.222 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:38.236 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:39.250 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:40.263 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:41.277 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:42.291 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:43.305 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:44.319 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:45.333 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:46.348 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:47.362 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:48.376 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
2018.04.26 10:02:49.390 trader (Eu-6.19,M1)     ProcessOrders: Buy ордер в процессе удаления. Билет = 87870981
 
Aleksey Vyazmikin:

Получил ответ от брокера

даа, я был лучшего мнения о бирже ) 10 мс на исполнение ордера. но в любом случае это не 2 секунды.
 
prostotrader:

"Сетевые задержки" не у нас с Вами, а у них!

Добавлено

Каждое утро (да м днем бывает) по нескольку секунд не исполняется команда

Меня вот что ещё интересует, где какое время указано - у меня в терминале в логе это моё время компьютера, а у них время сервера MT5?

Просто у меня синхронизация времени стоит - каждые 10 минут соответствующим сервером (ntp2.stratum2.ru), батарейку а материнке менял, т.е. время должно быть точным. А на экране часто вижу, что время по моим часам уже вышло, а бар продолжает елозить - вот что это такое? У биржи время какое то левое?

 
Aleksey Vyazmikin:

Меня вот что ещё интересует, где какое время указано - у меня в терминале в логе это моё время компьютера, а у них время сервера MT5?

Просто у меня синхронизация времени стоит - каждые 10 минут соответствующим сервером (ntp2.stratum2.ru), батарейку а материнке менял, т.е. время должно быть точным. А на экране часто вижу, что время по моим часам уже вышло, а бар продолжает елозить - вот что это такое? У биржи время какое то левое?

Я не знаю как MQ реализовали синхронизацию времени сервера МТ5 со временем Биржи.

Но так как мы торгуем на бмрже, следовательно не важно какое время у Вашего компьютера или сервера МТ5, важно какое Биржевое время! 

Синхрогизация должна осуществляться по Биржевому времени.

//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
bool CheckMarketTime()
{
  sv_time.year = 0;
  TimeCurrent(sv_time); //Возвращает последнее известное время сервера
  if(sv_time.year > 0)
  {
    MqlDateTime cur_time;
    cur_time.year = 0;
    TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера.
    if(cur_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);
} 
TimeCurrent(sv_time); //Возвращает последнее известное время сервера

Т.е TimeCurrent() - НЕ ТОЧНОЕ время

 TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера.

 TimeTradeServer - не точное время

Дело в том, что с прошлого года Биржа транслирует ВСЮ необходимую для биржевой торговли информацию,

вплоть до некоторых вычислений.

В спецификации протокола Плаза 2 написано

heartbeat - Служебная таблица cерверных часов

А здесь, для чего эта таблица нужна



Изначально МТ5 "сидел" на Плаза 2 p2gate, который "умер" и MQ понадобилось

быстро переписать сервер на CGate, а коль скоро уже написано и работает, то зачем напрягаться-то?

Добавлять-исправлять что-то. 

Добавлено

Проблема с задержками - результат серьёзного недочета.

Терминал не может в 1 сек. отослать более 60 транзакций (т.е 2 логина Плаза 2)

Путем нехитрых вычислений можно определить какая "скорострельность" должна быть у брокера, который

поддкрливает сервера МТ5 и шлюз.

 
prostotrader:

Я не знаю как MQ реализовали синхронизацию времени сервера МТ5 со временем Биржи.

Но так как мы торгуем на бмрже, следовательно не важно какое время у Вашего компьютера или сервера МТ5, важно какое Биржевое время! 

Синхрогизация должна осуществляться по Биржевому времени.

А по факту что происходит? Может у биржи есть сервер для синхронизации времени ПК пользователей?

 
Aleksey Vyazmikin:

А по факту что происходит? Может у биржи есть сервер для синхронизации времени ПК пользователей?

Я добавил инфу в свой предыдущий пост.

 
Aleksey Vyazmikin:

Меня вот что ещё интересует, где какое время указано - у меня в терминале в логе это моё время компьютера, а у них время сервера MT5?

Что выдает этот скрипт?

#define PRINT(A) Print(#A + " = " + (string)(A))

string TimeMscToString( const ulong time )
{
  return(TimeToString(time / 1000, TIME_DATE | TIME_SECONDS) + "." + IntegerToString(time % 1000, 3, '0'));
}

void OnStart()
{
  if (HistorySelect(0, LONG_MAX))
  {
    PRINT(TimeMscToString(HistoryDealGetInteger(48508923, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508924, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508925, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508926, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508927, DEAL_TIME_MSC)));
    PRINT(TimeMscToString(HistoryDealGetInteger(48508928, DEAL_TIME_MSC)));
    
    PRINT(TimeMscToString(HistoryOrderGetInteger(87849076, ORDER_TIME_DONE_MSC)));
    PRINT(TimeMscToString(HistoryOrderGetInteger(87849076, ORDER_TIME_SETUP_MSC)));
  }
}
 
fxsaber:

Что выдает этот скрипт?

2018.04.26 16:59:58.686 Test_sr (Si Splice,M15) arrK=0.2021591274299704

Что это такое?
 

 
Aleksey Vyazmikin:

2018.04.26 16:59:58.686 Test_sr (Si Splice,M15) arrK=0.2021591274299704

Что это такое?

Не знаю, это не имеет отношения к скрипту, что выше. Покажите, что он выдает на торговом счете, где возникла проблема.

Причина обращения: