Ошибки, баги, вопросы - страница 2934

 
Vitaly Muzichenko:

ну так сделайте выход, если данные не скопированы

При повторном тике уже всё будет подгружено и код отработает правильно

 Как раз нет, в моём случае код отработает чудовищно некорректно, в индикаторе объекты сползут со своих позиций к чёртовой бабушке. Буду разбираться с подгрузкой истории...

 
Евгений Баженов:

Здравствуйте, я тестирую своего робота, после окончания тестирования увидел в Журнале много полей с реквотами, что означают эти пачки сообщений и что можно в коде дописать чтобы они не появлялись? Спасибо, с наступающим НГ! 

Предполагаю, что в символе сессия торговли меньше, чем сессия котирования. Тогда котиры идут в Тестере, но торговля по ним запрещена в такие периоды.

 
x572intraday:

 Маразм в том, что по https://www.mql5.com/ru/docs/series/timeseries_access в статье о подгрузке истории в коде упоминается Sleep(), а справка по Sleep() гласит: "Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить." А мне, получается, подгружать историю нужно как раз в индикаторе.

Чей маразм?

При запросе данных из индикатора (а не из эксперта) эти самые данные отдаются сразу какие есть, без задержки. Виталий правильно сказал.

сделайте запрос нужного символа-периода в OnInit, чтобы проинициировать построение нужной истории 

 
Slava:

Чей маразм?

При запросе данных из индикатора (а не из эксперта) эти самые данные отдаются сразу какие есть, без задержки. Виталий правильно сказал.

сделайте запрос нужного символа-периода в OnInit, чтобы проинициировать построение нужной истории 

 1. Если я правильно понял, Вы предлагаете сделать запрос один-единственный раз в OnInit, в самом начале работы индикатора. Здесь https://www.mql5.com/ru/docs/runtime/event_fire событие Init обложенно массой сопутствующих условий: "Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета." Но пользователь не обязан генерировать эти события, ему может быть комфортно сидеть на единственном текущем ТФ и наблюдать за индикатором, поэтому переинициализации и дозагрузки истории более одного раза уже не будет. Однако нехватка истории возникает не обязательно в начале работы, ошибка внезапно и неоднократно появляется в произвольное время в процессе работы (более того, в течение длительной работы индикатора она может вообще не появиться ни разу; зачастую никакой ошибки в начале работы и не возникает). Тогда и нехватающую часть истории нужно подгружать не только в OnInit, но и в OnCalculate, дабы предупреждать повторяющуюся ошибку?

 Или под "проинициировать построение нужной истории" Вы имели в виду, что достаточно один раз это сделать в OnInit и в дальнейшем повторять этого не нужно будет? Однако замечу, что, с одной стороны, ошибка таки вылезает даже когда вся история инструмента загружена и все ТФы отстроены, поскольку индикатор мультитаймфреймовый и рилтаймовый; с другой стороны, при тех же условиях ошибка может и не вылезать.

 2. Что означает само понятие "нехватка части истории"? Когда впервые после установки запускаешь терминал, он докачивает нехватающую историю — буквально то, что слева, более ранее по времени. У меня же происходит CopyTime(_Symbol,tf,0,1,Arr), то есть копирование одного самого свежего бара справа, а не исторического. Неужели новый бар каким-то боком может относиться к истории и её нехватке??

 3. Допускаю, что моих туманных объяснений для понимания проблемы может оказаться мало, не хочу быть отправленным в https://www.mql5.com/ru/forum/133408, поэтому готов предоставить разработчикам и всем желающим код с комментариями для совместного дебага, поскольку индикатор собираюсь зарелизить как бесплатный, в свободный доступ через CodeBase. Кстати, раз на то пошло, допустимо ли релизить неотдебаженный бесплатный код?

Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
События клиентского терминала - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

 1. Если я правильно понял, Вы предлагаете сделать запрос один-единственный раз в OnInit, в самом начале работы индикатора. Здесь https://www.mql5.com/ru/docs/runtime/event_fire событие Init обложенно массой сопутствующих условий: "Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета." Но пользователь не обязан генерировать эти события, ему может быть комфортно сидеть на единственном текущем ТФ и наблюдать за индикатором, поэтому переинициализации и дозагрузки истории более одного раза уже не будет. Однако нехватка истории возникает не обязательно в начале работы, ошибка внезапно и неоднократно появляется в произвольное время в процессе работы (более того, в течение длительной работы индикатора она может вообще не появиться ни разу; зачастую никакой ошибки в начале работы и не возникает). Тогда и нехватающую часть истории нужно подгружать не только в OnInit, но и в OnCalculate, дабы предупреждать повторяющуюся ошибку?

 Или под "проинициировать построение нужной истории" Вы имели в виду, что достаточно один раз это сделать в OnInit и в дальнейшем повторять этого не нужно будет? Однако замечу, что, с одной стороны, ошибка таки вылезает даже когда вся история инструмента загружена и все ТФы отстроены, поскольку индикатор мультитаймфреймовый и рилтаймовый; с другой стороны, при тех же условиях ошибка может и не вылезать.

 2. Что означает само понятие "нехватка части истории"? Когда впервые после установки запускаешь терминал, он докачивает нехватающую историю — буквально то, что слева, более ранее по времени. У меня же происходит CopyTime(_Symbol,tf,0,1,Arr), то есть копирование одного самого свежего бара справа, а не исторического. Неужели новый бар каким-то боком может относиться к истории и её нехватке??
В индикаторах вам никто не гарантирует выдачи запрашиваемых данных, если они не готовы.

В скриптах и экспертах достаточная гарантия есть.

Поэтому в индикаторах ждите цикл за циклом доступности данных.

Чтобы повысить вероятность получения нужных данных, делайте в онините индикатора фейковые запросы данных. Это спровоцирует фоновую загрузку данных.
 
Renat Fatkhullin:
В индикаторах вам никто не гарантирует выдачи запрашиваемых данных, если они не готовы.

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

 
Renat Fatkhullin:
В индикаторах вам никто не гарантирует выдачи запрашиваемых данных, если они не готовы.

В скриптах и экспертах достаточная гарантия есть.

Поэтому в индикаторах ждите цикл за циклом доступности данных.

Круто... Даже в новый год на посту. С новым годом.!!!!!!!

 
x572intraday:

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

Прочтите внимательно мой ответ.
 
Renat Fatkhullin:
Прочтите внимательно мой ответ.

 Надо определиться с понятием доступности данных. Если я вижу бар в терминале, он уже доступен или возможны другие варианты? И да, Renat, как насчёт 3-го пункта моего предыдущего поста?

 
x572intraday:

 Надо определиться с понятием доступности данных. Если я вижу бар в терминале, он уже доступен или возможны другие варианты? И да, Renat, как насчёт 3-го пункта моего предыдущего поста?

Если вы получили ответ функции, значит данные недоступны.

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