Ошибка в терминале приводящая к ERR_HISTORY_NOT_FOUND - страница 2

 
lunix:
... Тут явно ошибкой терминала пахнет.

Прежде, надо прочитать и видимо не один раз  - "Организация доступа к данным".

"Для экономии ресурсов данные по таймфрейму загружаются и хранятся в оперативной памяти только по необходимости, при длительном отсутствии обращений к данным происходит выгрузка их из оперативной памяти с сохранением в файл."

"При доступе к ценовым данным или к значениям индикаторов из mql5-программ следует помнить, что не гарантируется их доступность в определенный момент времени, либо с определенного момента времени. Это связано с тем, что в целях экономии ресурсов в MetaTrader 5 не хранится полная копия требуемых данных для mql5-программы, а дается прямой доступ к базе данных терминала."

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

 
Yurich:

Прежде, надо прочитать и видимо не один раз  - "Организация доступа к данным".

"Для экономии ресурсов данные по таймфрейму загружаются и хранятся в оперативной памяти только по необходимости, при длительном отсутствии обращений к данным происходит выгрузка их из оперативной памяти с сохранением в файл."

"При доступе к ценовым данным или к значениям индикаторов из mql5-программ следует помнить, что не гарантируется их доступность в определенный момент времени, либо с определенного момента времени. Это связано с тем, что в целях экономии ресурсов в MetaTrader 5 не хранится полная копия требуемых данных для mql5-программы, а дается прямой доступ к базе данных терминала."

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

Хорошо, так как быть, как организовать эту доступность? Если нужно вызывать  CopyRates() другого периода?
 
lunix:
Хорошо, так как быть, как организовать эту доступность? Если нужно вызывать  CopyRates() другого периода?
Если запрашиваемые данные недоступны, то ждать готовности данных( попробовать обратится  к этим данным через некоторое время или на следующим тике).
 

Я специально для этого выложил шаблон для тестов, варианты которые перепробовал я:

1) Ждать через Sleep()

2) Пропускать возвращая prev_calculated

3) Вызывать CheckLoadHistory в OnInit или перед каждым CopyRates()

 ... не работает именно первая инициализация или после перезапуска терминала.

Попробуйте сами в самом первом посте исходник, он очень простой! 

 
lunix:

Попробуйте сами в самом первом посте исходник, он очень простой! 

Держите.

Сегодня нет тиков, поэтому если индикатор не рисует, то надо обновить график(меню правой кнопки мыши).


Файлы:
 


Yurich
:

Держите.

Сегодня нет тиков, поэтому если индикатор не рисует, то надо обновить график(меню правой кнопки мыши).


Проблема все там же! Вы переключите тайм фрейм графика не в D1, закройте терминал, потом снова откройте терминал и вуаля окошко под индикатор пустое! А должно быть заполнено! А вы только вывод сообщения об ошибке доступа к истории за комментировали :)

 
lunix:

Проблема все там же! Вы переключите тайм фрейм графика не в D1, закройте терминал, потом снова откройте терминал и вуаля окошко под индикатор пустое! А должно быть заполнено! А вы только вывод сообщения об ошибке доступа к истории за комментировали :)

Посмотрите внимательнее :)

Сегодня нет тиков, если есть ошибка в доступе к данным, то прерывается OnCalculate() до следующего тика. Что бы вызвать повторное OnCalculate() - обновите чарт. У меня все работает.

 
Yurich:

Посмотрите внимательнее :)

Сегодня нет тиков, если есть ошибка в доступе к данным, то прерывается OnCalculate() до следующего тика. Что бы вызвать повторное OnCalculate() - обновите чарт. У меня все работает.

Вашу мысль понял, по тестю, когда будут тики! Спасибо!