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

 

Спасибо cyberflohr за ваш ответ. У меня есть еще один вопрос.

Есть предопределенные методы, определенные в SampleEA, который поставляется с вашим примером. Эти методы связаны с MT4 через mt4j.dll. Если я хочу добавить свой собственный метод в SampleEA.java и хочу, чтобы он вызывался в MT4, что я должен сделать? Изменить mt4j.dll?

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

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

с уважением,
cyberflohr
[Удален]  

Вы можете добавить свои собственные методы set/get в свой класс, например, void setBuyPrice(double price), double getPrice(), но добавление методов с переменным списком параметров невозможно.

PS: Я могу добавить поддержку методов noargs, если вы хотите, то есть вы сначала вызываете свои методы setter, чтобы подготовить объект экземпляра с данными, а затем вызываете метод noargs, чтобы начать обработку - все, что вы хотите.

 

Поддержка методов noargs (void someMethod()) была бы очень удобна. Так как это улучшило бы разделение передачи данных и контроля операций, выполняемых над ними.


С уважением,

 

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

Отличный инструмент. У меня есть один вопрос:

Как я могу перегенерировать mt4j.dll, если я хочу выставить свой собственный публичный java api для вызова из MT4?

Спасибо,

Алот!

С уважением,

Тамас

 

Привет CyberFlohr, большое спасибо за этот MT4 Java Bridge. Я заинтересован в том, чтобы иметь некоторые черты содержания реализации MT4J.dll, я хотел бы иметь отправную точку для разработки моей собственной DLL, потому что я хотел бы добавить некоторые технические функции, доступные в API.


Спасибо,

Иисус

[Deleted]  

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

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

код в SampleEA.java:

@Override

public void init() {

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

}

описание в MT4BasicClient.java:Beats by Dr. Dre Solo

/**

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

*/

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

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

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

 

Кто-нибудь проводил жесткое тестирование при передаче двойных значений?


Я пробовал несколько вариантов передачи двойного значения и получения его обратно, но безрезультатно. Отправка в среду Java проходит успешно (поскольку я отладил полученное значение на стороне java), но получение того же значения обратно в среду MT не удается.


При печати полученного значения выдается результат, как показано ниже:


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


Кто-нибудь сталкивался с подобным? Похоже, что dll, которая выполняет фактическую передачу, неправильно обрабатывает обратную передачу двойных типов.



Заранее спасибо.

[Удален]  
pivotpoint:

Кто-нибудь проводил жесткое тестирование при передаче двойных значений?


Я пробовал несколько вариантов передачи двойного значения и получения его обратно, но безрезультатно. Отправка в среду Java проходит успешно (поскольку я отладил полученное значение на стороне java), но получение того же значения обратно в среду MT не удается.


При печати полученного значения выдается результат, как показано ниже:


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


Кто-нибудь сталкивался с подобным? Похоже, что dll, которая выполняет фактическую передачу, неправильно обрабатывает обратную передачу двойных типов.



Заранее спасибо.

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

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

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

}


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

[Удален]  
fasdfwesdgwe:

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

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

код в SampleEA.java:

@Override

public void init() {

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

}

описание в MT4BasicClient.java:Beats by Dr. Dre Solo

/**

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

*/

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

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

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

Как я уже писал в предыдущем сообщении, не существует способа перенаправить сообщения, записанные в 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());
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));


Который будет красиво регистрировать все ваши консольные данные и данные об ошибках.