Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кажется нашёл проблему.
Когда истории нет, то iOpen действительно выдаёт ошибку и нули.
Но если файл с историей есть, но устаревший, то функция выдаёт последние имеющиеся данные, не проверяя за какое они число.
Не проверял, но не сталкивался с подобными проблемами... как то не случалось
С точки зрения логики вы можете перед iOpen iClose попытаться проверить наличие хотя бы одной свечки на всех тайм фреймах а не только на D1
для корректной работы может стоит проверять GetLastError()
еще можно проверять TimeCurrent() и если оно больше чем iTime той свечи которую вы просите
необходимо добиться что бы она была загружена
попробуйте поиском найти ЗАГРУЗКА ИСТОРИИ - ЗАГРУЗКА КОТИРОВОК - СКРИПТ ЗАГРУЗКИ ИСТОРИИ
кажется Вадим Жунко делал неплохой скрипт по загрузке ...
попробуйте поиском найти ЗАГРУЗКА ИСТОРИИ - ЗАГРУЗКА КОТИРОВОК - СКРИПТ ЗАГРУЗКИ ИСТОРИИ
кажется Вадим Жунко делал неплохой скрипт по загрузке ...
Поискал - не то. Нашлось всё типа 'Закачивание котировок скриптом "Key_Home"'
Мне нужна не загрузка истории "в глубину", а обновление данных на текущем баре с произвольного ТФ.
Что-то типа iRefreshRates (Symbol(), PERIOD_D1, N), где N - количество обновляемых баров, но можно и без N.
Мне нужна не загрузка истории "в глубину", а обновление данных на текущем баре с произвольного ТФ.
Посмотрите https://docs.mql4.com/ru/array/ArrayCopySeries - как обрабатывается ошибка 4066
Мне нужна не загрузка истории "в глубину", а обновление данных на текущем баре с произвольного ТФ.
Посмотрите https://docs.mql4.com/ru/array/ArrayCopySeries - как обрабатывается ошибка 4066
Зачем мне копировать массив. Я этого не хочу.
Судя по набранной в голове информации, функции обновляющей данные на заданном ТФ не существует.
Единственный способ, это запросить сначало какие-либо данные с нужного ТФ для генерации ошибки и чтобы терминал начал подгружать данные. Потом поставить короткий слип, и только после этого начинать полноценно работать.
Т.е. получается надо делать где-то так.
Или есть более цивилизованный выход?Мне нужна не загрузка истории "в глубину", а обновление данных на текущем баре с произвольного ТФ.
Посмотрите https://docs.mql4.com/ru/array/ArrayCopySeries - как обрабатывается ошибка 4066
Зачем мне копировать массив. Я этого не хочу.
А кто говорить, что нужно копировать массив? Посмотрите пример внимательнее. Если вы попытаетесь прочитать бары, которые еще не загруженые, то будеть ошибка 4066, но загрузка начнется. Нужно подождать достаточно долго и попробовать опять.
Другой подход - перед запуском советника поклыкайте по таймфреймам и загрузите все, что понадобиться. Такой подход конечно не идеален, зато у вас головная боль не будет.
А кто говорить, что нужно копировать массив? Посмотрите пример внимательнее. Если вы попытаетесь прочитать бары, которые еще не загруженые, то будеть ошибка 4066, но загрузка начнется. Нужно подождать достаточно долго и попробовать опять.
Единственный способ, это запросить сначало какие-либо данные с нужного ТФ для генерации ошибки и чтобы терминал начал подгружать данные. Потом поставить короткий слип, и только после этого начинать полноценно работать.
В принципе мы говорим об одном и том же.
Второй предложенный вами вариант не получится - данные нужно будет обновлять непосредственно перед срабатыванием эксперта.
Обидно другое - если данные есть, но устаревшие функция спокойно их выдаёт за текущие. Это ошибка. При генерации ошибки данные выдаваемые функцией всегда далжны быть равны нулю.
Надеюсь на её исправление в ближайшем билде.
Обидно другое - если данные есть, но устаревшие функция спокойно их выдаёт за текущие. Это ошибка. При генерации ошибки данные выдаваемые функцией всегда далжны быть равны нулю.
Надеюсь на её исправление в ближайшем билде.
Вы запрашиваете цену открытия нулевого бара на тааком-то таймфрейме. Нулевой бар - это самый последний известный терминалу бар на момент запроса.
Обидно другое - если данные есть, но устаревшие функция спокойно их выдаёт за текущие. Это ошибка. При генерации ошибки данные выдаваемые функцией всегда далжны быть равны нулю.
Надеюсь на её исправление в ближайшем билде.
Вы запрашиваете цену открытия нулевого бара на тааком-то таймфрейме. Нулевой бар - это самый последний известный терминалу бар на момент запроса.
Можно сделать, чтобы при запросе цен на нулевом баре, проверялось и время этого нулевого бар - если Д1, то чтобы совпадал день, если Н1, совпал текущий час?
Ведь когда обращаются к нулевому бару, то интересует именно текущая цена, параметры именно текущей свечи.
Вы запрашиваете цену открытия нулевого бара на тааком-то таймфрейме. Нулевой бар - это самый последний известный терминалу бар на момент запроса.
При запросе первого бара так же ноль выскакивает, о чем мы говорим вообще?
Ясно же, что так программа мт4 работать не должна. а должна как то иначе.