Market closed

 

Ребята разработчики!

Ну когда же Вы синхронизируете время терминала с временем Биржи?

 

2017.01.13 10:00:03.969 Trades  'xxxxx': buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.969 Trades  'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades  'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades  'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]
 
2017.01.13 10:00:03.210 Trades  'xxxxx': buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.210 Trades  'xxxxx': sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.216 Trades  'xxxxx': accepted buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.218 Trades  'xxxxx': accepted sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.219 Trades  'xxxxx': failed buy limit 1.00 MXI-6.17 at 2230.15 [Market closed]
2017.01.13 10:00:03.220 Trades  'xxxxx': failed sell limit 1.00 MXI-6.17 at 2300.75 [Market closed]

добавлено

Перед отсылкой ордера проверяется торговое время

//+------------------------------------------------------------------+
//| Expert Check traiding time function                              |
//+------------------------------------------------------------------+
bool CheckTradingTime(MqlDateTime &tick_time)
{
  datetime lk_time = TimeCurrent(tick_time);
  if ( ( tick_time.day_of_week == int(FirstDay)) ||
       ( tick_time.day_of_week == int(SecondDay)))//выходные
  {
    return(false);
  }
#ifdef DEBUG
  if ((tick_time.hour >= 0) && (tick_time.hour < 6))   // DEBUG 6-00
  {
    return(false);
  }
#else
  
if ((tick_time.hour >= 0) && (tick_time.hour < 10))
  {
    return(false);
  }
#endif
// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30
// 14 * 3600                = 50400 - 14:00:00
// 14 * 3600 + 30           = 50430 - 14:00:30
// 14 * 3600 + 60           = 50460 - 14:01:00

// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30
// 18 * 3600 + 45 * 60      = 67500 - 18:45:00
// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30
// 18 * 3600 + 46 * 60      = 67560 - 18:46:00

// 19 * 3600                = 68400 - 19:00:00
// 19 * 3600 + 60           = 68460 - 19:01:00  

// 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30
// 23 * 3600 + 50 * 60      = 85800 - 23:50:00
// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30
// 23 * 3600 + 51 * 60      = 85860 - 23:51:00
//---
  ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec;  
//---                    //10:00:02                      
  if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
      ((trade_time >= time_st_day) && (trade_time < 67470)) ||
      ((trade_time >= time_st_evn) && (trade_time < 85770)))
  {
    return(true);
  }

return(false); 


}
input string          TimeStMon    = "10:00:02";         //Время начала утренней сессии

ulong time_st_mon = GetStringTime(TimeStMon);
ulong GetStringTime(const string a_string)
{
  int k = 0;
  string s_sec, s_min, s_hour;
  int str_size = StringLen(a_string);
//---
  if(str_size != 8) return(0);  
//---  
  for(int i = str_size - 1; i >= 0; i--)
  {
    ushort let_symbol = StringGetCharacter(a_string, i);
    
    if(let_symbol == ':')
    {
      k++;
      switch(k)
      {
        case 1:
          s_sec = StringSubstr(a_string, i + 1, str_size - i - 1);
        break;
        case 2:
          s_min = StringSubstr(a_string, i + 1, str_size - i - 4);
          s_hour = StringSubstr(a_string, 0, i);
        break;
      }
//---
    }
  }
  if(k != 2) return(0);
  ulong t_sec = ulong(StringToInteger(s_sec));
  ulong t_min = ulong(StringToInteger(s_min)) * 60;
  ulong t_hour = ulong(StringToInteger(s_hour)) * 3600;
//---    
  return(t_hour + t_min + t_sec);
}

 


 

 
prostotrader:

Ребята разработчики!

Ну когда же Вы синхронизируете время терминала с временем Биржи?

 

2017.01.13 10:00:03.969 Trades  'xxxxx': buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.969 Trades  'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades  'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades  'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades  'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]

Тут надо понять, кто наплевал на мировое время и устанавливает своё, биржа или брокер. С корыстным интересом или просто из за своей глупости.  

У кого время совпадает с мировым? 

 
Sergey Chalyshev:

