Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В один цикл все равно не выйдет, раз у всех индикаторов один поток, хоть с таймером, хоть без таймера. Или я не понял Вашу задумку.
Для закачки и проверки истории, по аналогии с МТ5: https://www.mql5.com/ru/docs/series/timeseries_access
Повторю вопрос, Вы знаете, как можно средствами старого mql4 получить эту дату?
... переносимость программ с МТ4 на МТ5 и обратно.
C 4 на 5 - понятно. А наоборот - не очень.
Скажем, есть индикатор1. Он вызывает индикатор2. Индикатору2 не хватает данных по некоторым символам/ТФ. Он передает эти данные в индикатор1 и из него уже в таймере загружаются необходимые данные. После того, как придет подтверждение, что все нужные данные загружены - опять пытаемся загрузить данные по индикатору2 и как только все нужные данные будут получены - рассчитываем индикатор1.
Память выделяется 5 раз. Под адресное пространство команд для одного и того-же.
Что Вы об агрессивном освобождении памяти адресного пространства данных плачете? Там, хотя-бы, экстенты присутствуют.
Оооочень долго арбитраж жду. 3-юю неделю(2-ую просили подождать,ладно).
Я знаю. Time[Bars-1]
Вы не правы. Я уже писал ниже, что приведенная Вами конструкция даст первую дату не на сервере, а на чарте.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Сервисдеск. Жалобы, предложения.
Alexey Kozitsyn, 2015.10.30 16:42
Используя конструкцию iTime( _Symbol, period, Bars( _Symbol, period )-1 ) можно получить время первой доступной свечи на чарте.
Но, чтобы получить время первой свечи на сервере, я что-то не придумал какую конструкцию написать.
С использованием SeriesInfoInteger все делается просто: SeriesInfoInteger( _Symbol, period, SERIES_SERVER_FIRSTDATE );
Память выделяется 5 раз. Под адресное пространство команд для одного и того-же.
Что Вы об агрессивном освобождении памяти адресного пространства данных плачете? Там, хотя-бы, экстенты присутствуют.
Вообще говоря, нормальное решение упомянутой мной проблемы с iCustom скорее всего есть.
Если в МТ5 уже загружен хэндл какого-то индикатора с заданными параметрами на данном символе/тф, то при вызове его из любого другого места, как я понимаю, повторного расчета того же самого индикатора не происходит, а используется уже имеющийся хэндл.
Ну и поскольку на первом "уровне вложенности" до вызова iCustom работает вызов OnTimer, то можно дождаться последовательного расчета всех индикаторов, начиная с самых базовых, потом тех, которые используют базовые, потом тех кто уже их использует и т.д. на любой уровень вложенности, создавая их хэндлы только тогда, когда все используемые в них индикаторы и таймсерии уже были просчитаны. Тогда необходимость в кнопке "Обновить" скорее всего пропадает. Жаль я до этого не догадался неделю назад...
П.С. Только нужно учесть при использовании OnTimer, что индикаторные буферы не отобразятся на графике и в окне данных, пока OnCalculate, вызванная самим терминалом, не возвратит значение, отличное от 0. А OnCalculate терминал все также вызывает только один раз сразу после Инита, когда таймсерии и индикаторы ещё не построились. При вызовах OnCalculate из Ontimer, какое бы значение она не возвращала, если самый первый возврат был 0, то индикатор не отобразится на графике до прихода следующего тика или нажатия на "Обновить".
Вторая проблема, похожего типа. Индикатор находится на ТФ MN1. Пытаюсь получить данные через функцию SeriesInfoInteger() с ТФ M5 . Функция некоторое время возвращает корректные значения, а после - просто перестает это делать, и начинает возвращать нули
О всемогущие модераторы, обратите свой взор на проблему:)