Обсуждение статьи "Взаимодействие MetaTrader 5 и MATLAB"

 

Опубликована статья Взаимодействие MetaTrader 5 и MATLAB:

Статья раскрывает детали реализации связки MetaTrader 5 и математического пакета MatLab. Детально раскрывается механизм преобразования данных, процесс разработки универсальной библиотеки для взаимодействия с рабочим столом MatLab, также рассматривается вопрос использования DLL библиотек, сгенерированных средой MatLab. Данная статья рассчитана на подготовленных читателей, знающих C++ и MQL5.

Автор: Andrey Emelyanov

 

Если не ошибаюсь, то некорректно указан тип матлабовских матриц в Таблице 1. Пропущена буква u. Т.е., например, тип uint16 отвечает за диапазон от 0 до 65535, а не тип int16. И так далее...

Class

Range of Values

Conversion Function 

Signed 8-bit integer

-27 to 27-1

int8

Signed 16-bit integer

-215 to 215-1

int16

Signed 32-bit integer

-231 to 231-1

int32

Signed 64-bit integer

-263 to 263-1

int64

Unsigned 8-bit integer

0 to 28-1

uint8

Unsigned 16-bit integer

0 to 216-1

uint16

Unsigned 32-bit integer

0 to 232-1

uint32

Unsigned 64-bit integer

0 to 264-1

uint64

 

Добрый день, спасибо за отличную статью, очень помогла!

Однако возникла проблема. Может, кто-нибудь сталкивался.

У меня при закрытии советника наглухо виснет MT5. Использую MS Visual Studio2010 + Matlab r2011a.

Как думаете, в чем может быть причина? Заранее спасибо!

 

Добрый день.Сделал вроде все как в статье, однако при запуске скрипта TestMlEngine выскакивала ошибка:

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)

и потом сразу:

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetSizeOfName' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetLogical' in 'LibMlEngine.dll'
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) Cannot find 'mlxInputChar' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxOpen' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxClose' in 'LibMlEngine.dll'

Где-то на форуме нашел, что это из-за недостачи dll-ок, с помощью depends.exe нашел что ему не доставало, закинул в ту же папку, помогло, но не совсем.Теперь выдает:

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)

и дальше посписку все "Cannot find...". Подскажите, в чем проблема? Уже неделю бьюсь...

Да, у меня Win7 + Matlab R2011a + VS201.


 

 
H_F_M:

Добрый день.Сделал вроде все как в статье, однако при запуске скрипта TestMlEngine выскакивала ошибка:

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)

и потом сразу:

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetSizeOfName' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxGetLogical' in 'LibMlEngine.dll'
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) Cannot find 'mlxInputChar' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxOpen' in 'LibMlEngine.dll'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot find 'mlxClose' in 'LibMlEngine.dll'

Где-то на форуме нашел, что это из-за недостачи dll-ок, с помощью depends.exe нашел что ему не доставало, закинул в ту же папку, помогло, но не совсем.Теперь выдает:

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)

и дальше посписку все "Cannot find...". Подскажите, в чем проблема? Уже неделю бьюсь...

Да, у меня Win7 + Matlab R2011a + VS201.

У меня при установке Матлаба в System path прописалось только: "C:\Program Files\MATLAB\R2011b\bin". Я добавил "C:\Program Files\MATLAB\R2011b\bin\win32". Dll из матлабовской директории стали видны и Matlab Engine запустился. До этого писал, что не видит dll.

 

Доброго дня) У меня возникла еще проблема - в папке<MATLAB>\extern\lib\win32\ почему-то не обнаруживается каталога "Borland", хотя стоит Borland C++ Builder 6. Соответственно файлы libeng.lib и libmx.lib покдлючить к проекту тоже не получается. На команду "implib libeng.lib libeng.dll" Far выдает следующее:

 )

 А папки Borland как не было, так и нет... Может кто подскжет, как с это бедой бороться? Или хотя бы эти два файлика скинет?:-) 

 

Вобщем прошу помощи, ибо вобще не понимаю чего-то...

Для чистоты эксперимента поставил VMware, куда установил 2 системы - ХР и 7ку.

Далее ставил Matlab R2011b, устанавливал MCR, ставил последний билд МТ5. Из архива, приложенного к статье, все файлы раскидал по папкам, как написано в инструкции, расположенной в архиве. Файлы mq5 компилировал в ex5 (т.е. имеющиеся в архиве ex5 удалял, а на их место ставил вновь скомпилированные). Запускаю MT5, запускаю Matlab (пробовал и не запускать его - результат тот же), в терминале тыкаю на TestMlEngine, и он мне выдает:

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 Cannot find 'mlxOpen' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputChar' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputDouble' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputInt' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxInputLogical' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetDouble' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetInt' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetLogical' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxGetSizeOfName' in 'LibMlEngine.dll'

Что делатьуже не знаю. Перепробовал все что можно было. Пробовал Dllку из статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" (https://www.mql5.com/ru/articles/18) - работает без проблем.

Может кто подскажет как еще к ней подобраться? Что я не так делаю?

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

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

У меня при установке Матлаба в System path прописалось только: "C:\Program Files\MATLAB\R2011b\bin". Я добавил "C:\Program Files\MATLAB\R2011b\bin\win32". Dll из матлабовской директории стали видны и Matlab Engine запустился. До этого писал, что не видит dll.

Если имеется в виду переменная среды Path, то я добавил туда "C:\Program Files\MATLAB\R2011b\bin\win32", однако ситуация не изменилась :-(
 
H_F_M:
Если имеется в виду переменная среды Path, то я добавил туда "C:\Program Files\MATLAB\R2011b\bin\win32", однако ситуация не изменилась :-(
Кроме этого не хватало некоторых dll-библиотек. Проверьте через "depends.exe" чего не хватает для запуска.
 
neuro_robot:
Кроме этого не хватало некоторых dll-библиотек. Проверьте через "depends.exe" чего не хватает для запуска.

Да, уже писал что пробовал, после этого он мне 127ю ошибку выдавал, вместо 126й, но все-равно спасибо)

Сейчас каким-то чудесным образом все заработало. Буду выяснять в чем дело было. А потом уже наконец и нейросетями займусь) 

 
Всем привет.Собрал проект на vs 2010 для matlab 2011A под win7 x32. Проверил библиотеку depends ом. ошибок нет, имена функций нормальные. Вообщем ничего не предвещало проблем, однако при запуске мт выдается ошибка что не может запуститься matlab engine.Куда копать?
Причина обращения: