"MetaTrader 5 ve MATLAB Etkileşimi" makalesi için tartışma

 

Yeni makale MetaTrader 5 ve MATLAB Etkileşimi yayınlandı:

Bu makale MetaTrader 5 ve MatLab matematiksel paketi arasındaki etkileşime ilişkin ayrıntıları içermektedir. Ayrıca MatLab masaüstü ile etkileşimde bulunmak için evrensel bir kitaplık geliştirme süreci olan veri dönüştürme mekanizması gösterilmektedir. Bunun yanı sıra MatLab ortamı tarafından oluşturulan DLL kullanımını da kapsamaktadır. Bu makale, C++ ve MQL5 hakkında bilgi sahibi olan deneyimli okuyuculara yöneliktir.

Bu etkileşim yöntemi mükemmel ve hızlı olarak adlandırılamaz, ancak en güvenilir olanıdır ve tüm MATLAB paketini kapsar. Tabii ki, nihai model geliştirme hızından da söz etmeliyiz. Geliştirmenin özü, MetaTrader 4/5 ve MATLAB Engine etkileşimi için evrensel bir kitaplık sarmalayıcı yazmaktır. Bundan sonra MetaTrader 4/5 script dosyası/göstergesi/expert'i MATLAB sanal masaüstünü yönetebilir. Ve tüm matematiksel algoritma, MQL-programında dizeler olarak saklanabilir; böylece fikri mülkiyetinizi korumak için kullanabilirsiniz (daha fazla ayrıntı için "Geliştiriciler, Kendinizi Koruyun!" makalesine bakınız). Ayrıca, <MetaTrader 5>\MQL5\Libraries klasöründe ayrı m-işlevleri veya P-işlevleri dosyalarında saklanabilir.  

Bu tür etkileşimin olası uygulama alanları şu şekildedir:

  • Karmaşık programlar yazmak zorunda kalmadan "matematiksel modelleri/fikirleri" test etmek veya göstermek (fikri mülkiyetin korunması, MQL-programında olduğu gibi ve MATLAB paketi aracılığıyla P-işlevleri kullanılarak düzenlenebilir).  
  • MATLAB'ın tüm özelliklerini kullanarak karmaşık matematiksel modeller yazmak.
  • Script dosyalarını/göstergelerini/expert'lerini dağıtmayacak herkese.

Devam edelim. Umarım 1.1 MATLAB ve MQL5'teki Veri Türleri, 1.2 MQL5 ve MATLAB Veri Türlerini Karşılaştırma, 2.1 MATLAB Engine API ve MCR İşlevleri ve 2.3 C++ Standart Giriş/Çıkış Kitaplığı bölümlerini okumuşsunuzdur; zira artık onların üzerinde durmayacak ve analiz etmeyeceğiz. Gelecekteki kitaplık algoritmasını gösteren aşağıdaki blok şemasını dikkatli bir şekilde okuyun:  

Şekil 1. Kitaplık Algoritmasının Blok Şeması

Yazar: Andrey Emelyanov

 

Talimatlarınızı dikkatle takip ettim ancak bunu Matlab 2007b ile çalıştırmayı başaramıyorum. Önceden oluşturulmuş örneklerinizi MT5 Terminali ile kullanmaya çalışırken sürekli olarak bu hataları alıyorum.

2010.08.29 10:33:30 TestMLEngine (EURUSD,H1) 'C:\Users\QuantFX\AppData\Roaming\MetaQuotes\Terminal\216E2BD2BB8CE60176A41ADF6AC1C76D\MQL5\Libraries\LibMlEngine.dll' açılamıyor (126)

2010.08.29 10:33:47 TestDllMatlab (EURUSD,H1) 'C:\Users\QuantFX\AppData\Roaming\MetaQuotes\Terminal\216E2BD2BB8CE60176A41ADF6AC1C76D\MQL5\Libraries\nnSMA.dll' açılamıyor (126)

Bu konuda ne düşüneceğimi gerçekten bilmiyorum çünkü"How to Exchange Data" makalesinde bahsedilen projeyi alabiliyorum:10 Dakikada MQL5 için bir DLL " burada bulundu https://www.mql5.com/en/articles/18 herhangi bir sorun olmadan çalışıyor.

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Erişim ihlali 'C:\Users\QuantFX\AppData\Roaming\MetaQuotes\Terminal\216E2BD2BB8CE60176A41ADF6AC1C76D\MQL5\Libraries\MQL5DLLSamples.dll' içinde 0x00000000'a yazma

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Değiştir: Hızlı kahverengi kedi tembel köpeğin üzerinden atlar

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Dizi: 0 1 2 3 4 5 6 7 8 9
2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Zaman 297 msn, int: -752584127 double: 17247836076609

Dolayısıyla, terminalin \Libraries klasörüne erişim ihlalleriyle ilgili herhangi bir sorunu olmadığı açıktır ve Uzman Danışman "Seçeneklerinin" dll içe aktarmalarına ve otomatik ticarete izin verdiğinden eminim ... Herhangi bir yardım çok takdir edilecektir çünkü bu makaleyi ilk okuduğumdan beri bu konuda şaşkına döndüm. Şimdiden teşekkürler

How to Exchange Data: A DLL for MQL5 in 10 Minutes
  • 2010.01.27
  • MetaQuotes Software Corp.
  • www.mql5.com
Now not so many developers remember how to write a simple DLL, and what are special features of different system binding. Using several examples, I will try to show the entire process of the simple DLL's creation in 10 minutes, as well as to discuss some technical details of our binding implementation. I will show the step-by-step process of DLL creation in Visual Studio with examples of exchanging different types of variables (numbers, arrays, strings, etc.). Besides I will explain how to protect your client terminal from crashes in custom DLLs.
 

Sonunda bunu çalıştırdım... Mükemmel bir makale olduğunu söylemeliyim. Visual Studio konusunda çok deneyimli değilim ve metatrader programlama konusunda acemiyim. Bu yüzden, aldığım tüm hatalarla bu biraz zor görünüyordu. Matlab ve visual studio'nun tüm sürümleri için uzun vadede çok kolay olmasına rağmen.Metatrader ve Matlab'ı birbirine bağlamak için ilk denemelerini yapan herkese, matlab motoru veya metatrader harici kütüphaneleri ile hiç çalışmadıysanız, fikir edinmek için aşağıdakileri yapmanızı öneririm. 1. matlabroot\externs\examples\eng_mat\engwindemo'da bulunan matlab ile birlikte gelen projeyi oluşturun.c bu makaleyi takip ederek. http://www.mathworks.com/support/solutions/en/data/1-78077S/index.html?product=ML&solution=1-78077S Derleyin ve eksik dll dosyaları gibi sorunlarınız varsa, burada bulunan bağımlılık yürüteçini kullanın http://www.dependencywalker.com/ kullanarak kullandığınız matlab engine sürümünün çalışması için C:\Windows\System 32 klasörünüze hangi eksik dosyaların yerleştirilmesi gerektiğini belirleyin. Sistem 32 klasörünüze çok sayıda dosya koymak zorunda kalabileceğinizi veya bunları projenizde bağlamak için doğru yerleri bildiğinizi not etmek iyi olabilir. Çoğu dll matlabroot\bin\win (32 veya 64) klasörünüzde bulunmasına rağmen. Gerekli ilk birkaç dll dosyasını yerleştirdikten sonra geri dönün ve projenizi tekrar oluşturmayı deneyin. dependency walker'ın önerdiği her şeyi yapmanıza gerek olmadığını görebilirsiniz. Projenin derlenmesini ve çalışmasını sağlarsanız, işiniz neredeyse bitmiş demektir... 2. How to Exchange Data makalesinde önerilen projeyi oluşturun: 10 Dakikada MQL5 için bir DLL https://www.mql5.com/en/articles/18 . Bu projeyi çalıştırırsanız, yukarıdaki projeyi oluştururken ikisini birleştirdiğinizi unutmayın. İzlediğiniz tüm adımları hatırlayın ve bu projeyi derlemeye hazır olduğunuzda "stdafx.h "nin DLLUnit.cpp dosyasındaki ilk #include başlığı olduğundan ve oluşturmadan hemen önce önceden derlenmiş başlıkları kapattığınızdan emin olun. Yukarıdaki dosyaları olduğu gibi kullanmak, kolayca düzeltilebilecek bazı uyarılar verebilir, ancak proje herhangi bir güçlük çekmeden çalışmalıdır. Burada eklediğim iki sent, bu proje için aptalların kılavuzu gibi gelebilir, ancak bunları yapmak, bu projeyi matlab'ın başka bir sürümüyle oluşturmanız veya visual studio kullanmanız gerekirse boş zamanınızdan birkaç saat tasarruf etmenizi sağlayabilir.

Şerefe

 

Yanılmıyorsam, Tablo 1'deki Matlab matrislerinin türü yanlış. U harfi eksik. Yani, örneğin, 0 ile 65535 aralığından int16 türü değil, uint16 türü sorumludur. Ve böyle devam eder...

Sınıf

Değerler Aralığı

Dönüşüm Fonksiyonu

İşaretli 8 bit tamsayı

-27 ila27-1

int8

İşaretli 16 bit tamsayı

215 -215-1

int16

İşaretli 32 bit tamsayı

-231 ila231-1

int32

İşaretli 64 bit tamsayı

-263 ila263-1

int64

İmzasız 8 bit tamsayı

0 ila28-1

uint8

İmzasız 16 bit tamsayı

0 ila216-1

uint16

İmzasız 32 bit tamsayı

0 ila232-1

uint32

İşaretsiz 64 bit tamsayı

0 ila264-1

uint64

 

İyi günler, harika makale için teşekkürler, çok yardımcı oldu!

Ancak, bir sorun ortaya çıktı. Belki birileri bununla karşılaşmıştır.

Bir Uzman Danışmanı kapatırken, MT5 onu kapattığımda tamamen kilitleniyor. MS Visual Studio2010 + Matlab r2011a kullanıyorum.

Sizce nedeni ne olabilir? Şimdiden teşekkürler!

 

İyi günler. Her şeyi makaledeki gibi yaptım, ancak TestMlEngine komut dosyasını çalıştırırken bir hata ortaya çıktı:

2011.12.17 15:55:23 TestMLEngine(EURUSD,H1) Cannot open 'C:\Users\H_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5\Libraries\LibMlEngine.dll' (126)

ve sonra hemen:

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxGetSizeOfName' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxGetLogical' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputLogical' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxInputChar' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxOpen' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxClose' bulunamıyor

Forumda bir yerde bunun eksik dll'lerden kaynaklandığını buldum, depends.exe yardımıyla neyin eksik olduğunu buldum, aynı klasöre attım, yardımcı oldu, ama tam olarak değil. şimdi gösteriyor:

2011.12.17 15:57:59 TestMLEngine (EURUSD,H1) Cannot open 'C:\Users\H_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5\Libraries\LibMlEngine.dll' (127).

ve liste "Bulunamıyor..." ile devam ediyor. Bana sorunun ne olduğunu söyleyebilir misiniz? Zaten bir haftadır uğraşıyorum...

Evet, Win7 + Matlab R2011a + VS201 var.


.

 
H_F_M:

İyi günler. Her şeyi makaledeki gibi yaptım, ancak TestMlEngine komut dosyasını çalıştırırken bir hata ortaya çıktı:

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot open 'C:\Users\H_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5\Libraries\LibMlEngine.dll' (126)

ve sonra hemen:

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxGetSizeOfName' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxGetLogical' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputLogical' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputInt' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxInputDouble' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxInputChar' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxOpen' bulunamıyor
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 'LibMlEngine.dll' içinde 'mlxClose' bulunamıyor

Forumda bir yerde bunun eksik dll'lerden kaynaklandığını buldum, depends.exe yardımıyla neyin eksik olduğunu buldum, aynı klasöre attım, yardımcı oldu, ama tam olarak değil. şimdi gösteriyor:

2011.12.17 15:57:59 TestMLEngine (EURUSD,H1) Cannot open 'C:\Users\H_F_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5\Libraries\LibMlEngine.dll' (127).

ve liste "Bulunamıyor..." ile devam ediyor. Bana sorunun ne olduğunu söyleyebilir misiniz? Zaten bir haftadır uğraşıyorum...

Evet, Win7 + Matlab R2011a + VS201 var.

Matlab'ı yüklediğimde Sistem yolu sadece "C:\Program Files\MATLAB\R2011b\bin" idi. "C:\Program Files\MATLAB\R2011b\bin\win32" ekledim. Matlab dizinindeki Dll'ler görünür hale geldi ve Matlab Engine başladı. Bundan önce dll'leri göremediğimi yazmıştım.

 

İyi günler) Başka bir sorunum var - Borland C++ Builder 6 yüklü olmasına rağmen, bazı nedenlerden dolayı "Borland" kataloğu <MATLAB>\extern\lib\win32\ klasöründe bulunmuyor. Buna bağlı olarak libeng.lib ve libmx.lib dosyaları da projeye bağlanamıyor. Far, "implib libeng libeng.lib libeng.dll" komutunda aşağıdakileri verir:

)

Ve Borland klasörü orada değildi ve hala da değil... Birisi bana bu sorunla nasıl başa çıkacağımı söyleyebilir mi? Ya da en azından bu iki dosyayı atacak mı?:-)

 

Genel olarak, lütfen yardım edin, çünkü bir şey anlamıyorum....

Deneyin saflığı için 2 sistem kurduğum VMware'i kurdum - XP ve 7.

Sonra Matlab R2011b'yi kurdum, MCR'yi kurdum, MT5'in en son yapısını kurdum. Makaleye ekli arşivden, arşivdeki talimatlarda yazıldığı gibi tüm dosyalar klasörlere dağıtıldı. mq5 dosyalarını ex5 olarak derledim (yani arşivdeki mevcut ex5 dosyalarını sildim ve yerlerine yeni derlenmiş olanları koydum). MT5'i başlatıyorum, Matlab'ı başlatıyorum (başlatmamayı denedim - sonuç aynı), terminalde TestMlEngine'e tıklıyorum ve bana şunu veriyor:

TestMLEngine (EURUSD,H1) 13:44:58 Cannot open 'C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5\Libraries\LibMlEngine.dll' (126)
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxClose' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxOpen' bulunamıyor
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxInputChar' bulunamıyor
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxInputDouble' bulunamıyor.dll'
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxInputInt' bulunamıyor
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxInputLogical' bulunamıyor
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine. içinde 'mlxGetDouble' bulunamıyor.dll'
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxGetInt' bulunamıyor
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 'LibMlEngine.dll' içinde 'mlxGetSizeOfName' bulunamıyor.

Ne yapacağımı bilmiyorum. Yapabileceğim her şeyi denedim. "MQL5 için bir DLL kütüphanesi nasıl yazılır ve 10 dakika içinde veri alışverişi nasıl yapılır?" () makalesindeki DLL 'yi denedim.(https://www.mql5.com/ru/articles/18)- sorunsuz çalışıyor.

Biri bana başka nasıl ulaşabileceğimi söyleyebilir mi? Neyi yanlış yapıyorum?

Şimdiden teşekkürler.

Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
  • 2010.01.27
  • MetaQuotes Software Corp.
  • www.mql5.com
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах продемонстрировать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Покажу пошаговый процесс создания DLL библиотеки в Visual Studio с примерами передачи разных типов переменных (числа, массивы, строки и т.д.) и защиту клиентского терминала от падений в пользовательских DLL.
 
neuro_robot:

Matlab'ı yüklediğimde Sistem yolu sadece "C:C:\Program Files\MATLAB\R2011b\bin" idi. "C:\Program Files\MATLAB\R2011b\bin\win32" ekledim. Matlab dizinindeki Dll'ler görünür hale geldi ve Matlab Engine başladı. Bundan önce dll'leri göremediğimi yazmıştım.

Path ortam değişkenini kastediyorsanız oraya "C:\Program Files\MATLAB\R2011b\bin\win32" ekledim ama durum değişmedi :-(
 
H_F_M:
Path ortam değişkenini kastediyorsanız, ona "C:\Program Files\MATLAB\R2011b\bin\win32" ekledim, ancak durum değişmedi :-(
Bunun yanı sıra bazı dll kütüphaneleri eksikti. Başlatmak için neyin eksik olduğunu "depends.exe" üzerinden kontrol edin.