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

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

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

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

}


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

環境


> MT4.00ビルド418

> Java Runtime : C:\Program Files (x86)╱Javajre6╱binclient╱jvm.dll

java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)

Java HotSpot(TM) Client VM (ビルド 20.6-b01, 混合モード, 共有)



MT4搭載:

==========

#import "mt4j.dll"

double getDoubleProperty(int jctx, stringproperty);

void setDoubleProperty(int jctx, string property, double value);

#import


Javaでの実装 :

==============

private doublePropertySample;


public double getDoublePropertySample() {。

return this.doublePropertySample;

}

public void setDoublePropertySample(double doubleProperty) {
this.doublePropertySample = doubleProperty;
}.



以下のコードが実行されます。

==============

double send_test_double = -8008.12345678912;

setDoubleProperty(pid, "DoublePropertySample",send_test_double);
double received_test_double = getDoubleProperty(pid, "DoublePropertySample");

Print("Double Send (as is) ",send_test_double);
Print("Double Send Test "),DoubleToStrMorePrecision(send_test_double,16));
Print("Double Received (as is) ",received_test_double);
Print("Double Received Test ",DoubleToStrMorePrecision(received_test_double,16));
Print("Double Comparison Test ",send_test_double == received_test_double));


ターミナルログに以下のような行があります。

=======================

2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Send (as is) -8008.1235
2012.05.10 00:55:55 stdlib EURUSD,M5: loaded successfully
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Send Test -8008.1234567891197003
2012.05.12 00:55:55 - Java EURUSD:M3: Double Send Test 2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Received (as is) -1.#IND
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Received Test -1.6627963145224000
2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Comparison Test 1


私はすでに何度もそれを比較したように、あなたがそれに何かを見ることができることを願っています(多分私は何かを見落としている)。

 
pivotpoint:

環境について

========

> MT4.00 build 418

> Java Runtime : C:\Program Files (x86)╱Javajre6↩binclient╱jvm.dll

Javaバージョン "1.6.0_31"
Java(TM) SE ランタイム環境 (ビルド 1.6.0_31-b05)

Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)



MT4 インクルード :

==========

#import "mt4j.dll"

double getDoubleProperty(int jctx, string property);

void setDoubleProperty(int jctx, string property, double value);

#インポート


Javaでの実装 :

==============

プライベートdoublePropertySample;


公開double getDoublePropertySample() {。

return this.doublePropertySample;

}

public void setDoublePropertySample(doubledoubleProperty) { }.
this.doublePropertySample = doubleProperty;
}



次のコードが実行されます。

==============

double send_test_double = -8008.12345678912;

setDoubleProperty(pid, "DoublePropertySample",send_test_double);
double received_test_double = getDoubleProperty(pid, "DoublePropertySample");

Print("ダブル送信(そのまま)",send_test_double).Print("ダブル送信(そのまま)",send_test_double);
Print("ダブル送信テスト ",DoubleToStrMorePrecision(send_test_double,16)); Print("ダブル受信テスト (そのまま) ",send_test_double);
Print("Double Received (as is) ",received_test_double); Print("Double Received Test ",received_test_double);
Print("Double Received Test ",DoubleToStrMorePrecision(received_test_double,16));
Print("ダブル比較テスト ",send_test_double == received_test_double); Print("ダブル比較テスト ",send_test_double == received_test_double);


ターミナルログに以下の行が記録されます。

=======================

2012.05.10 00:55:55 ATT - Java EURUSD,M5: Double Send (as is) -8008.1235
2012.05.10 00:55:55 stdlib EURUSD,M5: 正常にロードされました。
2012.05.10 00:55:55 ATT - Java EURUSD,M5: 二重送信のテスト -8008.1234567891197003
2012.05.10 00:55:55 ATT - Java EURUSD,M5: ダブル受信(そのまま) -1.#IND
2012.05.10 00:55:55 ATT - Java EURUSD,M5: ダブルは、テスト-1.6627963145224000を受信しました。
2012.05.10 00:55:55 ATT - Java EURUSD,M5: 二重の比較テスト1


私はすでに何度もそれを比較しているように、あなたはそれに何かを見ることができることを願っています(多分私は何かを見落としている)。



それとも、たまたま他の機能を強化したアップデート版が用意されているのでしょうか?現在、v2バージョンのDLLを使用しています。
 

こんにちは、pivotpointです。

私のMTビルド409であなたのコードをテストしたところ、うまくいきました。

06:37:18 mt4jSample EURUSD,H4: 二重送信(そのまま) -8008.1235
06:37:18 stdlib EURUSD,H4: ロードに成功しました。
06:37:18 mt4jSample EURUSD,H4: ダブルセンドのテスト -8008.1234567891197003
06:37:18 mt4jSample EURUSD,H4: ダブル受信(そのまま) -8008.1235
06:37:18 mt4jSample EURUSD,H4: 倍額受信テスト -8008.1234567891197003

06:37:18 mt4jSample EURUSD,H4: ダブルコンパリゾン テスト 1


とはいえ、いろいろ検索してみたところ、興味深い投稿を発見しました。あなたの使っているバージョン(418)には、重大なバグがあるようです。

https://www.mql5.com/en/forum/138657


よろしくお願いします。

サイバーフロアー

 
新バージョンです。V0.3

noargs void-methodのサポートを追加しました。

MT4のコードです。

// EAクラスでnoargs voidメソッドを呼び出します。
callNoArgsMethod(jCtx, "doSomething")とします。


よろしくお願いします。

サイバーフロアー

ファイル:
mt4j_v0.3.zip  17 kb
 
brooky29:

こんにちは。

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

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

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

ブルッキー

実際、いくつかのテストと外部フォーラムでの検索の結果、126エラーは DLLがその依存関係の1つを見つけられないときにシステムによってリリースされることがわかりました... 私は、あなたのオペレーティングシステムでどのDLLの依存関係が欠けているかを把握するためにdepends.exeというツールを使うことを強くお勧めします。
 

こんにちは。

MTビルド432で以下のエラーが発生しました。

2012.06.14 00:23:24 2011.09.26 20:00 mt4jSample EURUSD,H4: function 'addNewBar' call from dll 'mt4j.dll'critical error c0000005 at 6D8860FA.H4: 関数 'addNewBar' 呼び出しは、6D8860FA.DLからのクリティカル エラーです。

私にとっては、それはビルドがAPIで問題を得たように見えます。

新しいMTビルドでアップグレードした場合、また同じ問題にぶつかるのでしょうか?


ありがとうございます。


 

こんにちは。

私はmt4jSample.jarをロードする問題があります。SampleEA.javaに外部jarファイルを必要とするコードをいくつか追加しましたが、mt4jSample.jarを リパッケージした後、システムがそれらの外部jarファイルを認識しないか、見つけることができないようです。

新しいSampleEA.javaはEclipseでは正常に動作しますが、MetaTrader 4では動作しません。外部jarファイルを呼び出すこれらのコードを削除して再パッケージ化すると、mt4jSample.jarは正常に動作 します。

これらの外部jarファイルのためのクラスパスを定義または設定する場所を教えてください。私はmt4j.propertiesを試して みましたが、動作しません。

多くの感謝

 
javaelf:

こんにちは。

私はmt4jSample.jarをロードする問題があります。SampleEA.javaに外部jarファイルを必要とするコードをいくつか追加しましたが、mt4jSample.jarを リパッケージした後、システムがそれらの外部jarファイルを認識しないか、見つけることができないようです。

新しいSampleEA.javaはEclipseでは正常に動作しますが、MetaTrader 4では動作しません。外部jarファイルを呼び出すこれらのコードを削除して再パッケージ化すると、mt4jSample.jarは正常に動作 します。

これらの外部jarファイルのためのクラスパスを定義または設定する場所を教えてください。私はmt4j.propertiesを試してみましたが、動作しません。

多くの感謝

このフォーラムは、mql4 コーディング ... ... についてです。
 
RaptorUK:
このフォーラムは、mql4 コーディング ... ... についてです。

ありがとうございます。しかし、投稿にあるように、Eclipseで実行すると問題はないのですが、MetaTrader4で問題が発生します。MQL4やMetaTrader4がクラスのパスをどこに設定すればいいのかわかりません。
 
javaelf:

こんにちは。

私はmt4jSample.jarをロードする問題があります。SampleEA.javaに外部jarファイルを必要とするコードをいくつか追加しましたが、mt4jSample.jarを リパッケージした後、システムがそれらの外部jarファイルを認識しないか、見つけることができないようです。

新しいSampleEA.javaはEclipseでは正常に動作しますが、MetaTrader 4では動作しません。外部jarファイルを呼び出すこれらのコードを削除して再パッケージ化すると、mt4jSample.jarは正常に動作 します。

これらの外部jarファイルのためのクラスパスを定義または設定する場所を教えてください。私はmt4j.propertiesを試してみましたが、動作しません。

多くの感謝

mt4j.propertiesは、クラスパスを拡張するための正しい場所です、すなわち。

jvmOption.1=-Djava.class.path=expertslibrariesSample.jar;expertslibrariesmylib.jar;c:\mylibs


cyberflohr