Отправка ордеров в MT4 из Java через IP

 

Здравствуйте,

Есть ли способ отправлять простые ордера (просто BUY, SELL, CLOSE) на MT4 с другого компьютера (на котором установлено Java-приложение) по IP?

Двунаправленная связь не нужна, только однонаправленная.

Заранее спасибо.

 
Mariop: Есть ли способ отправлять простые ордера (просто BUY, SELL, CLOSE) в MT4 с другого компьютера (на котором установлено Java-приложение) по IP? Двунаправленная связь не нужна, только однонаправленная.

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

Поэтому зайдите в раздел " Фриланс" и наймите кого-нибудь квалифицированного, кто сделает это для вас, но я сомневаюсь, что это будет недорого.

 
:) Спасибо за ваш ответ.
Тем не менее, я думаю, что я не такой уж новичок, на самом деле я уже делал более сложные вещи с C# много лет назад через TradePlatform.NET, но в этот раз мне нужно отправить их (ордера) из программы на Java. Так что если есть какой-либо способ, чтобы MT4 мог получать ордера так, как я спросил, я все еще жду более интересных ответов.
 

Я уже дал вам наиболее подходящий ответ! Вы всегда можете использовать файлы в сети в качестве метода связи, но это будет медленно и громоздко.

Тот факт, что вы задали этот вопрос, говорит о том, что в том, что касается среды программирования MetaTrader/MQL, вы не очень хорошо разбираетесь в MQL/MetaTrader. Я говорю это потому, что если бы вы хорошо знали MQL и WinAPI, вы бы уже знали о различных решениях IPC через каналы, именованные трубы, TCP/IP и др. - большинство из которых реализованы через библиотеки DLL, но не обязательно.

 
Самый простой (хотя и не легкий) способ подключения MT4 из Java - это сокеты, примеры кодов для MQL есть в кодовой базе и статьях.
 
Ovo:
Самый простой (хотя и не легкий) способ подключить MT4 из Java - это сокеты, примеры кодов для MQL есть в кодовой базе и статьях.

У меня почти нет опыта работы с Java, но, если два компьютера находятся в одной локальной сети, то именованные трубы - поддерживаемые MQL4 через FileOpen() - могут быть возможны и более просты.

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

 
jjc:

У меня почти нет опыта работы с Java, но, если два компьютера находятся в одной локальной сети, то именованные трубы - поддерживаемые MQL4 через FileOpen() - могут быть возможны и более просты.

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

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

 
jjc:

У меня почти нет опыта работы с Java, но, если два компьютера находятся в одной локальной сети, то именованные трубы - поддерживаемые MQL4 через FileOpen() - могут быть возможны и более просты.

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java


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


Ovo:
Самый простой (хотя и не легкий) способ подключить MT4 из Java - это сокеты, примеры кодов для MQL есть в кодовой базе и статьях.


Yep. Лучшее решение, которое я нашел, похоже, это использование mt4-zeromq, но все еще не могу найти пример, показывающий, как использовать его для совершения сделки. Я думаю, что это может быть лучшим способом сделать это, поскольку (¿)он не будет иметь никакой задержки(?) и его можно использовать в среде Linux, поэтому любой простой пример кода об этом был бы признателен.

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

 
Ovo:

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

"Именованные трубы" сначала должны быть созданы на стороне MT4, путем вызова функций WinAPI. Только после этого он может быть использован JAVA как стандартный файл. Это не должно быть проблемой, потому что это именно то, что хочет ОП, но это идеально подходит только для решения LAN.

Sockets, с другой стороны, идеально подходит как для LAN, так и для WAN решений, но потребует DLL-обертки для WinAPI с дополнительными функциями поддержки, чтобы облегчить MT4 работу.

Однако, ОП просто должен "позволить своим пальцам делать ход", так как существует много информации о возможных решениях. Он просто должен выбрать, какой метод ему больше подходит, будь то именованные пипсы, сопоставленные файлы, сокеты или что-то еще:
 
Mariop: Однако главная проблема, которую я все еще вижу, - это задержка: Когда я разрабатывал нечто подобное, но в противоположном направлении (MT4 взаимодействовал с внешним сервером), такой проблемы не было, поскольку между рыночными тиками MT4 не было новой информации, но в данном случае я не могу понять, как MT4 сможет получать ордера (и исполнять их) между тиками. Не будет ли это проблемой? Или, может быть, я что-то упускаю, и это не будет проблемой?

С помощью обработчика события OnTimer(), который не зависит от входящих тиков!

Mariop: Лучшим решением, которое я нашел, кажется решение с использованием mt4-zeromq, но все еще не могу найти пример, показывающий, как использовать его для выполнения сделки.

Постарайтесь не зависеть от библиотек сторонних производителей. Просто напишите свою собственную DLL с дополнительными вспомогательными функциями, чтобы облегчить работу с MT4. Кодируйте DLL на C, а не на C#, так как он имеет зависимости и не так эффективен, как C.

Также разработайте свой собственный формат сообщений/протокол, соответствующий требованиям. Сделайте его компактным и эффективным, а позже, при необходимости, зашифруйте его для безопасности.

 
FMIC:

Старайтесь не зависеть от сторонних библиотек. Просто напишите свою собственную DLL с дополнительными вспомогательными функциями, чтобы облегчить работу с MT4. Кодируйте DLL на C, а не на C#, так как он имеет зависимости и не так эффективен, как C.

Также разработайте свой собственный формат сообщений/протокол, соответствующий требованиям. Сделайте его компактным и эффективным, а позже, при необходимости, зашифруйте его для безопасности.

Теперь у нас есть гораздо более интересный ответ, чем ваш первый. Я абсолютно согласен с вами, и это действительно ХОРОШИЕ СОВЕТЫ. Я ушел с MQL несколько лет назад, так как разработал свою собственную платформу (мне РЕАЛЬНО нужны были некоторые специфические функции, которых я не нашел ни на одной другой платформе, а не потому, что у меня было настроение тратить на это огромное количество часов). Теперь я собираюсь начать сотрудничать с брокером, который работает исключительно с MT4, поэтому мне нужно построить мост для подключения к нему. Поэтому я тороплюсь, чтобы все заработало как можно скорее.


FMIC:

С помощью обработчика события OnTimer(), который не зависит от входящих тиков!


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

Опять же, хорошие советы ;)