Тут надо понять, кто наплевал на мировое время и устанавливает своё, биржа или брокер. С корыстным интересом или просто из за своей глупости.  

У кого время совпадает с мировым? 

Да, Бог с ним, мировым, мы же торгуем на Московской Бирже, по её времени,

а виноват не брокер, а разработчики, потому что любая котировка, приходящая с Биржи,

обладает временем, следовательно время последней известной котировки и должно быть

известным временем биржи (НЕ СЕРВЕРА) и ТЕРМИНАЛА

 TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.


 TimeCurrent, возвращает время СЕРВЕРА, а не БИРЖИ!

Отсюда, вероятно, "и ноги растут". 

 
prostotrader:

Да, Бог с ним, мировым, мы же торгуем на Московской Бирже, по её времени,

а виноват не брокер, а разработчики, потому что любая котировка, приходящая с Биржи,

обладает временем, следовательно время последней известной котировки и должно быть

известным временем биржи (НЕ СЕРВЕРА) и ТЕРМИНАЛА

 TimeCurrent

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.


 TimeCurrent, возвращает время СЕРВЕРА, а не БИРЖИ!

Отсюда, вероятно, "и ноги растут". 

А если сервер в Москве, а биржа находится в Бразилии, такое может быть?

 
Sergey Chalyshev:

А если сервер в Москве, а биржа находится в Бразилии, такое может быть?

Да наплевать где сервер!

Котировка (вернее ВРЕМЯ котировки) - это и есть текущее ТОРГОВОЕ время. 

Добавлено

Сейчас, происходит следущее

Сервер МТ5 просто пересылает котировку в терминал, независимости от времени самой котировки,

не сихронизируя время СЕРВЕРА со временем котировки, потому что есть премаркет.

Советник отправляет ордер, терминал утверждает её, а сервер сверяет время НЕПОНЯТНО с чем и

реджектит ордер, с погрешностью аж в 3 секунды (по времени моего компа)!!!!

 
prostotrader:

Да наплевать где сервер!

Котировка (вернее ВРЕМЯ котировки) - это и есть текущее ТОРГОВОЕ время. 

Добавлено

Сейчас, происходит следущее

Сервер МТ5 просто пересылает котировку в терминал, независимости от времени самой котировки,

не сихронизируя время СЕРВЕРА со временем котировки, потому что есть премаркет.

Советник отправляет ордер, терминал утверждает её, а сервер сверяет время НЕПОНЯТНО с чем и

реджектит ордер, с погрешностью аж в 3 секунды!!!!

Котировка (вернее ВРЕМЯ котировки) - это и есть текущее ТОРГОВОЕ время.

это биржевое время.

Время сервера вообще в терминал не передается: TimeLocal == TimeTradeServer.
 

 

Меня тоже задолбала эта проблема. На форуме неоднократно возникала такая тема. Каждый решает эту проблему по своему, но правильного решения я не видел. Надо определиться как правильно и настоятельно просить разработчиков исправить.

Сейчас существует три функции получения времени (если память не изменяет) это:

 TimeLocal == TimeTradeServer, время компьютера,

 TimeTradeServer == никчемная функция,

 TimeCurrent == время последней котировки.

Нужно добавить время биржы, выкинуть TimeTradeServer или вместо него передавать текущее время биржи, или добавить типа TimeExchange.




 

 

А лучше всего было бы получать в терминал конкретные данные не заморачиваясь на времени:

- Можно выставлять новые заявки,

- Можно удалять заявки,

- Торговля разрешена. 

Почему то сейчас в терминале такой функционал отсутствует. 

 

Нужно добавить время биржы, выкинуть TimeTradeServer или вместо него передавать текущее время биржи, или добавить типа TimeExchange.

Все таки это не выход для нашей биржи, не знаю как на других.

Они когда захотят тогда и включают торги, бывает и в 10:00, бывает 10:03 или 10:05.

Видимо как проспятся, кофе попьют - тогда и включают )) 


 

Серёж!

Прочти справку по TimeCurrent - там написано, что это время СЕРВЕРА 

Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.