Подскажите, как программно запустить скрипт при смене ТФ или открытии терминала - страница 2

 
Erics >>:

Ilnur, наверно можно все-таки, если дополнительно обновить "keyboard input-state table" в нужном потоке.

Вот это надо бы попробовать на MQL, может поможете?:

Я не знаком с такой возможностью.

Думаю, что приведенный Вами код, можно перевести в MQL. Но, не понимая как он работает, будет трудно его отлаживать.


P.S. Может быть проще сначала активировать окно с заданным хендлом, затем пользуясь функцией keybd_event() посылать

нужное сочетание клавиш.

 
Ilnur писал(а) >>

Я не знаком с такой возможностью.

Думаю, что приведенный Вами код, можно перевести в MQL. Но, не понимая как он работает, будет трудно его отлаживать.

P.S. Может быть проще сначала активировать окно с заданным хендлом, затем пользуясь функцией keybd_event() посылать

нужное сочетание клавиш.

Да, бог с ним, с этим кодом. Возьму более простой вариант с keybd_event.

Задача такая: есть три окна:

EURUSD, H1 + скрипт

GBPUSD, H1 + скрипт

EURUSD, H1

Надо после закрытия/открытия терминала прикрепить скрипты к тем чартам, где были.

Как ее можно решить?

 
Erics >>:

Как ее можно решить?

Легко. Переделать скрипт в советник.

При смене ТФ перегрузка при открытии терминала автоподгрузка.

 
Erics >>:

Да, бог с ним, с этим кодом. Возьму более простой вариант с keybd_event.

Задача такая: есть три окна:

EURUSD, H1 + скрипт

GBPUSD, H1 + скрипт

EURUSD, H1

Надо после закрытия/открытия терминала прикрепить скрипты к тем чартам, где были.

Как ее можно решить?

Возможное решение:

1) Назначаем каждому скрипту, которые нужно запустить после старта терминала, горячие клавиши.

2) Создаем конфигурационный файл, н-р, start.ini, содержащий одну строку Script=LoadScripts. Здесь LoadScripts - имя скрипта, который будет запущен после старта терминала.

3) Создаем скрипт LoadScripts.mq4, который последовательно активирует окна с заданным хендлом и программно нажимает на нужное сочетание клавиш.

4) Загружаем терминал с конфигурационным файлом start.ini.


Здесь я выкладывал код функции, который активируют график с заданным хендлом. Как нажимать на горячие клавиши с помощью функции keybd_event() Вы уже знаете.

 
TheXpert >>:

Легко. Переделать скрипт в советник.

Я ему это в первом же посте посоветовал. Но видимо простых путей человек не ищет...Ну ничего, всем будет польза, может решение через api (если таковое будет найдено) пригодится в других задачах...

 
Ilnur писал(а) >>

Возможное решение:

1) Назначаем каждому скрипту, которые нужно запустить после старта терминала, горячие клавиши.

2) Создаем конфигурационный файл, н-р, start.ini, содержащий одну строку Script=LoadScripts. Здесь LoadScripts - имя скрипта, который будет запущен после старта терминала.

3) Создаем скрипт LoadScripts.mq4, который последовательно активирует окна с заданным хендлом и программно нажимает на нужное сочетание клавиш.

4) Загружаем терминал с конфигурационным файлом start.ini.


Здесь я выкладывал код функции, который активируют график с заданным хендлом. Как нажимать на горячие клавиши с помощью функции keybd_event() Вы уже знаете.

Вместо п.1-4 я поступил по-другому: использую советник (RestoreScripts), который запускается вместе с терминалом. Он отлично запускает скрипты при смене ТФ, читая из глобальных переменных хендлы их окон и их горячие клавиши.

Но это при смене ТФ. При загрузке терминала он не знает новые хендлы окон. Я могу конечно ему заголовки окон со скриптами оставить перед выходом, но в примере специально показал случай со скриптом на одном из двух окон "EURUSD,H1".

Можно конечно порядковый номер окна ему передавать (z-order). Но если я просто закрываю окно, советник тут же повесит скрипт на следующее по порядку окно. А при закрытии терминала - если он закрывает окна начиная с нижнего, z у всех будет одинаковый.

Вот, вопрос в этом. Может будут какие мысли?

Спасибо.

 
TheXpert писал(а) >>

Легко. Переделать скрипт в советник.

При смене ТФ перегрузка при открытии терминала автоподгрузка.

Как, подскажете?

Чтобы советник висел на 5-10 чартах, котировки real-time для ручной торговли, и процессор не перегружен?

 
Erics писал(а) >>

Вот, вопрос в этом. Может будут какие мысли?

В CodeBase скоро появится. Решение простейшее до смешного.
 
Integer писал(а) >>
В CodeBase скоро появится. Решение простейшее до смешного.

Да, понял. Управлять скриптами из одного эксперта неоправданно сложно.

Надо каждому скрипту дать персональный индикатор на этом же чарте, и все будет просто.

Продолжим изучать API на других примерах.

Ilnur и всем, спасибо за помощь.

 

по-моему самое простое решение запуска кода при смене таймфрейма это

if (UninitializeReason()== REASON_CHARTCHANGE) вашКод();

Причина обращения: