Простой мост MT4 - Java

 
Привет всем,

Я программист JAVA и использую MT4 с одного года. Хотя MQL очень прост и легок в изучении, некоторые вещи на этом языке писать очень тяжело. Несколько недель назад я задумался о простой интеграции логического кода, написанного на Java, в мой советник metatrader. Я искал решение в интернете и на этом форуме и нашел несколько интересных инструментов (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ...). ) Но все они имеют свои плюсы и минусы, поэтому я решил написать свою собственную интеграцию MT4-Java.

У меня были следующие четыре требования MUST HAVE для моего решения:

1. Простая установка
2. Возможность отладки JAVA-кода
3. Скорость

4. Отсутствие сетевого взаимодействия между MT-Terminal и другим процессом


Одна вещь, которая не была важна для меня, это необходимость вызова функций MT4 (индикатор, торговые функции) из моего Java кода. Для технического анализа я использую библиотеку с открытым исходным кодом www.ta-lib.org, а обработка ордеров по-прежнему осуществляется в MQL-коде. Javacode просто информирует MQL-код, когда наступает время ПОКУПАТЬ или ПРОДАВАТЬ.

Все, что вам нужно, это MetaTrader, установленная JVM (1.6) и прилагаемый ZIP-файл, который содержит код MQL и DLL для контейнера JVM.

Скопируйте файлы из ZIP в каталог установки MT (сохраните структуру каталогов), отредактируйте файл mt4j.properties и измените путь к файлу jvm.dll. Это все для запуска советника mt4Sample.

Реализация Sample ничего не делает. Это просто скелет, чтобы показать вам, что возможно. Прочитайте комментарии внутри файлов MT4BasicClient.java и SampleEA.java. Исходные тексты JAVA вы можете найти в файле mt4jSample.jar. Ваш собственный класс должен реализовывать интерфейс MT4BasicClient или расширять класс AbstractBasicClient. Не забудьте добавить каталог или JAR-файл с вашими собственными классами в classpath (см. mt4j.properties).

Ваши Java-классы загружаются и выполняются JVM, которая работает внутри терминального процесса. Это обеспечит вам оптимальную производительность. Я провел несколько тестов производительности и подсчитал, как часто выполнялся processTick() во время бэктеста MT. Среднее количество вызовов в секунду составило 400.000 вызовов в секунду, что, на мой взгляд, достаточно быстро для моих нужд.

JVM была настроена на создание отладочного порта 8001, так что вы можете использовать вашу любимую IDE и отлаживать ваши компоненты.

Все ресурсы для опробования моего маленького моста MT4-Java прикреплены к этому сообщению.

Веселитесь :-)
Cyberflohr
Файлы:
mt4j_v0.1.zip  17 kb
 

Мило. Спасибо. Однако я не могу найти https://forum.mql4.com/270509 - он выдает ошибку. Также, не могли бы вы опубликовать ваш код. Java и mt4 - это то, что я хочу использовать, но мне нужно увидеть код.

 

Я исправил ссылку: https://www.mql5.com/en/forum/121466.

Код MQL и Java вы можете найти в ZIP-файле.

 

это отличный инструмент

почему-то я не могу заставить его работать. не могли бы вы мне помочь.

Когда я запускаю советника, он разбивает МТ4.

Я использую windows 7 64bit, Java 7.0.1, MT4 ver4.00 build 409 25 oct 2011

java установлена здесь C:\jre\bin\client\jvm.dll

mt4 установлен здесь C:\MT4\

windows выдает следующее сообщение об ошибке

Подпись проблемы:

Имя события проблемы: BEX

Имя приложения: terminal.exe

Версия приложения: 4.0.0.409

Временная метка приложения: 0028f000

Имя проблемного модуля: MSVCR100.dll

Версия модуля сбоя: 10.0.30319.1

Временная метка модуля сбоя: 4ba1dbbe

Смещение исключения: 0008ae6e

Код исключения: c0000417

Данные исключения: 00000000

Версия ОС: 6.1.7601.2.1.0.256.1

Идентификатор локали: 2057

Дополнительная информация 1: a0db

Дополнительная информация 2: a0db43c64a51ee21486e76f538ab825d

Дополнительная информация 3: 5a50

Дополнительная информация 4: 5a50e927a493324cabb3491f7239cdd1


Ознакомьтесь с нашим заявлением о конфиденциальности в Интернете:

http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409


Если заявление о конфиденциальности в Интернете недоступно, пожалуйста, прочитайте наше заявление о конфиденциальности в автономном режиме:

C:\Windows\system32\en-US\erofflps.txt

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


Существует две возможные причины сбоя вашего терминала MT4

1. Вы используете 64-битную JVM.

Это не сработает, потому что MT4 является 32-битным приложением. Вы должны установить 32-битную JVM на вашу Win7-64bit, которая может быть использована вместе с MT4.

Проверка версии JVM не должна показывать "64 бит"

C:\jre\bin\java -version

Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, mixed mode).

2. Java 7

До сих пор я тестировал свою программу только с Java6. Возможно, в Java7 есть какие-то изменения, которые вызывают сбой.

 

Доступна новая версия 0.2, в которой исправлено вышеуказанное падение терминала.

Файлы:
mt4j_v0.2.zip  17 kb
 

Привет, Киберфлор,

Я новичок в MT, но имею некоторый опыт работы с Java, поэтому мост является очень интересным инструментом для меня. Я выполнил все указанные вами шаги по установке, но не смог запустить пример. В журнале экспертов я получил следующее:

20:53:13 mt4jSample EURUSD,H4: загружен успешно

20:53:13 mt4jSample EURUSD,H4 inputs: IntProperty=99; BoolProperty=true; DoubleProperty=1.23; StringProperty="helloWorld";

20:53:17 mt4jSample EURUSD,H4: cannot load library 'mt4j.dll'(error 126)

20:53:17 mt4jSample EURUSD,H4: эксперт остановлен

20:53:17 mt4jSample EURUSD,H4: инициализация

20:54:27 mt4jSample EURUSD,H4: успешно загружен

20:54:27 mt4jSample EURUSD,H4: не удается загрузить библиотеку 'mt4j.dll' (ошибка 126)

20:54:27 mt4jSample EURUSD,H4: эксперт остановлен

20:54:27 mt4jSample EURUSD,H4: деинициализация

20:54:27 mt4jSample EURUSD,H4: причина деинициализации 1

20:54:27 mt4jSample EURUSD,H4: removed

В чем может быть причина проблемы?

 
white123right:

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


20:53:17 mt4jSample EURUSD,H4: cannot load library 'mt4j.dll' (error 126)


В чем может быть причина проблемы?

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

Ошибка 126, насколько я понимаю, означает, что MT4 не может найти файл dll. Предполагая, что вы называете его правильным именем, он должен находиться в папке /experts/libraries/. Он может находиться и в другом месте, но это лучшее место.

Надеюсь, это поможет.

Будь здоров

Brooky

 

Здравствуйте, Киберфлор,

Я выполнил вашу инструкцию по установке mt4jv0.2 и не получил никаких сообщений об ошибках в платформе MT4. Однако в SampleEA.java я обнаружил, что есть метод, который, похоже, запускается при инициализации советника в соответствии с описанием в MT4BasicClient.java

код в SampleEA.java:

@Override

public void init() {

System.out.println("init()");

}

описание в MT4BasicClient.java:

/**

* Вызывается клиентом MT4 во время фазы init.

*/

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

Кроме того, не могли бы вы дать еще одну демонстрацию для размещения ордера?

Спасибо большое, я очень ценю ваш код. :D

 
brooky29:

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

Ошибка 126, насколько я понимаю, означает, что MT4 не может найти файл dll. Предполагая, что вы называете его правильным именем, он должен находиться в папке /experts/libraries/. Он может находиться и в другом месте, но это лучшее место.

Надеюсь, это поможет.

Будь здоров

Brooky

Правильно - mt4j.dll не находится в папке libraries.

Т.е.: если папка установки metatrader - c:\program files\metatrader, то файлы для моста mt4j должны находиться в следующих местах.

c:\program files\metatrader\experts\mt4jSample.ex4
c:\program files\metatrader\experts\mt4jSample.mq4
c:\program files\metatrader\experts\libraries\mt4j.dll
c:\program files\metatrader\experts\libraries\mt4j.свойства
c:\program files\metatrader\experts\libraries\mt4jSample.jar

PS: проверьте лог-файл моста для получения дополнительной информации об ошибке

c:\program files\metatrader\experts\files\mt4j.log


 
limk0032:

Здравствуйте, Киберфлор,

Я выполнил вашу инструкцию по установке mt4jv0.2 и не получил никаких сообщений об ошибках в платформе MT4. Однако в SampleEA.java я обнаружил, что есть метод, который, похоже, запускается при инициализации советника в соответствии с описанием в MT4BasicClient.java

код в SampleEA.java:

@Override

public void init() {

System.out.println("init()");

}

описание в MT4BasicClient.java:

/**

* Вызывается клиентом MT4 во время фазы init.

*/

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

Кроме того, не могли бы вы дать еще одну демонстрацию для размещения ордера?

Спасибо большое, я очень ценю ваш код. :D

К сожалению, запись в System.out / System.err не покажет сообщения в терминале MT. Вы должны записывать сообщения в файл (используя java.io) или использовать java logging framework, например log4j или slf4j.

Я подготовлю более сложный пример, который сделает несколько сделок в ближайшие несколько дней.

с уважением,
cyberflohr