Сервисдеск. Жалобы, предложения.

 

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

Несколько дней назад написал очередную заявку в сервисдеск. Суть заявки такова (для МТ4):

Индикатор находится на ТФ, старше М1. Пытаюсь получить данные через функцию SeriesInfoInteger() с ТФ М1. Функция возвращает нули для свойств SERIES_BARS_COUNT, SERIES_FIRSTDATE, SERIES_SERVER_FIRSTDATE после того, как на М1 образовался новый бар. До того, как образовался новый бар - данные возвращаются корректные. После - нули. 

Вторая проблема, похожего типа. Индикатор находится на ТФ MN1. Пытаюсь получить данные через функцию SeriesInfoInteger() с ТФ M5 . Функция некоторое время возвращает корректные значения, а после - просто перестает это делать, и начинает возвращать нули, хотя ОТКРЫТИЯ НОВОГО БАРА ПО М5 НЕ ПРОИЗОШЛО!

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

Индикатор в приложении. 

Указанные выше свойства функции SeriesInfoInteger() мне нужны были для проверки/подгрузки доступной истории для ТФ иного, нежели на котором установлен индикатор. 

Никому из программистов не понравится неопределенность типа: вначале данные есть, потом их нет и получить нельзя. Тем более это не понравится пользователю(-ям), для которого пишется программа. Из сообщения видно, что я предоставил программу для тестов данной ошибки. Далее даже был предоставлен лог:

2015.10.29 14:25:52.663 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 5001, firstDate = 2015.10.26 00:00, serv_firstdate = 2015.08.21 10:59
2015.10.29 14:25:53.113 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 5001, firstDate = 2015.10.26 00:00, serv_firstdate = 2015.08.21 10:59
2015.10.29 14:25:53.419 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 5001, firstDate = 2015.10.26 00:00, serv_firstdate = 2015.08.21 10:59
2015.10.29 14:25:53.930 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 5001, firstDate = 2015.10.26 00:00, serv_firstdate = 2015.08.21 10:59
2015.10.29 14:25:54.487 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 5001, firstDate = 2015.10.26 00:00, serv_firstdate = 2015.08.21 10:59
2015.10.29 14:25:54.795 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 5001, firstDate = 2015.10.26 00:00, serv_firstdate = 2015.08.21 10:59
2015.10.29 14:25:55.412 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 0, firstDate = 1970.01.01 00:00, serv_firstdate = 1970.01.01 00:00
2015.10.29 14:25:55.943 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 0, firstDate = 1970.01.01 00:00, serv_firstdate = 1970.01.01 00:00
2015.10.29 14:25:56.678 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 0, firstDate = 1970.01.01 00:00, serv_firstdate = 1970.01.01 00:00
2015.10.29 14:25:57.169 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 0, firstDate = 1970.01.01 00:00, serv_firstdate = 1970.01.01 00:00
2015.10.29 14:25:57.938 test_271015_series_easy EURUSD,M5: OnCalculate 1: bars count = 0, firstDate = 1970.01.01 00:00, serv_firstdate = 1970.01.01 00:00

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

И вот какой ответ я получаю из СД.

Support Team 2015.10.29 10:41
Для того, чтобы получать актуальные данные с чужого символа-периода необходимо обращаться к этим данным чаще, чем 1 раз в 10 секунд. Либо обратиться к этим данным из эксперта, например при помощи iTime (тогда к данным можно обращаться не реже, чем 1 раз в 3 минуты)
Support Team 2015.10.29 10:42

Статус: Открыта Закрыта 

 

По сообщению видно, что Сервисдеску (или некоторым его служащим) вообще все равно на то, что пишут пользователи по поводу ошибок. Мне предлагают обращаться к данным чаще, чем 1 раз в 10 секунд!? Из лога видно, что данные запрашиваются гораздо чаще, на каждом тике. Уверен, этот лог даже не был прочтен. Зато мне предложили обращаться к ним "чаще" или обращаться к данным из эксперта. Гениально. А, и заявка сразу же была закрыта, типо мне помогли.

Идем дальше. Вот мой ответ:

Alexey Kozitsyn 2015.10.29 10:57
Посмотрите логи! Обращение идет на каждом тике! Тики идут гораздо чаще! Аналогично и в таймере с частотой 10 раз в секунду!
Alexey Kozitsyn 2015.10.29 10:57
Статус: Закрыта Открыта

Alexey Kozitsyn 2015.10.29 10:59
По поводу периодов - это просто периоды для теста! Если Вы об этом. Повторюсь, данные запрашиваются на каждом тике!
Alexey Kozitsyn 2015.10.29 11:00
Они могут изначально приходить, а потом перестают этого делать! Посмотрите внимательней логи.
Alexey Kozitsyn 2015.10.29 12:06

   Вы определили ошибку? 

И ответ Сервисдеска:

Support Team 2015.10.29 12:09

Откройте нужный график, тогда его данные будут в памяти всегда, пока вы его не закроете

С 900 билда у нас реализовано агрессивное освобождение памяти. Если возникает проблема с памятью, то освобождается всё, что можно.  

Данные свойства мне нужны для того, чтобы выбрать подходящий наименьший ТФ, на котором хватает данных. Мне же предлагают открывать каждый график. И не важно, сколько у меня одновременно анализируется инструментов, откройте все возможные графики и будет вам счастье.

Про агрессивное освобождение и проблемы с памятью. У терминала проблем с памятью не возникает. Ошибок в логах терминала нет. Исходя из этого можно судить, что мне просто сообщили о ситуации, когда может освобождаться память. Но это явно не мой случай. Еще один факт того, что Сервисдеск не хочет разбираться в проблеме, а хочет, чтобы от него отстали.

Далее.

Alexey Kozitsyn 2015.10.29 12:27

А Вам не кажется, что лучше доработать агрессивное освобождение памяти, нежели плодить графики? И про какие проблемы с памятью Вы говорите? И да, пожалуйста, освобождайте, но сделайте возможность их дальнейшего получения без костылей!

Вы пробовали запустить индикатор из приложения? Понимаете, что данные приходят с чужого ТФ, приходят, приходят, и бац - просто перестают это делать!? Это нормальное поведение?

Вот кусок из документации:

Для экспертов и пользовательских индикаторов лучше использовать событийную модель обработки. Если при обработке события OnTick() или OnCalculate() не удалось получить все необходимые данные требуемой таймсерии, то следует выйти из обработчика события, рассчитывая на появление доступа к данным при следующем вызове обработчика. 

В приведенном мной индикаторе, используется как раз такая модель. Если данные не получены, то ожидается приход данных на следующем тике. Но данные больше не приходят! Совсем! Получается противоречие документации!

В mql5 все работает как надо, почему в mql4 нельзя организовать также?

И ответ:

Support Team 2015.10.29 12:45

Нет. Не кажется.

По поводу документации - тут прямо следует вывод: если вам постоянно нужны данные какого-то символа-периода, то в OnInit обеспечьте постоянное присутствие этих данных. Например простым запросом iTime(needed_symbol,needed_period). И поддерживайте этот iTime на каждом тике

Вы сами нагружаете свой терминал памятью. Поэтому уменьшайте количество баров на графике до необходимого предела. Для подстраховки критически важных данных открывайте график с нужным символом-периодом.

Если Вы недовольны текущим положением вещей, то давайте выносить это обсуждение на форум. Здесь это обсуждать бесполезно.

В MT5 совсем другая модель использования исторических данных

Support Team 2015.10.29 12:46
Статус: Закрыта

По порядку:

Нет. Не кажется.

Просто хамство. Без объяснений, без комментариев.

 По поводу документации - тут прямо следует вывод: если вам постоянно нужны данные какого-то символа-периода, то в OnInit обеспечьте постоянное присутствие этих данных. Например простым запросом iTime(needed_symbol,needed_period). И поддерживайте этот iTime на каждом тике 

Первый здравый костыль смысл. Прямо следует вывод!? Где этот вывод!? Вы правда считаете что каждый, кто пишет на mql сделал для себя этот вывод!? Не домысливайте за людей. Выводы делаются из того, что написано. Для сравнения. В документации к mql5 в разделе "Организация доступа к данным" есть пример как должен быть организован доступ к данным. Все прекрасно работает. Тут же нужно угадать, что если функция SeriesInfoInteger() возвращает 0, то нужно вызвать функция iTime() для нужного символа/периода. А почему об этом не написано!? А почему нельзя без этих костылей просто доработать функцию SeriesInfoInteger()? Или хотя бы уточнить это в документации? Уважаемые разработчики, если Вы хотите, чтобы к Вам было меньше вопросов, напишите один раз подробно в документации как и что. Люди читать умеют!

Вы сами нагружаете свой терминал памятью. ...

Очень интересно, что же до меня хотели донести!? Терминал может потреблять память, а вот чтобы нагрузить терминал памятью - это для меня что-то новое.

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

Да Вы что!? А как Вы думаете, на каком количестве баров я тестировал индикатор из приложения? Похоже Вам все равно, ведь Вы даже не спросили. Это число 5000. Минимально возможное. И опять предложение открывать график. Я понял, спасибо. Добавьте это в документацию (если необходимо). 

И финал.

Если Вы недовольны текущим положением вещей, то давайте выносить это обсуждение на форум. Здесь это обсуждать бесполезно.

В MT5 совсем другая модель использования исторических данных

Да, я не доволен текущим положением вещей. Пользователи находят ошибки (а я все-таки считаю поведение функции SeriesInfoInteger() ошибкой) в Вашей программе. Делают это бесплатно. А Вы, не то, что их не хотите исправлять, Вам даже их слушать не охота, смотреть предоставленные пользователями данные. И это уже не первый раз, когда факты воспринимаются в штыки, и на ошибки пофиг. Надеюсь разработчики прислушаются и в будущем будут положительные изменения. А текущим отношением Вы депопуляризируете отношение к себе и Вашему продукту. 

Всем спасибо, кто дочитал. 

Если кто-нибудь захочет протестировать данную функцию, индикатор в приложении. 

Файлы:
 

Было сказано: "давайте выносить это обсуждение на форум".

Вы что собрались обсуждать на форуме, моё хамство или проблему очистки памяти?

 
Slawa:

Вам же сказали: "давайте выносить это обсуждение на форум".

Вы что собрались обсуждать на форуме, моё хамство или проблему очистки памяти?

Вот я и вынес обсуждение на форум. Давайте совместим.

По поводу хамства. Не всегда приятно разговаривать с Серсисдеском. Доводы выше.

По поводу функции. Я привел доказательства того, что функция работает не корректно. Вы мне предложили "костыли". Если кроме как без костылей корректная работа невозможна - добавьте описание этих костылей в документацию, чтобы в будущем не возникало вопросов. 

 
Прошу высказаться программистов. Вас устраивает такое поведение функции SeriesInfoInteger()? Устраивает документация по языку? 
 
Alexey Kozitsyn:
Прошу высказаться программистов. Вас устраивает такое поведение функции SeriesInfoInteger()? Устраивает документация по языку? 

Проблему с данными в индикаторах я поднимал давно!

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

Меня заверили, что проблему решили.

Об этом даже написали в аннотации к релизу 1200

17. Terminal: Исправлена ошибка, приводившая к выгрузке исторических данных как неиспользуемых, несмотря на регулярные обращения к данным из MQL5 программ. 

Так что же проблему не решили

ФОРТС Прошу помощи
ФОРТС Прошу помощи
  • www.mql5.com
Прошу откомпилировать этот код и "бросить" индикатор на символ MIX-6. - - Категория: автоматические торговые системы
 
Михаил:

Проблему с данными в индикаторах я поднимал давно!

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

Меня заверили, что проблему решили.

Об этом даже написали в аннотации к релизу 1200

17. Terminal: Исправлена ошибка, приводившая к выгрузке исторических данных как неиспользуемых, несмотря на регулярные обращения к данным из MQL5 программ. 

Так что же проблему не решили

В данном случае я имел ввиду МТ4. Но для МТ5 вопрос также актуален. 

 
Alexey Kozitsyn:

В данном случае я имел ввиду МТ4. Но для МТ5 вопрос также актуален. 

Я еще не обновился до 1200, пока не могу проверить исправили или нет.

Но такая бага в МТ5 была 

 
Михаил:

Я еще не обновился до 1200, пока не могу проверить исправили или нет.

Но такая бага в МТ5 была 

Вот сейчас загружается 1204. Посмотрим.
 
Alexey Kozitsyn:
Вот сейчас загружается 1204. Посмотрим.
Проверил на 1200 ( бкс-демо ), вроде исправили :)
 
Если МТ5-функцию SeriesInfoInteger не использовать, а вместо неё пользоваться старыми функциями МТ4, iBars, iTime, MarketInfo и т.д., то проблема остается?
 
В четверке будем исправлять - переборщили с агрессивной выгрузкой неиспользуемых чартов.