シンプルなMT4 - Javaブリッジ

 
こんにちは、皆さん。

私はJAVAプログラマーで、1年前からMT4を使っています。MQLは非常にシンプルで習得しやすいのですが、この言語でコーディングするのは本当に骨が折れるものがあります。数週間前、Javaで書かれたロジックコードを私のメタトレーダーEAに簡単に統合することを考えました。私はインターネットとこのフォーラムで解決策を探し、いくつかの興味深いツール(MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ...)を見つけました。) しかし、すべてに長所と短所があり、私は自分自身でMT4-Java統合を書くことにしました。

私のソリューションには、以下の4つの必須要件がありました。

1. 簡単なインストール
2. JAVAコードのデバッグ機能
3. スピード

4. MT-Terminalと他のプロセスとの間のネットワーク通信がないこと


私にとって重要でないことの一つは、JavaコードからMT4の機能(インジケータ、取引機能)を呼び出す必要があることです。テクニカル分析には、www.ta-lib.org からのオープンソースライブラリを使用しており、注文処理は依然として MQL コードで行われています。Javacodeは、買いと売りのタイミングをMQLコードに通知するだけです。

必要なものは、MetaTrader、インストールされたJVM(1.6)、そしてMQLコードとJVMコンテナ用のDLLを含む添付のZIPファイルだけです。

ZIPファイルをMTのインストールディレクトリにコピーし(ディレクトリ構造はそのまま)、mt4j.propertiesファイルを編集して、jvm.dllファイルへのパスを調整する。以上で、mt4Sample EAを実行することができます。

Sampleの実装は何もしません。これは、何が可能かを示すためのスケルトンに過ぎません。 MT4BasicClient.javaとSampleEA.javaの中のコメントを読んでください。 JAVA のソースは、mt4jSample.jar に含まれています。 自作クラスは、MT4BasicClientインターフェースを実装するか、AbstractBasicClientを継承 する必要があります。自作クラスのあるディレクトリまたは JAR ファイルをクラスパスに追加することを忘れないでください(mt4j.properties を参照)。

あなたのJavaクラスは、端末のプロセス内で実行されるJVMによってロードされ、実行されます。これにより、最適なパフォーマンスを得ることができます。MTのバックテスト中にprocessTick()が何回実行されたか、パフォーマンス・テストをしてみました。1秒あたりの平均呼び出し回数は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ファイルに含まれています。

 

これは素晴らしいツールです。

どういうわけか、うまく動作させることができません。

EAを実行するとMT4がクラッシュしてしまいます。

Windows 7 64bit, Java 7.0.1, MT4 ver4.00 build 409 25 oct 2011 を使用しています。

java is installed here C:\jrebin╱jvm.dll

mt4 is installed here C:↵MT4

Windowsでは以下のようなエラーメッセージが表示されます。

Problem signature:

問題イベント名: BEX

アプリケーション名: terminal.exe

アプリケーションのバージョン: 4.0.0.409

アプリケーションタイムスタンプ: 0028f000

障害モジュール名: MSVCR100.dll

障害モジュールのバージョン: 10.0.30319.1

障害モジュールのタイムスタンプ: 4ba1dbbe

例外オフセット: 0008ae6e

例外コード: c0000417

例外データ: 00000000

OSバージョン: 6.1.7601.2.1.0.256.1

ロケールID: 2057

追加情報1: a0db

追加情報 2: a0db43c64a51ee21486e76f538ab825d

追加情報 3: 5a50

追加情報 4: 5a50e927a493324cabb3491f7239cdd1


当社のプライバシーステートメントをオンラインでお読みください。

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


オンラインのプライバシーステートメントが利用できない場合は、オフラインでプライバシーステートメントをお読みください。

C:↵Windows↵US↵Errorofflps.txt

 
返信が遅れて申し訳ありません - しかし、どういうわけか私はこのスレッドの新しい投稿に通知されません。


MT4ターミナルがクラッシュした原因は、以下の2つが考えられます。

1.64ビットJVMを使用している

MT4は32ビットアプリケーションであるため、これは動作しません。Win7-64bitに32bitのJVMをインストールし、MT4と一緒に使用できるようにする必要があります。

JVM Versioncheck should not show "64 Bit"

C:\jrebinjava -version

Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03、ミックスモード)

2.Java 7

これまで、Java6のみで動作確認をしてきました。もしかしたら、Java7では、クラッシュの引き金となるような変更があるのかもしれません。

 

