단순 MT4 - 자바 브리지 - 페이지 2

 

답변해 주셔서 감사합니다. 다른 질문이 있습니다.

샘플과 함께 제공되는 SampleEA에 정의된 사전 정의된 방법이 있습니다. 이러한 메소드는 mt4j.dll을 통해 MT4에 연결됩니다. SampleEA.java에 나만의 메소드를 추가하고 MT4에서 호출하려면 어떻게 해야 합니까? mt4j.dll을 수정하시겠습니까?

cyberflohr :
불행히도 System.out / System.err에 쓰는 것은 MT 터미널에 메시지를 표시하지 않습니다. 메시지를 파일에 작성하거나(java.io 사용) log4j 또는 slf4j와 같은 Java 로깅 프레임워크를 사용해야 합니다.

나는 앞으로 며칠 안에 약간의 거래를 하는 더 복잡한 샘플을 준비할 것입니다.

문안 인사,
사이버플로어
 

자신의 set/get 메소드를 클래스에 추가할 수 있습니다(예: void setBuyPrice(double price), double getPrice()). 그러나 가변 매개변수 목록이 있는 메소드를 추가하는 것은 불가능합니다.

추신: 원하는 경우 noargs 메서드에 대한 지원을 추가할 수 있습니다. 즉, 먼저 setter 메서드를 호출하여 데이터로 인스턴스 개체를 준비한 다음 noargs 메서드를 호출하여 원하는 대로 처리를 시작합니다.

 

noargs 메소드 지원(void someMethod())은 매우 편리합니다. 이렇게 하면 데이터 전송의 분리와 데이터에서 실행할 작업의 제어 가 향상되기 때문입니다.


문안 인사,

 

안녕하세요 사이버플로어입니다.

우수한 도구입니다. 질문이 하나 있습니다:

MT4에서 호출하기 위해 내 공개 Java API를 노출하려는 경우 mt4j.dll을 어떻게 다시 생성할 수 있습니까?

감사해요,

많이!

문안 인사,

타마스

 

안녕하세요 CyberFlohr, 이 MT4 Java Bridge에 감사드립니다. MT4J.dll 구현 내용의 일부 특성에 관심이 있습니다. API 내에서 일부 기술 기능 가용성을 추가하고 싶기 때문에 나만의 DLL을 개발할 수 있는 시작점을 갖고 싶습니다.


감사해요,

예수

 

안녕하세요 사이버플로어입니다.

나는 당신의 지시에 따라 mt4jv0.2를 설치했고 MT4 플랫폼에서 보고된 어떤 오류도 얻지 못했습니다. 그러나 SampleEA.java에서 MT4BasicClient.java의 설명에 따라 EA 초기화가 실행될 때 실행되는 것처럼 보이는 메소드가 있음을 발견했습니다.

SampleEA.java의 코드:

@우세하다

공개 무효 초기화() {

System.out.println("초기화()");

}

MT4BasicClient.java의 설명: Dr. Dre Solo의 Beats

/**

* 초기화 단계에서 MT4 클라이언트에 의해 호출됩니다.

*/

이 코드에서 초기화하는 동안 인쇄할 내용이 있을 것이라고 생각합니다. 그러나 U는 "init()" 메시지가 MT4 플랫폼에서 인쇄되는 것을 보지 못했습니다. 코드를 올바르게 이해하고 있습니까?

게다가 주문하기 위해 다른 데모를 줄 수 있습니까?

정말 감사합니다. 귀하의 코드에 정말 감사드립니다. :디

 

이중 값을 보내는 것에 대해 엄격한 테스트를 수행한 사람이 있습니까?


이중 값을 보낸 다음 동일한 값을 받기 위해 여러 옵션을 시도했지만 성공하지 못했습니다. Java 환경으로의 전송은 성공하지만(Java 측에서 수신된 값을 디버깅했기 때문에) MT 환경으로 동일한 값을 다시 수신하는 데 실패합니다.


수신된 값을 인쇄하면 아래와 같이 출력됩니다.


2012.05.03 22:57:32 ATT - 자바 EURUSD,M5: 이중 기록 : -1.#IND


누구든지 같은 것을 겪었습니까? 실제 전송을 수행하는 dll이 이중 유형의 전송을 올바르게 처리하지 않는 것 같습니다.



미리 감사드립니다.

 
pivotpoint :

이중 값을 보내는 것에 대해 엄격한 테스트를 수행한 사람이 있습니까?


이중 값을 보낸 다음 동일한 값을 받기 위해 여러 옵션을 시도했지만 성공하지 못했습니다. Java 환경으로의 전송은 성공하지만(Java 측에서 수신된 값을 디버깅했기 때문에) MT 환경으로 동일한 값을 다시 수신하는 데 실패합니다.


수신된 값을 인쇄하면 아래와 같이 출력됩니다.


2012.05.03 22:57:32 ATT - 자바 EURUSD,M5: 이중 기록 : -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의 설명에 따라 EA 초기화가 실행될 때 실행되는 것처럼 보이는 메소드가 있음을 발견했습니다.

SampleEA.java의 코드:

@우세하다

공개 무효 초기화() {

System.out.println("초기화()");

}

MT4BasicClient.java의 설명: Dr. Dre Solo의 Beats

/**

* 초기화 단계에서 MT4 클라이언트에 의해 호출됩니다.

*/

이 코드에서 초기화하는 동안 인쇄할 내용이 있을 것이라고 생각합니다. 그러나 U는 "init()" 메시지가 MT4 플랫폼에서 인쇄되는 것을 보지 못했습니다. 코드를 올바르게 이해하고 있습니까?

게다가 주문하기 위해 다른 데모를 줄 수 있습니까?

정말 감사합니다. 귀하의 코드에 정말 감사드립니다. :디

이전 게시물에서 이미 썼듯이 System.out/err에 작성된 메시지를 다시 MT4 플랫폼으로 리디렉션할 수 있는 방법이 없습니다. 메시지를 파일에 기록하려면 로깅 프레임워크(log4j,slfj)를 사용하십시오.
System.out에 작성된 메시지를 파일로 리디렉션하려면 다음 정적 초기화 코드를 MT4BasicClient.java 클래스에 추가하기만 하면 됩니다.

정적 {
노력하다 {
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 클래스에 추가하기만 하면 됩니다.

정적 {
노력하다 {
System.setOut(new PrintStream(new FileOutputStream("c:\\temp\\mt4j.log",true)));
} 잡기(FileNotFoundException e) {
e.printStackTrace();
}
}


아래 리디렉션을 위한 또 다른 샘플:


문자열 out_filename = String.format("%s%s.log","전문가/로그/",this.getClass().getSimpleName());
문자열 err_filename = String.format("%s%s_error.log","experts/logs/",this.getClass().getSimpleName());

System.setOut(새로운 PrintStream(out_filename));
System.setErr(새로운 PrintStream(err_filename));


모든 콘솔 및 오류 로깅을 멋지게 기록합니다.