Запуск скриптов извне

 

Сам не сумел ответить на этот вопрос, поэтому прошу помощи более знающих людей.

Есть ли возможность запускать советники и скрипты MQL на выполнение из внешней программы?

 

не сумели ответить, так как не поставили правильно.

вам что надо - запустить ex5 код в обычном приложени  или дать команду терминалу чтоб он запустил ex5 ?

первое нельзя, второе можно, но как то недокументированно через API.

 
Есть
 
sergeev:

не сумели ответить, так как не поставили правильно.

вам что надо - запустить ex5 код в обычном приложени  или дать команду терминалу чтоб он запустил ex5 ?

первое нельзя, второе можно, но как то недокументированно через API.

Неполнота вопроса скорее всего от того, что я не до конца понимаю всех возможностей платформы.

У меня есть самописное приложение, которому хотелось бы дать возможность взаимодействовать с терминалом, т.е. открывать/закрывать позиции по рынку, делать обработки данных и прочее. Для меня видятся несколько вариантов:

  1. реализовать внешний функционал средствами mql - сейчас это будет слишком затратно и неоптимально, так как пришлось бы переносить несколько десятков тысяч строк кода с ассемблерными вставками.
  2. обернуть внешнее приложение в dll и периодически дергать его, получая данные и реагируя на них уже из скрипта - тут вопрос об оптимальном периоде дерганья, данные меняются непериодически.
  3. вариант №2 можно расширить реализовав обмен через сокеты или named pipes - но это уже огород получается.
  4. сделать на mql5 скрипты, дергать их их внешнего приложения через API (есть ли такое? и если есть, то где посмотреть), либо через командную строку (а так можно?) - видится мне наиболее оптимальным вариантом.
Возможно, есть какие-то другие методы, но мне больше всего нравится вариант №4 - вопрос, как это реализуется?

И еще один вопрос - все то же самое, только для MQL4 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
А разве нельзя сделать DLL, с которой будет работать и приложение и эксперт? В ней что-то типа флагов открывать ли, сколько и чего.
 
Vladix:

Неполнота вопроса скорее всего от того, что я не до конца понимаю всех возможностей платформы.

У меня есть самописное приложение, которому хотелось бы дать возможность взаимодействовать с терминалом, т.е. открывать/закрывать позиции по рынку

не проблема

  1. реализовать внешний функционал средствами mql - сейчас это будет слишком затратно и неоптимально, так как пришлось бы переносить несколько десятков тысяч строк кода с ассемблерными вставками.

делайте DLL и обращайтесь к ней. Затрат временных и производственных нет.

  1. обернуть внешнее приложение в dll и периодически дергать его, получая данные и реагируя на них уже из скрипта - тут вопрос об оптимальном периоде дерганья, данные меняются непериодически.

боятся нечего, можете дергать сам МТ, посылая ему сообщение на окно чарта. Он будет перехватывать его через ObChartEvent. Вам надо определиться только какое из виндовых сообщений МТ выкидывает в эту функцию.

  1. вариант №2 можно расширить реализовав обмен через сокеты или named pipes - но это уже огород получается.

а этого вообще нет смысла.

  1. сделать на mql5 скрипты, дергать их их внешнего приложения через API (есть ли такое? и если есть, то где посмотреть), либо через командную строку (а так можно?) - видится мне наиболее оптимальным вариантом.

если знаете Spy++ и WinAPI и умеете посылать сообщения окнам, то разобраться можно.

Возможно, есть какие-то другие методы, но мне больше всего нравится вариант №4 - вопрос, как это реализуется?

И еще один вопрос - все то же самое, только для MQL4 

4 вариант на МТ4 сделать тоже можно. так как тоже WinAPI и теже сообщения.
 

Попробуйте использовать для обмена с Вашим приложением вот эту библиотеку: https://www.mql5.com/ru/code/816

Проверено - работает как часы (швейцарские) и практически без накладных расходов.
Memory Mapping
Memory Mapping
  • голосов: 7
  • 2012.01.13
  • o_O
  • www.mql5.com
DLL (проект VC++ 2010) для работы с Memory Mapping.
 
sergeev

Dima_S

Спасибо за ответы! 

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

Насколько я понял из Ваших ответов, нужно посылать сообщения окну чарта, на котором будет запущен эксперт Далее система ретранслирует его в событие OnChartEvent, которое и может быть обработано в скрипте. Но для MT4 разве есть подобные события? (прошу прощения за свою темноту) А если нет, то какие могут быть альтернативы named pipe? (tcp, udp и другие протоколы сложнее в реализации и использовании)

 
Vladix:
sergeev

Dima_S

Спасибо за ответы! 

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

а вам и знать не надо. Дергаете в цикле каждую секунду/минуту

Именно поэтому я идеальным вижу вариант, когда мое приложение является ведущим, а терминал - ведомым. Т.е. терминал должен был бы каким-то образом принимать realtime нотификации.

Насколько я понял из Ваших ответов, нужно посылать сообщения окну чарта, на котором будет запущен эксперт Далее система ретранслирует его в событие OnChartEvent, которое и может быть обработано в скрипте. Но для MT4 разве есть подобные события?

для МТ4 нету. только WInAPI по запуску требуемого скрипта


 

sergeev:

боятся нечего, можете дергать сам МТ, посылая ему сообщение на окно чарта. Он будет перехватывать его через ObChartEvent. Вам надо определиться только какое из виндовых сообщений МТ выкидывает в эту функцию.

а этого вообще нет смысла.

если знаете Spy++ и WinAPI и умеете посылать сообщения окнам, то разобраться можно.

Идея интересная. Тут возможен некоторый прорыв. Создание call-back функций вызываемых из внешних приложений (в частности из другого терминала, в том числе MT4). Типа: пишем в в map-файл  номер чарта, имя функции и параметры, потом засылаем внешнее сообщение в чарт, эксперт-драйвер перехватывает, парсит map-файл и уже адресно засылает в соответствующий чарт юзерское сообщение с именем функции и параметрами.

Щупать надо.

 
Проясните пожалуйста. Я пологал что dll загружается в память всего один раз, не зависимо от того сколько приложений загрузило. И вот например такая схема: два приложения, одна длл, в длл у нас переменные, вопрос - переменные одни для двух приложений или разные? А одно приложение и одна длл, возможно ли при каждом следующем вызове не терять содержание переменных (не впихивая их в память насильно)? И еще: когда эксперт инициирует вызов длл, вызов происходит от имени терминала или эксперта? т.е. как следствие отсюда - будут ли одними глобальные переменные длл для разных экспертов, загрузивших одну и ту же длл?