[СЕРВИСДЕСК] Ошибка получения времени старшего ТФ в таймере! - страница 14

 
Хотя сейчас погонял несколько раз. Забавно, но не всегда срабатывает. Иногда не успевает связь установиться.
У меня сама по себе связь хорошая. Может и в этом причина.
 
Но с данным тестом я другое заметил. Даже при запуске сейчас с подсчетом проходов, у меня выходит 10 проходов через OnCalculate, даже сегодня. Получается что для вас похоже лучший вариант сделать небольшую задержку при старте индикатора.
 
Konstantin Nikitin:
Но с данным тестом я другое заметил. Даже при запуске сейчас с подсчетом проходов, у меня выходит 10 штук через OnCalculate. Получается что для вас похоже лучший вариант сделать небольшую задержку при старте индикатора.

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

 
Alexey Kozitsyn:

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

Я вам описал то что увидал. А как это с этим быть надо думать. То-есть это не годиться по любому получатся отслеживание первых проходов и т.п..

 
Konstantin Nikitin:

Я вам описал то что увидал. А как это с этим быть надо думать. То-есть это не годиться по любому получатся отслеживание первых проходов и т.п..

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

 
Если знать разницу с сервером в часах. Можно воспользоваться сравнением текущего локального часа с временем открытия последнего часового бара. TimeCurrent не подойдет, т.к. может не обновиться время.
Что-то типа такого
     MqlDateTime mqlDateTime;
     TimeToStruct( (TimeLocal()-60*3), mqlDateTime );
     mqlDateTime.min = 0;
     mqlDateTime.sec = 0;
     
     if( IsConnected() )
          Comment( TimeToString( iTime(Symbol(), PERIOD_H1, 0) ), "\n", TimeToString( StructToTime(mqlDateTime) ) );
 
Alexey Kozitsyn:

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

терминал 1121 и 1090

Alexey Kozitsyn:

Связь с сервером установлена. При запросе данных старшего ТФ, если данные не готовы - ошибка или возврат 0. Если данные готовы - возврат ТОЛЬКО актуальных данных. Все. Если данные не готовы продолжительное время - пусть и возвращает нам ошибку или 0.

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

Как только появляются новые данные, сразу генерируется тик (даже сейчас, при закрытом рынке).
Нужно просто делать проверку на обновление-появление нового бара и самому изменять свои переменные.

пс. флага актуальности данных в мт4 нет.

 
Taras Slobodyanik:

терминал 1121 и 1090

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

Как только появляются новые данные, сразу генерируется тик (даже сейчас, при закрытом рынке).
Нужно просто делать проверку на обновление-появление нового бара и самому изменять свои переменные.

пс. флага актуальности данных в мт4 нет.

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

Категорически не согласен с поведением, которое нельзя контролировать. Функция без ошибки возвращает некорректные данные - это неправильно. Сами же потом нарветесь на такую ситуацию и будете гадать в чем проблема.

Вот скажите, функция сначала вернула ошибку. Вышли. На следующем запросе функция ошибку уже не вернула и вернула какие-то "левые" данные. Это нормально?

 

Что значит некорректные данные?

Когда их нет, или нет связи, или еще что-то - тогда да, возникает ошибка.
И считать нечего.

Когда же все данные корректные - всё нормально и всё запускается.

У вас индикатор не отслеживает обновление данных.
От брокера приходят новые бары, а вы их не проверяете.
Я добавил пару строк чтобы показать, что при проверке всё отображается верно.

Это рабочая ситуация - проверять новый бар.

 
Taras Slobodyanik:

Что значит некорректные данные?

А Вы посмотрите мой самый первый пост. Видите там ошибку 4066? Потом ошибку 0 и возврат некорректных данных. Почему же функция (в данном случае SeriesInfoInteger()) предварительно перед отправкой данных не делает проверку на актуальность? Почему она не взводит флаг ошибки? Понимаете, лучше подождать чуть дольше, пока проходят внутренние проверки, чем потом искать ошибки.

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

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