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

 

cyberflohrさん、ご返答ありがとうございます。もう一つ質問があります。

サンプルに付属しているSampleEAには、定義済みのメソッドが定義されています。もし、SampleEA.javaに独自のメソッドを追加し、MT4から呼び出したい場合、どうすればよいのでしょうか? mt4j.dllを修正すればよいのでしょうか?

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

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

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

例えば、void setBuyPrice(double price), double getPrice()のように、独自のset/getメソッドをクラスに追加することは可能ですが、可変パラメータ リストを持つメソッドを追加することは不可能です。

PS: 必要ならnoargsメソッドもサポートします。つまり、まずセッターメソッドを呼んでインスタンスオブジェクトにデータを準備し、それからnoargsメソッドを呼んで処理を開始する、など。

 

noargsメソッド(void someMethod())のサポートは非常に便利である。これによって、データの転送とその上で実行する操作の制御の 分離が改善されるからです。


よろしくお願いします。

 

cyberflohrさん、こんにちは。

素晴らしいツールですね。一つ質問があります。

MT4から呼び出すために、独自のパブリックJava APIを公開したい場合、どのようにmt4j.dllを再作成することができますか?

ありがとうございます。

Alot!

ありがとうございます。

タマス

 

CyberFlohrさん、MT4 Java Bridgeをありがとうございます。私は、MT4J.dllの実装の内容のいくつかの特徴を持つことに興味があります。私は、API内のいくつかの技術的な機能を 追加したいので、私自身のDLLを開発するための開始点を持つことを望みます。


ありがとうございます。

ジーザス

 

Cyberflohrさん、こんにちは。

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

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

オーバーライド

public void init() {

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

}

MT4BasicClient.javaに記述されています。ビーツ・バイ・ドクタードレ・ソロ

/**

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

*/

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

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

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

 

どなたか、2つの値を送信する際の厳密なテストをされた方はいらっしゃいますか?


double値を送信し、同じ値を受信するためにいくつかのオプションを試しましたが、成功しませんでした。Java環境への送信は成功しますが(Java側で受信した値をデバッグしました)、同じ値をMT環境に受信すると失敗します。


受信した値を印刷すると、以下のような出力が表示されます。


2012.05.03 22:57:32 ATT - Java EURUSD,M5: Double rec : -1.#IND


どなたか同じようなことに遭遇された方はいらっしゃいますか?実際の転送を行っているDLLは、double型の転送を正しく処理できていないようです。



よろしくお願いします。

 
pivotpoint:

どなたか、2つの値を送信する際の厳密なテストをされた方はいらっしゃいますか?


double型の値を送信し、同じ値を受信するオプションをいくつか試してみましたが、うまくいきません。Java環境への送信は成功しますが(Java側で受信した値をデバッグしました)、同じ値をMT環境に受信することは失敗します。


受信した値を印刷すると、以下のような出力が表示されます。


2012.05.03 22:57:32 ATT - Java EURUSD,M5: Double rec : -1.#IND


どなたか同じようなことに遭遇された方はいらっしゃいますか?実際に転送を行っているDLLは、double型の転送を正しく処理できていないようです。



よろしくお願いします。

getDoubleProperty(jCtx, "DoublePropertyName") という正しいゲッターメソッドを使用していますか?

サンプルmt4jSAmple.mq4をdouble値で検証してみたところ、うまくいきました。

setDoubleProperty(jCtx, "DoublePropertySample", DoubleProperty);
if (DoubleProperty != getDoubleProperty(jCtx, "DoublePropertySample")) { { { DoubleProperty != getDoubleProperty!
Alert("Double wasn't set correct: " + getDoubleProperty(jCtx, "DoublePropertySample")");

}


float値そのものが原因かもしれませんが、float値とは何でしょうか?

 
fasdfwesdgwe:

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/errに書き込まれたメッセージをMT4プラットフォームにリダイレクトして戻す方法はありません。ロギングフレームワーク(log4j,slfj)を使用して、メッセージをファイルに書き込んでください。
System.outに書き込まれたメッセージをファイルにリダイレクトするには、MT4BasicClient.javaクラスに以下の静的イニシャライザーコードを追加するだけです。

static {
try {
System.setOut(new PrintStream(new FileOutputStream("c:\temp╱mt4j.log",true)));
} catch (FileNotFoundException e) { {.
e.printStackTrace();
}
}
 
cyberflohr:
以前の投稿ですでに書いたように、System.out/err に書き込まれたメッセージを MT4 プラットフォームにリダイレクトする方法はありません。ロギングフレームワーク(log4j,slfj)を使って、メッセージをファイルに書き込んでください。
System.outに書き込まれたメッセージをファイルにリダイレクトするには、MT4BasicClient.javaクラスに以下の静的イニシャライザーコードを追加するだけです。

static {
try {
System.setOut(new PrintStream(new FileOutputStream("c:\temp╱mt4j.log",true)));
} catch (FileNotFoundException e) { {.
e.printStackTrace();
}
}


以下、リダイレクトのための別のサンプル 。


String out_filename = String.format("%s%s.log", "experts/logs/",this.getClass().getSimpleName()).ログ名("%s%s.log");
String err_filename = String.format("%s%s_error.log", "experts/logs/",this.getClass().getSimpleName());

System.setOut(new PrintStream(out_filename));
System.setErr(new PrintStream(err_filename)); System.setOut(new PrintStream(out_filename));


これで、コンソールとエラーのログをすべてきれいに記録することができます。