上記のターミナルクラッシュを修正した新バージョン0.2がリリースされました。

ファイル:
mt4j_v0.2.zip  17 kb
 

cyberflohr さん、こんにちは。

私はMTの初心者ですが、Javaの経験はあるので、ブリッジは私にとって非常に興味深いツールです。おっしゃるとおりインストールはすべて行ったのですが、サンプルを起動することができませんでした。エキスパートログには以下のように記録されています。

20:53:13 mt4jSample EURUSD,H4: ロードに成功しました。

20:53:13 mt4jSample EURUSD,H4の入力です。IntProperty=99; BoolProperty=true; DoubleProperty=1.23; StringProperty="helloWorld "です。

20:53:17 mt4jSample EURUSD,H4: cannot load library 'mt4j.dll'(エラー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: uninit reason 1.

20:54:27 mt4jSample EURUSD,H4: 削除されました。

原因は何でしょうか?

 
white123right:

cyberflohr さん、こんにちは。


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


原因は何でしょうか?

こんにちは。

126 エラーは、MT4がDLLファイルを見つけられないという意味だと理解しています。正しい名前で呼び出していると仮定すると、主に/experts/libraries/ フォルダにある必要があります。他の場所でも構いませんが、ここが最良の場所です。

これが助けになることを願っています。

ありがとうございました。

ブルッキー

 

Cyberflohrさん、こんにちは。

mt4jv0.2をインストールするためにあなたの指示に従いましたが、MT4プラットフォームで報告されたいかなるエラーも得ませんでした。しかし、SampleEA.javaを見ると、MT4BasicClient.javaの記述によると、EA初期化時に実行されるようなメソッドがあるようなのです。

のコードは、SampleEA.javaにあります。

オーバーライド

public void init() {

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

}

MT4BasicClient.javaに記述されています。

/**

* initフェーズでMT4クライアントによって呼び出されます。

*/

これらのコードから、初期化中に出力されるものがあると思いますが、MT4プラットフォームでは、「init()」メッセージが出力 されるのを見ませんでした。私はコードを正しく理解しているのでしょうか?

また、注文をするために別のデモを与えることができますか?

どうもありがとうございました。

 
brooky29:

こんにちは。

126エラーは、MT4がDLLファイルを見つけられないという意味です。正しい名前で呼び出していると仮定して、それは主に/experts/libraries/フォルダにある必要があります。他の場所でも構いませんが、ここが最良の場所です。

これが助けになることを願っています。

ありがとうございました。

ブルッキー

正しい - mt4j.dll は、libraries フォルダーにありません。

メタトレーダーのインストールフォルダーが c:\program files

c:\program files︓Metatrader︓Sample.ex4
c:\program files︓Sample.mq4
c:\program files︓Metatrader︓Experts︓Libraries︓Mt4j.dll
c:\program files︓Metatrader︓Experts︓Libraries︓Mt4j.ex4 c:\program files︓Experts︓Mt4j.ex4properties
c:\program files ﹑Metatrader﹑Libraries﹑Sample.jar

PS: check the bridge logfile for further informationations about the error

c:\program files ﹑Metatrader﹑Libraries﹑Limitem4j.log


 
limk0032:

Cyberflohrさん、こんにちは。

mt4jv0.2をインストールするためにあなたの指示に従いましたが、MT4プラットフォームで報告されたいかなるエラーも得ませんでした。しかし、SampleEA.javaを見ると、MT4BasicClient.javaの記述によると、EA初期化時に実行されるようなメソッドがあるようなのです。

のコードは、SampleEA.javaにあります。

オーバーライド

public void init() {

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

}

MT4BasicClient.javaに記述されています。

/**

* initフェーズでMT4クライアントからコールされます。

*/

これらのコードから、初期化中に出力されるものがあると思いますが、MT4プラットフォームでは、「init()」メッセージが出力されるのを見ませんでした。私はコードを正しく理解しているのでしょうか?

その上、あなたは注文を置くために別のデモを与えることができますか?

どうもありがとうございました。

System.out / System.errに書き込んでも、MTのターミナルにはメッセージが表示されません。メッセージをファイルに書き出すか(java.ioを使用)、log4jやslf4jなどのjavaロギングフレームワークを使用する必要があります。

数日中に、いくつかの取引を行う、より複雑なサンプルを用意する予定です。

よろしくお願いします。
サイバーフロアー
理由: