Здравствуйте форумчане!
Советник использует для работы четыре таймфрейма.
Чтобы минимизировать задержки с таймсериями желательно, чтобы графики всех таймфреймов были открыты.
Советник проверяет при запуске, и самостоятельно открывает графики с недостающими таймреймами.
Но, когда открывается новый график, фокус переходит на него, а надо сохранить фокус на том графике, к которому быт приоединён эксперт.
Как это возможно сделать?
Не стоит выдумывать велосипед. Если график какого-либо периода требуется только советнику и не нужен пользователю, то не следует создавать окно для него. Никакого увеличения быстродействия это не принесет, скорее наоборот. Для проверки доступности данных таймфрейма используйте функцию:
bool IsTFDataReady(ENUM_TIMEFRAMES tf) { iTime(NULL, tf, 1); return GetLastError() == ERR_NO_ERROR; }
Если вернет false, то ждите следующего тика. При значении true - можно обращаться к заданному ТФ.
Не стоит выдумывать велосипед. Если график какого-либо периода требуется только советнику и не нужен пользователю, то не следует создавать окно для него. Никакого увеличения быстродействия это не принесет, скорее наоборот.
Расскажите, пожалуйста, почему вы так считаете?
Я полагал, что каждый график представляет независимый процесс, поэтому указанная вами выше проверка, разумеется, нужна.
Но я так же считал, что таймфреймы связанные с окнами обновляются в первую очередь, а остальные таймфреймы, что называется, существуют на "птичьих правах" - если к ним нет обращений, они вообще не создаются. То есть, например, первое обращение однозначно будет неудачным. Если же есть график, то он позаботится о создании таймсерии.
Или я всё неправильно понимаю?
если к ним нет обращений, они вообще не создаются
Вот именно - если нет обращений. А если есть обращение, то они своевременно создаются и обновляются. Поэтому всего лишь нужно поставить вызов указанной функции (для каждого используемого ТФ) в начале каждого OnTick() и получится постоянное обращение к нужному графику. Такой подход позволяет оставлять его в актуальном состоянии.
При первом обращении, разумеется, функция вернет false. Возможно, то же самое произойдет при втором и третьем обращении. Все зависит от того, как много данных требуется получить с сервера и какова скорость их получения. Но в конце концов процесс загрузки закончится и функция вернет true, что позволит спокойно обращаться к данным запрошенных ТФ.
Да, это костыльное решение, но, к сожалению, другого верного способа обновить данные нужного ТФ я не знаю.
Да, это костыльное решение, но, к сожалению, другого верного способа обновить данные нужного ТФ я не знаю.
Спасибо! Лучше, конечно, было бы если в советнике можно было прямо указать от каких таймфреймов и символов он зависит, но по сути - это будет почти тоже самое, что вы пишете.
Спасибо! Лучше, конечно, было бы если в советнике можно было прямо указать от каких таймфреймов и символов он зависит, но по сути - это будет почти тоже самое, что вы пишете.
Да, получается, что этим способом просто указывается, какие ТФ (и даже символы/ТФ, если немного изменить функцию IsTFDataReady) требуется использовать.
Увеличить быстродействие и многократно уменьшить интернет-трафик помогает удаление лишних символов из обзора рынка. Попробуйте
откройте такое окно и понаблюдайте
Спасибо! Лучше, конечно, было бы если в советнике можно было прямо указать от каких таймфреймов и символов он зависит, но по сути - это будет почти тоже самое, что вы пишете.
Советник сам себе обновляет данные - каждое его обращение запускает/обновляет нужный период.
Если советник, при старте, не умеет подгружать историю, то сами, перед запуском, пощелкайте все периоды, чтобы подгрузились данные.
В МТ5 можно создать невидимые объекты-графики на основном чарте и установить им нужные инструмент и ТФ.
Но поддерживать кэш нужных тайм-серий с частотой 2-3 минуты надежнее.
если немного изменить функцию IsTFDataReady
А в МТ4 есть такая функция?
А в МТ4 есть такая функция?
Так мы об МТ4 говорим. Или что Вы имеете в виду?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте форумчане!
Советник использует для работы четыре таймфрейма.
Чтобы минимизировать задержки с таймсериями желательно, чтобы графики всех таймфреймов были открыты.
Советник проверяет при запуске, и самостоятельно открывает графики с недостающими таймреймами.
Но, когда открывается новый график, фокус переходит на него, а надо сохранить фокус на том графике, к которому быт приоединён эксперт.
Как это возможно сделать?