Вернуться к окну, где установлен советник

 

Здравствуйте форумчане!

Советник использует для работы четыре таймфрейма.

Чтобы минимизировать задержки с таймсериями желательно, чтобы графики всех таймфреймов были открыты.

Советник проверяет при запуске, и самостоятельно открывает графики с недостающими таймреймами.

Но, когда открывается новый график, фокус переходит на него, а надо сохранить фокус на том графике, к которому быт приоединён эксперт.

Как это возможно сделать?

 
Evgeny Potapov:

Здравствуйте форумчане!

Советник использует для работы четыре таймфрейма.

Чтобы минимизировать задержки с таймсериями желательно, чтобы графики всех таймфреймов были открыты.

Советник проверяет при запуске, и самостоятельно открывает графики с недостающими таймреймами.

Но, когда открывается новый график, фокус переходит на него, а надо сохранить фокус на том графике, к которому быт приоединён эксперт.

Как это возможно сделать?

Не стоит выдумывать велосипед. Если график какого-либо периода требуется только советнику и не нужен пользователю, то не следует создавать окно для него. Никакого увеличения быстродействия это не принесет, скорее наоборот. Для проверки доступности данных таймфрейма используйте функцию:

bool IsTFDataReady(ENUM_TIMEFRAMES tf)
{
   iTime(NULL, tf, 1);
   return GetLastError() == ERR_NO_ERROR;
}

Если вернет false, то ждите следующего тика. При значении true - можно обращаться к заданному ТФ.

 
Ihor Herasko:

Не стоит выдумывать велосипед. Если график какого-либо периода требуется только советнику и не нужен пользователю, то не следует создавать окно для него. Никакого увеличения быстродействия это не принесет, скорее наоборот.

Расскажите, пожалуйста, почему вы так считаете?

Я полагал, что каждый график представляет независимый процесс, поэтому указанная вами выше проверка, разумеется, нужна.

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

Или я всё неправильно понимаю?

 
Evgeny Potapov:

если к ним нет обращений, они вообще не создаются

Вот именно - если нет обращений. А если есть обращение, то они своевременно создаются и обновляются. Поэтому всего лишь нужно поставить вызов указанной функции (для каждого используемого ТФ) в начале каждого OnTick() и получится постоянное обращение к нужному графику. Такой подход позволяет оставлять его в актуальном состоянии.

При первом обращении, разумеется, функция вернет false. Возможно, то же самое произойдет при втором и третьем обращении. Все зависит от того, как много данных требуется получить с сервера и какова скорость их получения. Но в конце концов процесс загрузки закончится и функция вернет true, что позволит спокойно обращаться к данным запрошенных ТФ.

Да, это костыльное решение, но, к сожалению, другого верного способа обновить данные нужного ТФ я не знаю.

 
Ihor Herasko:

Да, это костыльное решение, но, к сожалению, другого верного способа обновить данные нужного ТФ я не знаю.

Спасибо! Лучше, конечно,  было бы если в советнике можно было прямо указать от каких таймфреймов и символов он зависит, но по сути - это будет почти тоже самое, что вы пишете.

 
Evgeny Potapov:

Спасибо! Лучше, конечно,  было бы если в советнике можно было прямо указать от каких таймфреймов и символов он зависит, но по сути - это будет почти тоже самое, что вы пишете.

Да, получается, что этим способом просто указывается, какие ТФ (и даже символы/ТФ, если немного изменить функцию IsTFDataReady) требуется использовать.

 

Увеличить быстродействие и многократно уменьшить интернет-трафик помогает удаление лишних символов из обзора рынка. Попробуйте

  откройте такое окно и понаблюдайте

 
Evgeny Potapov:

Спасибо! Лучше, конечно,  было бы если в советнике можно было прямо указать от каких таймфреймов и символов он зависит, но по сути - это будет почти тоже самое, что вы пишете.

Советник сам себе обновляет данные - каждое его обращение запускает/обновляет нужный период.
Если советник, при старте, не умеет подгружать историю, то сами, перед запуском, пощелкайте все периоды, чтобы подгрузились данные.

 

В МТ5 можно создать невидимые объекты-графики на основном чарте и установить им нужные инструмент и ТФ.

Но поддерживать кэш нужных тайм-серий с частотой 2-3 минуты надежнее.

 
Ihor Herasko:

если немного изменить функцию IsTFDataReady

А в МТ4 есть такая функция?

 
Evgeny Potapov:

А в МТ4 есть такая функция?

Так мы об МТ4 говорим. Или что Вы имеете в виду?