Простой мост MT4 - Java - страница 3

 
cyberflohr:
Вы используете правильный метод getter - getDoubleProperty(jCtx, "DoublePropertyName") ?

Я проверил образец mt4jSAmple.mq4 с двойными значениями, и он работает.

setDoubleProperty(jCtx, "DoublePropertySample", DoubleProperty);
if (DoubleProperty != getDoubleProperty(jCtx, "DoublePropertySample")) {
Alert("Двойка была установлена неправильно: " + getDoubleProperty(jCtx, "DoublePropertySample"));

}


Возможно, дело в самом значении float, что такое значение float?

Окружающая среда

========

> MT4.00 build 418

> Java Runtime : C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll

java версия "1.6.0_31"
Java(TM) SE Runtime Environment (build 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);

#import


Реализация на Java :

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

private double 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.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


Надеюсь, вы сможете что-то увидеть на нем, так как я сравнивал его уже много раз (возможно, я что-то упустил из виду).

 
pivotpoint:

Среда

========

> MT4.00 build 418

> Java Runtime: C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll

java версии "1.6.0_31"
Java(TM) SE Runtime Environment (сборка 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 :

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

private double 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("Двойная отправка (как есть) ",send_test_double);
Print("Тест отправки двойки ",DoubleToStrMorePrecision(send_test_double,16));
Print("Двойной прием (как есть) ",received_test_double);
Print("Тест на двойное получение ",DoubleToStrMorePrecision(received_test_double,16));
Print("Тест на двойное сравнение ",send_test_double == received_test_double);


Следующие строки в журнале терминала :

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

2012.05.10 00:55:55 ATT - Java EURUSD,M5: Двойная отправка (как есть) -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 build 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: Double Received Test -8008.1234567891197003

06:37:18 mt4jSample EURUSD,H4: Тест двойного сравнения 1


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

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


приветствую,

cyberflohr

 
Новая версия: V0.3

добавлена поддержка для noargs void-метода.

Код MT4:

// вызывает метод noargs void в классе вашего эксперта.
callNoArgsMethod(jCtx, "doSomething");


пожелания,

cyberflohr

Файлы:
mt4j_v0.3.zip  17 kb
 
brooky29:

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

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

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

Будь здоров

Brooky

На самом деле, после нескольких тестов и поиска на внешних форумах, я обнаружил, что ошибка 126 выдается системой, когда DLL не может найти одну из своих зависимостей... я настоятельно рекомендую использовать инструмент depends.exe, чтобы выяснить, какая зависимость dll отсутствует в вашей операционной системе.
 

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

У меня ошибка ниже для MT build 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.

Для меня это выглядит так, как будто сборка получила проблемы с 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=experts\libraries\mt4jSample.jar;experts\libraries\mylib.jar;c:\mylibs\mylib2.jar


cyberflohr