Basit MT4 - Java köprüsü

 
Herkese selam,

Ben bir JAVA programcısıyım ve bir yıldan beri MT4 kullanıyorum. MQL çok basit ve öğrenmesi kolay olsa da, bazı şeyleri bu dilde kodlamak gerçekten acı verici. Birkaç hafta önce Java ile yazılmış mantık kodundan metatrader EA'ma basit bir entegrasyon hakkında bir düşünce. Bir çözüm için internette ve bu forumda arama yaptım ve bazı ilginç Araçlar buldum (MT4-Java API https://forum.mql4.com/27050, Java Class to DLL dönüştürücü, ...) AMA hepsinin artıları ve eksileri var ve böylece kendi MT4-Java entegrasyonumu yazmaya karar verdim.

Çözümüm için aşağıdaki dört ZORUNLU gereksinim vardı:

1. Basit Kurulum
2. JAVA kodu için hata ayıklama yetenekleri
3. Hız

4. MT-Terminal ile başka bir süreç arasında ağ iletişimi yok


Benim için önemli olmayan bir şey, Java kodumdan MT4 işlevlerini (gösterge, ticaret işlevleri) çağırma ihtiyacıydı. Teknik analiz için www.ta-lib.org adresindeki açık kaynak kitaplığı kullanıyorum ve sipariş işleme hala MQL kodunda yapılıyor. Javacode, SATIN ALMA veya SATMA zamanı geldiğinde MQL kodunu bilgilendirir.

Tek ihtiyacınız olan MetaTrader, kurulu bir JVM (1.6) ve MQL kodunu ve JVM kapsayıcı için DLL dosyasını içeren ekteki ZIP dosyasıdır.

Dosyaları ZIP'den MT kurulum dizininize kopyalayın (dizin yapısını koruyun) ve mt4j.properties dosyasını düzenleyin ve jvm.dll dosyanızın yolunu ayarlayın. Bunların hepsi mt4Sample EA'yı çalıştırmak içindir.

Örnek uygulama hiçbir şey yapmaz. Size neyin mümkün olduğunu göstermek için sadece bir iskelet. MT4BasicClient.java ve SampleEA.java dosyalarının içindeki yorumları okuyun. mt4jSample.jar içinde bulabileceğiniz JAVA kaynakları. Kendi sınıfınız MT4BasicClient arabirimini uygulamalı veya AbstractBasicClient sınıfını genişletmelidir . Kendi sınıflarınızla birlikte dizini veya JAR dosyasını sınıf yoluna eklemeyi unutmayın (bkz. mt4j.properties).

Java Sınıflarınız, Terminal Süreci içinde çalışan bir JVM tarafından yüklenir ve yürütülür. Bu size en uygun performansı verecektir. Bazı performans testleri yaptım ve bir MT arka testi sırasında processTick()'in ne sıklıkta yürütüldüğünü saydım. Saniyedeki ortalama arama sayısı 400.000 arama/saniye idi, bu da ihtiyaçlarım için yeterince hızlı olduğunu düşünüyorum.

JVM, favori IDE'nizi kullanabilmeniz ve bileşenlerinizde hata ayıklayabilmeniz için 8001'de bir hata ayıklama bağlantı noktası oluşturacak şekilde yapılandırıldı.

Küçük MT4-Java köprümü denemek için tüm kaynaklar bu gönderiye eklenmiştir.

İyi eğlenceler :-)
Siberflohr
Dosyalar:
mt4j_v0.1.zip  17 kb
 

Güzel. Teşekkürler. Ancak https://forum.mql4.com/270509 bulamıyorum - bir hata gösteriyor. Ayrıca, lütfen kodunuzu gönderir misiniz? Java ve mt4, kullanmak istediğim ancak kodu görmem gereken bir şey.

 

Bağlantıyı düzelttim: https://www.mql5.com/en/forum/121466

MQL ve Java kodunu ZIP dosyasında bulabilirsiniz.

 

bu mükemmel bir araçtır

nedense çalıştıramıyorum. Bana yardımcı olabilir misiniz.

EA'yı çalıştırdığımda mt4 çöküyor

Windows 7 64bit, Java 7.0.1, MT4 ver4.00 build 409 25 ekim 2011 kullanıyorum

Java buraya yüklenir C:\jre\bin\client\jvm.dll

mt4 buraya kurulur C:\MT4\

windows aşağıdaki hata mesajını veriyor

Sorun imzası:

Sorun Olay Adı: BEX

Uygulama Adı: terminal.exe

Uygulama sürümü: 4.0.0.409

Uygulama Zaman Damgası: 0028f000

Arıza Modülü Adı: MSVCR100.dll

Arıza Modülü Sürümü: 10.0.30319.1

Arıza Modülü Zaman Damgası: 4ba1dbbe

İstisna Ofseti: 0008ae6e

İstisna Kodu: c0000417

İstisna Verileri: 00000000

OS sürümü: 6.1.7601.2.1.0.256.1

Yerel Kimlik: 2057

Ek Bilgi 1: a0db

Ek Bilgi 2: a0db43c64a51ee21486e76f538ab825d

Ek Bilgi 3: 5a50

Ek Bilgi 4: 5a50e927a493324cabb3491f7239cdd1


Gizlilik bildirimimizi çevrimiçi olarak okuyun:

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


Çevrimiçi gizlilik bildirimi mevcut değilse, lütfen çevrimdışı olarak gizlilik bildirimimizi okuyun:

C:\Windows\system32\tr-TR\erofflps.txt

 
Geciken yanıt için özür dilerim - ancak bir şekilde bu konudaki yeni gönderilerden haberdar olmayacağım.


MT4 terminalinizin çökmesinin iki olası nedeni vardır.

1. 64 bit JVM kullanıyorsunuz

MT4 32 bitlik bir uygulama olduğu için bu çalışmayacaktır. Win7-64bit'inize MT4 ile birlikte kullanılabilen bir 32bit JVM kurmalısınız.

JVM Sürüm kontrolü "64 Bit" göstermemelidir

C:\jre\bin\java -sürüm

Java(TM) SE Çalışma Zamanı Ortamı (1.6.0_30-b12 derlemesi)
Java HotSpot(TM) 64-Bit Sunucu VM (derleme 20.5-b03, karma mod)

2. Java 7

Şimdiye kadar programımı sadece Java6 ile test ettim. Belki Java7'de çökmeyi tetikleyen bazı değişiklikler vardır.

 

Yukarıdaki terminal çökmesini düzeltecek Yeni Sürüm 0.2 mevcuttur.

Dosyalar:
mt4j_v0.2.zip  17 kb
 

Merhaba cyberflohr,

MT'de acemiyim ama Java ile biraz deneyimim var, bu yüzden köprü benim için çok ilginç bir araç. Bahsettiğiniz tüm kurulum adımlarını gerçekleştirdim ancak örneği başlatamadım. Uzmanlar günlüğünde takip ettim:

20:53:13 mt4jÖrnek EURUSD,H4: başarıyla yüklendi

20:53:13 mt4jÖrnek EURUSD,H4 girişleri: IntProperty=99; BoolProperty=true; DoubleProperty=1.23; StringProperty="merhabaDünya";

20:53:17 mt4jSample EURUSD,H4: 'mt4j.dll' kitaplığı yüklenemiyor ( hata 126 )

20:53:17 mt4jÖrnek EURUSD,H4: uzman durduruldu

20:53:17 mt4jÖrnek EURUSD,H4: başlatıldı

20:54:27 mt4jSample EURUSD,H4: başarıyla yüklendi

20:54:27 mt4jSample EURUSD,H4: 'mt4j.dll' kitaplığı yüklenemiyor (hata 126)

20:54:27 mt4jÖrnek EURUSD,H4: uzman durduruldu

20:54:27 mt4jÖrnek EURUSD,H4: başlatılmamış

20:54:27 mt4jÖrnek EURUSD,H4: uninit neden 1

20:54:27 mt4jÖrnek EURUSD,H4: kaldırıldı

Sorunun nedeni ne olabilir?

 
white123right :

Merhaba cyberflohr,


20:53:17 mt4jSample EURUSD,H4: 'mt4j.dll' kitaplığı yüklenemiyor (hata 126)


Sorunun nedeni ne olabilir?

Merhaba

Anladığım kadarıyla 126 hatası , MT4'ün dll dosyasını bulamadığı anlamına geliyor. Onu doğru adıyla çağırdığınızı varsayarsak, öncelikle /experts/libraries/ klasöründe olması gerekir. Başka bir yere gidebilir ama bu senin en iyi yerin.

Bu yardımcı olur umarım.

Şerefe

Brooky

 

Merhaba Cyberflohr,

mt4jv0.2'yi yükleme talimatınızı takip ettim ve MT4 platformunda herhangi bir hata bildirilmedi. Ancak SampleEA.java'dan, MT4BasicClient.java'daki açıklamaya göre EA başlatıldığında çalıştırılıyor gibi görünen bir yöntem olduğunu buldum.

SampleEA.java'daki kod:

@Geçersiz kıl

public void init() {

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

}

MT4BasicClient.java'daki açıklama:

/**

* Başlatma aşamasında MT4 istemcisi tarafından çağrılır.

*/

Bu kodlardan, başlatma sırasında yazdırılacak bir şey olacağını düşünüyorum. ancak U, "init()" mesajının MT4 platformunda yazdırıldığını görmedi. Kodu doğru anlamış mıyım?

Ayrıca, sipariş vermek için başka bir demo verebilir misiniz?

çok teşekkür ederim, kodunuzu gerçekten takdir ediyorum. :D

 
brooky29 :

Merhaba

Anladığım kadarıyla 126 hatası, MT4'ün dll dosyasını bulamadığı anlamına geliyor. Onu doğru adıyla çağırdığınızı varsayarsak, öncelikle /experts/libraries/ klasöründe olması gerekir. Başka bir yere gidebilir ama bu senin en iyi yerin.

Bu yardımcı olur umarım.

Şerefe

Brooky

doğru - mt4j.dll kütüphaneler klasöründe değil.

yani: metatrader kurulum klasörünüz c:\program files\metatrader ise, mt4j köprüsü için dosyalar aşağıdaki konumlarda olmalıdır.

c:\program dosyaları\metatrader\experts\mt4jSample.ex4
c:\program dosyaları\metatrader\experts\mt4jSample.mq4
c:\program files\metatrader\experts\libraries\mt4j.dll
c:\program files\metatrader\experts\libraries\mt4j. özellikleri
c:\program files\metatrader\experts\libraries\mt4jSample.jar

Not: hata hakkında daha fazla bilgi için köprü günlük dosyasını kontrol edin

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


 
limk0032 :

Merhaba Cyberflohr,

mt4jv0.2'yi yükleme talimatınızı takip ettim ve MT4 platformunda herhangi bir hata bildirilmedi. Ancak SampleEA.java'dan, MT4BasicClient.java'daki açıklamaya göre EA başlatıldığında çalıştırılıyor gibi görünen bir yöntem olduğunu buldum.

SampleEA.java'daki kod:

@Geçersiz kıl

public void init() {

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

}

MT4BasicClient.java'daki açıklama:

/**

* Başlatma aşamasında MT4 istemcisi tarafından çağrılır.

*/

Bu kodlardan, başlatma sırasında yazdırılacak bir şey olacağını düşünüyorum. ancak U, "init()" mesajının MT4 platformunda yazdırıldığını görmedi. Kodu doğru anlamış mıyım?

Ayrıca, sipariş vermek için başka bir demo verebilir misiniz?

çok teşekkür ederim, kodunuzu gerçekten takdir ediyorum. :D

ne yazık ki System.out / System.err'e yazmak, MT terminalinizde mesajları göstermeyecektir. mesajlarınızı bir dosyaya yazmalısınız (java.io kullanarak) veya log4j veya slf4j gibi bir Java kayıt çerçevesi kullanmalısınız.

Önümüzdeki birkaç gün içinde bazı işlemler yapan daha karmaşık bir örnek hazırlayacağım.

Saygılarımızla,
Siberflohr
Neden: