Перебои с получением данных

 

Обнаружил, что эксперт, торгующий в реальном времени на демо-счёте MQ, выдаёт вот такие сообщения:

NQ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:06:56        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
DG      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:20:50        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
MD      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:26:55        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
CJ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:26:57        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
GK      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:29:45        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
OI      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:34:58        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
QN      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:36:50        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
RL      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:37:58        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
DM      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:38:04        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
DS      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:38:59        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
GP      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:39:00        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
FF      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     00:52:02        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
QG      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:12:46        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
FE      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:19:48        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
NJ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:19:48        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
GH      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:20:01        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
RI      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:24:06        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
DO      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:24:11        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
IL      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:29:46        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
IR      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:35:52        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
DS      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:38:05        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
FQ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:50:45        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
KF      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:52:11        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
GD      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:52:40        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
FE      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     01:54:49        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
IK      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     02:00:46        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE

Сам эксперт в функции OnTick() использует простую конструкцию типа

   if(!SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE,time_actual))
     {
      Print("OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)");
      return;
     }
Соответственно, возник вопрос : такое поведение терминала /  торгового сервера допустимо? Стоит ли обращать на него внимание?
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

А что возвращается по этому варианту?

long  SeriesInfoInteger(
   string                   symbol_name,     // имя символа
   ENUM_TIMEFRAMES           timeframe,       // период
   ENUM_SERIES_INFO_INTEGER   prop_id,         // идентификатор свойства
   );

 
Interesting:

А что возвращается по этому варианту?

Дык, подобные варианты были признаны атавизмами. Я их и не применяю. Скорее всего, вернёт 0.
 
Yedelkin:
Дык, подобные варианты были признаны атавизмами. Я их и не применяю. 

Акулы с крокодилами еще нас переживут, а Вы говорите атавизмы :)

Спросил поскольку подразумевал что разработчики могли в одном из вариантов баг допустить (хотя мало вероятно).

PS

Странно, у меня этот код нормально работает, все прекрасно возвращает...

 
Interesting:
Акулы с крокодилами еще нас переживут, а Вы говорите атавизмы :)

И тем не менее. Нам повезло пережить эти архаичные варианты, поэтому для меня они перешли в разряд атавизмов. В частности, для них необходимо дополнительно обрабатывать значение 0.

 

 
Interesting:

Странно, у меня этот год нормально работает, все прекрасно возвращает...

Вот перезагрузил ноутбук только что. Свежайшие данные:

OJ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): _Digits=5; _Point=1e-005; PeriodSeconds()=60
EH      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): уже имеющихся данных в таймсерии достаточно
OS      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): first date 1993.05.13 00:00:00 - 4172192 bares Historia=130000
PR      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): VolumenMin=0.01
FJ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): VolumenMax=500
JF      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): Lot_tipo=100000
QS      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): VolumenPaso=0.01
EG      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:31        OnInit(): ACCOUNT_LEVERAGE=100
FO       0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:33        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
OQ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:36        Мало данных для классического  уровня Sell (5 вместо 6);
EQ      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:34:36         уровень Sell вычисляется для 5

 Третья строчка снизу (символы сместились после форматирования фона).

 
Yedelkin:

Вот перезагрузил ноутбук только что. Свежайшие данные:

 Третья строчка снизу.

Лог с демки MQ

2010.11.27 01:00:43     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 17:55:00
2010.11.27 01:00:43     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 17:55:00
2010.11.27 01:00:44     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 17:55:00
2010.11.27 01:00:44     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 17:55:00
2010.11.27 01:00:46     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 17:55:00
2010.11.27 01:00:47     Phoenix-FxStartMicroReal (EURUSD,M5)    OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
2010.11.27 01:00:48     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:48     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:49     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:49     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:53     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:53     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:54     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00
2010.11.27 01:00:55     Phoenix-FxStartMicroReal (EURUSD,M5)    time_actual 2010.11.26 18:00:00

За 10 минут наблюдений только один комментарий "Не получено значение time_actual".

При первой попытке и вовсе не было вопросов (проверял там на M1, M5, H1 и H4)...

PS

ОС Win 2003 Server x32 SP2, AMD

На тестере стратегий ни разу проблем не возникало

 
Interesting:

На тестере стратегий ни разу проблем не возникало

Это так, но в данном случае речь идёт о торговле в реальном времени.

У Вас уже 27 ноября? Вот мои логи за аналогичный период времени

HE      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:51:56        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
HK      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     19:59:56        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
IH      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     20:03:58        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
LN      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     20:04:58        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)
FO      0       YedelkinPerito06-03-1-3 (EURUSD,M1)     20:16:59        OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)

 

 
Yedelkin:

Это так, но в данном случае речь идёт о торговле в реальном времени.

У Вас уже 27 ноября? Вот мои логи за аналогичный период времени

 

Тут только в сервисдеск, поскольку данный блок у меня работает, к примеру. только я не гарантирую что он работает при других условиях.

Могу  только дополнить что я юзал от такую конструкцию

   if(!SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE,time_actual))
   {
   Print("OnTick(): Не получено значение time_actual (SERIES_LASTBAR_DATE)");
   return;
   }
   else
   {
   Print("time_actual ",(datetime)time_actual);
   }

PS

просто из любопытства посмотрите что вернет "атавизм"...

 
Interesting:
Тут только в сервисдеск, поскольку данный блок у меня работает, к примеру. только я не гарантирую что он работает при других условиях.

Так прежде чем обращаться в СД, надо понять, может всё в пределах допустимого? О чём, собственно, и был вопрос.

Эксперт ведь просто игнорирует тик с такими входными данными, и продолжает работать дальше. 

 
Yedelkin:

Так прежде чем обращаться в СД, надо понять, может всё в пределах допустимого? О чём, собственно, и был вопрос.

Эксперт ведь просто игнорирует тик с такими входными данными, и продолжает работать дальше. 

   if(!SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE,time_actual))
   {
   time_actual = SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
   Print("OnTick(): Не получено актуальное значение time_actual (SERIES_LASTBAR_DATE). Time_actual = ",(datetime)time_actual);
   return;
   }
Попробуйте так, на мой взгляд будет проще разобраться.
Причина обращения: