단순 MT4 - 자바 브리지

 
안녕 모두,

저는 JAVA 프로그래머이고 1년 전부터 MT4를 사용하고 있습니다. MQL은 매우 간단하고 배우기 쉽지만 이 언어로 코드를 작성하는 것은 정말 어려운 일입니다. 몇 주 전에 Java로 작성된 논리 코드에서 내 메타 트레이더 EA로의 간단한 통합에 대해 생각했습니다. 나는 인터넷과 이 포럼에서 해결책을 검색했고 흥미로운 도구(MT4-Java API https://forum.mql4.com/27050, Java Class to DLL converter, ... )를 찾았지만 모두 장단점이 있습니다. 그래서 나만의 MT4-Java 통합을 작성하기로 결정했습니다.

내 솔루션에 대해 다음 네 가지 필수 요구 사항이 있었습니다.

1. 간단한 설치
2. JAVA 코드의 디버깅 기능
3. 속도

4. MT-Terminal과 다른 프로세스 간의 네트워크 통신 없음


나에게 중요하지 않은 한 가지는 내 Java 코드 내에서 MT4 기능(지표, 거래 기능)을 호출해야 한다는 것이었습니다. 기술 분석을 위해 www.ta-lib.org의 오픈 소스 라이브러리를 사용하고 주문 처리는 여전히 MQL 코드에서 수행됩니다. Javacode는 단순히 BUY 또는 SELL 시간을 MQL 코드에 알립니다.

필요한 모든 것은 설치된 JVM(1.6) 및 MQL 코드와 JVM 컨테이너용 DLL을 포함하는 첨부된 ZIP 파일인 MetaTrader입니다.

ZIP에서 MT 설치 디렉토리로 파일을 복사하고(디렉토리 구조 유지) mt4j.properties 파일을 편집하고 jvm.dll 파일의 경로를 조정하십시오. 이것은 mt4Sample EA를 실행하기 위한 모든 것입니다.

샘플 구현은 아무 것도 하지 않습니다. 무엇이 가능한지 보여주기 위한 스켈레톤일 뿐입니다. MT4BasicClient.java 및 SampleEA.java 파일 내의 주석을 읽으십시오. mt4jSample.jar에서 찾을 수 있는 JAVA 소스입니다. 자신의 클래스는 MT4BasicClient 인터페이스를 구현하거나 AbstractBasicClient 클래스를 확장 해야 합니다. 자신의 클래스가 있는 디렉토리 또는 JAR 파일을 클래스 경로에 추가하는 것을 잊지 마십시오(mt4j.properties 참조).

Java 클래스는 터미널 프로세스 내에서 실행되는 JVM에 의해 로드 및 실행됩니다. 이것은 당신에게 최적의 성능을 줄 것입니다. 몇 가지 성능 테스트를 수행하고 MT 백테스트 중에 processTick()이 실행된 빈도를 계산했습니다. 초당 평균 호출은 400,000 호출/초로 내 요구에 충분히 빠릅니다.

JVM은 8001에서 디버그 포트를 생성하도록 구성되어 있으므로 선호하는 IDE를 사용하고 구성 요소를 디버그할 수 있습니다.

내 작은 MT4-Java 브리지를 시험해 볼 수 있는 모든 리소스가 이 게시물에 첨부되어 있습니다.

즐겁게 보내세요 :-)
사이버플로어
파일:
mt4j_v0.1.zip  17 kb
 

멋진. 감사해요. 그러나 https://forum.mql4.com/270509를 찾을 수 없습니다. 오류가 표시됩니다. 또한 코드를 게시할 수 있습니다. Java와 mt4는 사용하고 싶지만 코드를 봐야 하는 것입니다.

 

링크를 수정했습니다: https://www.mql5.com/en/forum/121466

ZIP 파일에서 MQL 및 Java 코드를 찾을 수 있습니다.

 

이것은 훌륭한 도구입니다

어떻게 든 나는 그것을 작동시킬 수 없습니다. 도와주세요.

EA를 실행하면 mt4가 충돌합니다.

Windows 7 64비트, Java 7.0.1, MT4 ver4.00 빌드 409 2011년 10월 25일을 사용하고 있습니다.

Java는 C:\jre\bin\client\jvm.dll에 설치됩니다.

mt4는 C:\MT4\에 설치됩니다.

창에서 다음과 같은 오류 메시지가 나타납니다.

문제 서명:

문제 이벤트 이름: 벡스

애플리케이션 이름: 터미널.exe

애플리케이션 버전: 4.0.0.409

애플리케이션 타임스탬프: 0028f000

오류 모듈 이름: MSVCR100.dll

오류 모듈 버전: 10.0.30319.1

오류 모듈 타임스탬프: 4ba1dbbe

예외 상쇄: 0008ae6e

예외 코드: c0000417

예외 데이터: 00000000

OS 버전: 6.1.7601.2.1.0.256.1

로케일 ID: 2057

추가 정보 1: a0db

추가 정보 2: a0db43c64a51ee21486e76f538ab825d

추가 정보 3: 5a50

추가 정보 4: 5a50e927a493324cabb3491f7239cdd1


온라인 개인 정보 보호 정책을 읽으십시오.

http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409


온라인 개인 정보 보호 정책을 사용할 수 없는 경우 오프라인에서 개인 정보 보호 정책을 읽으십시오.

C:\Windows\system32\en-US\erofflps.txt

 
답변이 늦어서 죄송합니다. 하지만 어떻게든 이 스레드의 새 게시물에 대한 알림을 받지 않을 것입니다.


MT4 터미널이 충돌하는 두 가지 이유가 있습니다.

1. 64비트 JVM을 사용합니다.

MT4는 32비트 응용 프로그램이기 때문에 작동하지 않습니다. MT4와 함께 사용할 수 있는 Win7-64비트에 32비트 JVM을 설치해야 합니다.

JVM 버전 확인 에 "64비트"가 표시되지 않아야 합니다.

C:\jre\bin\java -버전

Java(TM) SE 런타임 환경(빌드 1.6.0_30-b12)
Java HotSpot(TM) 64비트 서버 VM(빌드 20.5-b03, 혼합 모드)

2. 자바 7

지금까지는 Java6으로만 내 프로그램을 테스트했습니다. 충돌을 유발하는 Java7에 몇 가지 변경 사항이 있을 수 있습니다.

 

위의 터미널 충돌을 해결할 새 버전 0.2를 사용할 수 있습니다.

파일:
mt4j_v0.2.zip  17 kb
 

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

저는 MT의 초보자이지만 Java에 대한 약간의 경험이 있으므로 Bridge는 저에게 매우 흥미로운 도구입니다. 언급한 모든 설치 단계를 수행했지만 예제를 시작할 수 없었습니다. 전문가 로그에서 다음을 얻었습니다.

20:53:13 mt4jSample EURUSD,H4: 성공적으로 로드됨

20:53:13 mt4jSample EURUSD,H4 입력: IntProperty=99; BoolProperty=참; DoubleProperty=1.23; StringProperty="안녕하세요";

20:53:17 mt4jSample EURUSD,H4: 'mt4j.dll' 라이브러리를 로드할 수 없습니다( 오류 126 ).

20:53:17 mt4jSample EURUSD,H4: 전문가 중지됨

20:53:17 mt4j샘플 EURUSD,H4: 초기화됨

20:54:27 mt4jSample EURUSD,H4: 성공적으로 로드됨

20:54:27 mt4jSample EURUSD,H4: 'mt4j.dll' 라이브러리를 로드할 수 없습니다(오류 126).

20:54:27 mt4jSample EURUSD,H4: 전문가 중지됨

20:54:27 mt4jSample EURUSD,H4: 초기화 해제

20:54:27 mt4j샘플 EURUSD,H4: 단위 이유 1

20:54:27 mt4j샘플 EURUSD,H4: 제거됨

문제의 원인은 무엇입니까?

 
white123right :

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


20:53:17 mt4jSample EURUSD,H4: 'mt4j.dll' 라이브러리를 로드할 수 없습니다(오류 126).


문제의 원인은 무엇입니까?

안녕

내 이해에 오류 126 은 MT4가 dll 파일을 찾을 수 없다는 것을 의미합니다. 올바른 이름으로 호출한다고 가정하면 기본적으로 /experts/libraries/ 폴더에 있어야 합니다. 다른 곳으로 갈 수 있지만 이것이 최고의 위치입니다.

도움이 되었기를 바랍니다.

건배

브루키

 

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

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

SampleEA.java의 코드:

@우세하다

공개 무효 초기화() {

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

}

MT4BasicClient.java의 설명:

/**

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

*/

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

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

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

 
brooky29 :

안녕

내 이해에 오류 126은 MT4가 dll 파일을 찾을 수 없다는 것을 의미합니다. 올바른 이름으로 호출한다고 가정하면 기본적으로 /experts/libraries/ 폴더에 있어야 합니다. 다른 곳으로 갈 수도 있지만 이것이 가장 좋은 위치입니다.

도움이 되었기를 바랍니다.

건배

브루키

정확함 - mt4j.dll이 라이브러리 폴더에 없습니다.

예: 메타트레이더 설치 폴더가 c:\program files\metatrader이면 mt4j 브리지용 파일은 다음 위치에 있어야 합니다.

c:\program files\metatrader\experts\mt4jSample.ex4
c:\program files\metatrader\experts\mt4jSample.mq4
c:\program files\metatrader\experts\libraries\mt4j.dll
c:\program files\metatrader\experts\libraries\mt4j. 속성
c:\program files\metatrader\experts\libraries\mt4jSample.jar

추신: 오류에 대한 추가 정보는 브리지 로그 파일을 확인하십시오.

c:\program files\metatrader\experts\files\mt4j.log


 
limk0032 :

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

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

SampleEA.java의 코드:

@우세하다

공개 무효 초기화() {

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

}

MT4BasicClient.java의 설명:

/**

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

*/

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

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

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

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

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

문안 인사,
사이버플로어