Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если Вы хотите получить данные с другого инструмента и другого таймфрейма, особенно в индикаторе, нужно сначала озаботиться подготовкой данных. Проверить есть ли данные. И только после этого рабоать с этими подготовленными данными.
Ок. что я неправильно делаю в этом простейшем примере? Я утверждаю что в мкл4 функция SeriesInfoInteger не работает при обращение к другому символу.
Кроме того функция SeriesInfoInteger - "Возвращает информацию о состоянии исторических данных" это из хелпа. Т.е информация уже есть и я её получаю. мне нужно знать кол-во доступных баров, мне не нужно для этого организовывать доступ к истории, так как нет необходимости в ценах опен или глоуз или других исторических данных.
Я готов согласиться с тем что могу ошибаться, но тогда где?? тыкните пальцем и скажите как сделать правильно, а ссылки на хелп и у меня имеются.
Неужели никто не сталкивался с этим вопросом и не может помочь?
Дело в том, что не получается воспроизвести указанную ошибку, т. к. проверка
дает ожидаемый результат:
Таким образом, напрашивается вывод, что какие-то проблемы именно в программе. Кстати, попробуйте сделать самое очевидное, что необходимо делать в подобных случаях: распечатайте код ошибки после вызова SeriesInfoInteger.
Также необходимо учесть, что переменная smb в Вашем коде может иметь вовсе не то значение, которое ожидается. Да и указанный таймфрейм (Period()), который берется с текущего графика, может отсутствовать для вызываемого символа.
Дело в том, что не получается воспроизвести указанную ошибку, т. к. проверка
дает ожидаемый результат:
Таким образом, напрашивается вывод, что какие-то проблемы именно в программе. Кстати, попробуйте сделать самое очевидное, что необходимо делать в подобных случаях: распечатайте код ошибки после вызова SeriesInfoInteger.
Также необходимо учесть, что переменная smb в Вашем коде может иметь вовсе не то значение, которое ожидается. Да и указанный таймфрейм (Period()), который берется с текущего графика, может отсутствовать для вызываемого символа.
Весь код программы приведён выше. SeriesInfoInteger выдаёт правильный результат только если я уже открывал график данного символа. Если же я только что открыл терминал, запустил данный код на одном символе с запросом о другом то выдаёт 0. при этом ошибки тоже нет ,GetLasterror также возвращает 0. Но у меня сотни инструментов и открывать вручную их все при каждом перезапуске это не вариант. При всём этом iBars работает отлично. Но тем не менее вопрос решился ещё одним способом - перед вызовом SeriesInfoInteger нужно обратиться к нужному символу на нужном периоде через iClose. Но зачем такие костыли??? вообщем минус в карму разработчикам.
Вы точно прочли: Организация доступа к данным? Не нравиться мт5 (или если не хочется открыть справку в MetaEditore) - вот ссылка на справку mql4: Организация доступа к данным
Если же я только что открыл терминал, запустил данный код на одном символе с запросом о другом то выдаёт 0. при этом ошибки тоже нет ,GetLasterror также возвращает 0.
Так именно об этом чуть выше Вам постоянно твердил barabashka. Перед тем, как обращаться к данным, нужно убедиться в их доступности. Да, к сожалению, это костыли. Но в МТ4 нет другого способа, кроме как:
А потом, для поддержки обновления данных следует обращаться к нужному символу на каждом новом тике.
К сожалению, за все время существования МТ4 не нашел другой, более красивой возможности осуществлять доступ к данным другого таймфрейма и/или символа.
Решил поднять вновь тему так как здесь мне упорно рекомендовали отслеживать ошибку 4066 перед обращением к истории, но это не является решением проблемы. Вопрос простой - понять что история готова для использования и она является актуальной. Вот мой алгоритм действий:
1.В обзоре рынка добавляю ранее не использованную и не открытую валютную пару. Допустим USDDKK.
2.Убираю все остальные пары кроме EURUSD. для удобства. В итоге у меня 2 пары в обзоре рынка: EURUSD и USDDKK. Открыт график EURUSD. График пары USDDKK не открывал
2.На EURUSD кидаю эксперт который запрашивает по текущему периоду историю с USDDKK.
3.Если GetLastError возвращает не 0 то кручусь в цикле дальше пока ошибка станет =0. По идее теперь данные доступны
4.Обращаюсь к USDDKK через iClose(Symbol(),Period(),0) (iTime и другие серии тоже пробовал - результат тотже) и получаю не текущие данные !
5.Удалю эксперт и кидаю его на EURUSD снова и опять же запрашиваю историю с USDDKK - и вуаля, всё работает !
Нашёл подобные темы аж с 2006 года, перепробовал всё что нашёл но ничего не работает. Да и ответа нигде небыло.
Пробовал использовать ArrayCopySeries, ArrayCopyRates и наверное тыщу других вариантов - не работает !
вот как пример древней темы, там есть и описание этого же вопроса - http://forum.mql4.com/ru/5525, но нигде нет точного ответа что делать.
Для особо страждущих вот код. Запускаю на H1
4.Обращаюсь к USDDKK через iClose(Symbol(),Period(),0) (iTime и другие серии тоже пробовал - результат тотже) и получаю не текущие данные !
Если эксперт работает на EURUSD, а Вы пытаетесь прочесть данные с USDDKK вот так:
то непонятно, почему ожидаете получить данные с USDDKK. Ведь этим способом будут получены данные с EURUSD.
Специально только что проверил на символе, который никогда не использовал, следующий код:
Результат:
Специально только что проверил на символе, который никогда не использовал, следующий код:
Результат: