Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересно узнать о развитии MQL5.community? Заходи в раздел Стена!
Alexey Kondratyev
1219
Alexey Kondratyev 2016.10.02 09:04 

Добрый день!

Кто может дать дельный совет. Нужно открыть ордер в терминале МТ4 из стороннего приложения. Интересует событийная модель взаимодействия между терминалом и приложением.

Например, когда нажимаешь на кнопку, в терминале/советнике срабатывает событие (WinAPI) и открывается ордер. 

Maxim Dmitrievsky
13252
Maxim Dmitrievsky 2016.10.02 09:10  
через кликер по кнопкам? найти id окон-кнопок, сгенерировать событие нажатия. Это в теории, на практике не делал.  Погуглите autocliсker, некоторые используют для имитации ручной торговли
Alexey Kondratyev
1219
Alexey Kondratyev 2016.10.02 09:22  
Maxim Dmitrievsky:
через кликер по кнопкам? найти id окон-кнопок, сгенерировать событие нажатия. Это в теории, на практике не делал.  Погуглите autocliсker, некоторые используют для имитации ручной торговли

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

Я хочу сделать вот как. Например у меня есть советник, он подписывается на событие внешней dll/приложения, формирует обработчик события у себя на стороне. Приложение запускает событие, на советнике событие отрабатывается.

Alexey Viktorov
5957
Alexey Viktorov 2016.10.02 10:13  

И в чём проблема? Передай значение переменной из dll в советник, а в советнике проверяй значение этой переменной. Изменение значения переменной и есть событие.

Alexey Kondratyev
1219
Alexey Kondratyev 2016.10.02 10:18  
Alexey Viktorov:

И в чём проблема? Передай значение переменной из dll в советник, а в советнике проверяй значение этой переменной. Изменение значения переменной и есть событие.

 

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

Alexey Volchanskiy
16172
Alexey Volchanskiy 2016.10.02 10:28  
Alexey Kondratyev:
 

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


Указателей в МТ4/5 нет, есть дескрипторы а-ля CButton * btn, просто синтаксис, как у указателей.

Что такое "событие в dll", проясните плз. Я для МТ4/5 много разных dll писал, давайте уточним понятие.

Я бы сделал так - в dll делаем функцию, которая вызывается из MQL. Исполняемый код функции содержит семафор. Как только код доходит до семафора, от останавливается.  Вызывающая программа пишет данные в расшаренные переменные dll и сбрасывает семафор. Код продолжает работу, читает эти переменные и возвращает из в МQL.

Минус в том, что советник спит, пока не поступит внешняя команда. Но иначе никак с таким подходом.

Можно попробовать кидать оконные сообщения, но я такого не пробовал. 

Alexey Kondratyev
1219
Alexey Kondratyev 2016.10.02 10:37  
Alexey Volchanskiy:

Указателей в МТ4/5 нет, есть дескрипторы а-ля CButton * btn, просто синтаксис, как у указателей.

Что такое "событие в dll", проясните плз. Я для МТ4/5 много разных dll писал, давайте уточним понятие.

Я бы сделал так - в dll делаем функцию, которая вызывается из MQL. Исполняемый код функции содержит семафор. Как только код доходит до семафора, от останавливается.  Вызывающая программа пишет данные в расшаренные переменные dll и сбрасывает семафор. Код продолжает работу, читает эти переменные и возвращает из в МQL.

Минус в том, что советник спит, пока не поступит внешняя команда. Но иначе никак с таким подходом.

Можно попробовать кидать оконные сообщения, но я такого не пробовал. 


Я Вас понял. Спасибо за идею. Она подходит. 

Maxim Kuznetsov
9270
Maxim Kuznetsov 2016.10.02 11:24  
Alexey Kondratyev:

Добрый день!

Кто может дать дельный совет. Нужно открыть ордер в терминале МТ4 из стороннего приложения. Интересует событийная модель взаимодействия между терминалом и приложением.

Например, когда нажимаешь на кнопку, в терминале/советнике срабатывает событие (WinAPI) и открывается ордер. 

только опрос по таймеру/тикам внешних ресурсов (файлов/семафоров etc) то есть или писать спец.DLL или через #import использовать системные функции.
Alexey Viktorov
5957
Alexey Viktorov 2016.10.02 12:57  
Alexey Kondratyev:
 

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

В общем-то я не совсем точно выразился. В вопросе звучит не dll, а стороннее приложение и нажатие кнопки, как я понял в этом приложении... Так вот нажатие кнопки это событие? Безусловно... Это событие меняет значение переменной в советнике... Передано событие? Я думаю да... Советник увидев изменение значения переменной отреагировал на это... Отреагировал на событие? Я думаю да...

Можно-ли эту модель назвать событийной? Я не знаю... Если нет, тады, ОЙ...

Alexey Volchanskiy
16172
Alexey Volchanskiy 2016.10.03 01:32  
Alexey Viktorov:

В общем-то я не совсем точно выразился. В вопросе звучит не dll, а стороннее приложение и нажатие кнопки, как я понял в этом приложении... Так вот нажатие кнопки это событие? Безусловно... Это событие меняет значение переменной в советнике... Передано событие? Я думаю да... Советник увидев изменение значения переменной отреагировал на это... Отреагировал на событие? Я думаю да...

Можно-ли эту модель назвать событийной? Я не знаю... Если нет, тады, ОЙ...

1. Нажитие кнопки - событие со стороны внешней проги, код MQL о нажатии не в курсе.

2. Передано событие? Нет, а как?

3. Советник увидев изменение значения переменной отреагировал на это - только опрашивая DLL по таймеру, нет способов из DLL дернуть код МТ4/5. Сейчас ввели в язык указатели на функции... ХЗ, может, там можно что-то намутить, не пробовал. В плюсах точно можно.

4. Посмотрите реализацию событий на C#, если не изучали. Там все просто, ключевые слова для поиска - C# delegate,  C# event 

Alexey Viktorov
5957
Alexey Viktorov 2016.10.03 07:22  
Alexey Volchanskiy:

1. Нажитие кнопки - событие со стороны внешней проги, код MQL о нажатии не в курсе.

2. Передано событие? Нет, а как?

3. Советник увидев изменение значения переменной отреагировал на это - только опрашивая DLL по таймеру, нет способов из DLL дернуть код МТ4/5. Сейчас ввели в язык указатели на функции... ХЗ, может, там можно что-то намутить, не пробовал. В плюсах точно можно.

4. Посмотрите реализацию событий на C#, если не изучали. Там все просто, ключевые слова для поиска - C# delegate,  C# event 

Ну тады ОЙ...
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий