文章 "MetaTrader 5 和 MATLAB 交互"

 

新文章 MetaTrader 5 和 MATLAB 交互已发布:

本文将详细介绍 MetaTrader 5 和 MatLab 数学包之间的交互。文中说明了数据转换机制,以及开发通用库以与 MatLab 交互的过程。文章还介绍了对 MatLab 环境生成的 DLL 的使用。本文面向掌握了 C++ 和 MQL5 的经验丰富的读者。

图 5. DLL 适配器功能块示意图

作者:Andrey Emelyanov

 

我仔细地按照您的指导进行了操作,但无法在 Matlab 2007b 中运行。当我尝试在 MT5 终端上使用您预置的示例时,不断出现这些错误。

2010.08.29 10:33:30 TestMLEngine (EURUSD,H1) Cannot open 'C:\Users\QuantFX\AppData\Roaming\MetaQuotes\Terminal\216E2BD2BB8CE60176A41ADF6AC1C76D\MQL5Libraries\LibMlEngine.dll' (126)

2010.08.29 10:33:47 TestDllMatlab (EURUSD,H1) Cannot open 'C:\Users\QuantFXAppData\Roaming\MetaQuotes\Terminal\216E2BD2BB8CE60176A41ADF6AC1C76D\MQL5\Libraries\nnSMA.dll' (126)

我真的不知道该怎么想,因为我可以得到"如何交换数据 " 一文中提到的项目https://www.mql5.com/en/articles/18 上找到的 "如何在 10 分钟内交换数据:用于 MQL5 的 DLL "一文中 提到的项目。

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Access violation write to 0x00000000 in 'C:\Users\QuantFX\AppData\Roaming\MetaQuotes\Terminal\216E2BD2BB8CE60176A41ADF6AC1C76D\MQL5\Libraries\MQL5DLLSamples.dll'.

2010.08.29 10:44:16 MQL5DLL_Test (EURUSD,H1) Replace:快棕猫跳过懒惰的狗

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

因此,终端显然不存在违规访问 \Libraries 文件夹的问题,而且我确定智能交易系统的 "选项 "允许 dll 导入和自动交易......如果能提供任何帮助,我将不胜感激,因为自从第一次阅读这篇文章以来,我一直对此感到困惑。不胜感激

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.
 

终于成功了......不得不说,这篇文章写得很好。 我对 Visual Studio 的使用经验并不丰富,而且是 metatrader 编程方面的新手。 因此,这似乎是一个挑战,因为我收到了很多错误。 不过,从长远来看,这对所有版本的 matlab 和 visual studio 都非常简单。如果您从未使用过 matlab 引擎或 metatrader 外部库,我建议任何初次尝试将 Metatrader 和 Matlab 连接在一起的人执行以下操作,以获得深入了解。 1.创建 matlab 自带的项目,该项目位于 matlabroot\externs\examples\eng_mat\engwindemo.http://www.mathworks.com/support/solutions/en/data/1-78077S/index.html?product=ML&solution=1-78077S 编译该项目,如果遇到问题(如缺少 dll 文件),请使用依赖性跟踪器(dependency walker),可在此处找到http://www.dependencywalker. 请注意,您可能最终不得不在系统 32文件夹 中放置大量文件,或者不知道在项目中链接这些文件的正确位置。虽然大多数 dll 文件都可以在 matlabroot\bin\win(32 或 64) 文件夹中找到,但在您放入所需的前几个 dll 文件后,请返回并再次尝试构建您的项目。你可能会发现,你并不需要做依赖性漫步者建议的所有事情。如果你能编译并运行项目,那么你就差不多完成了...... 2. 构建文章《如何交换数据》中建议的项目:如果你能运行该项目,那么请记住,在创建上述项目,你要将两者结合起来 记住你所遵循的所有步骤,当你准备编译该项目时,请确保 "stdafx.在编译前,确保 "stdafx.我在这里补充的两分钱可能听起来像这个项目的傻瓜指南,但如果你需要用另一个版本的 matlab 或使用 visual studio 来构建这个项目,做这些事情可能会节省你几个小时的业余时间。

干杯

 

如果我没记错的话,表 1 中 Matlab 矩阵的类型是不正确的。缺少了字母u。例如,uint16 类型负责 0 到 65535 的范围,而不是int16 类型。等等...

类别

数值范围

转换功能

有符号 8 位整数

-2727-1

int8

有符号 16 位整数

-215215-1

int16

有符号 32 位整数

-231231-1

int32

有符号 64 位整数

-263263-1

int64

无符号 8 位整数

0 至28-1

uint8

无符号 16 位整数

0 至216-1

uint16

无符号 32 位整数

0 至232-1

uint32

无符号 64 位整数

0 至264-1

uint64

 

下午好,感谢您的精彩文章,非常有帮助!

不过,现在出现了一个问题。也许有人遇到过。

关闭智能交易系统时,MT5 会完全挂起。我使用的是 MSVisual Studio 2010+ Matlab r2011a。

您认为原因何在?在此先表示感谢!

 

下午好,我按照文章中的方法做了所有事情,但是在运行 TestMlEngine 脚本时,弹出了一个错误:

2011.12.17 15:55:23 TestMLEngine(EURUSD,H1) Cannot open 'C:\Users\_HF_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5Libraries\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.2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 无法在'LibMlEngine.dll'中找到'mlxInputChar'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 无法在'LibMlEngine.dll'中找到'mlxOpen'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 无法在'LibMlEngine.dll'中找到'mlxClose'。

在论坛的某个地方,我发现这是由于丢失了 dlls,在 depends.exe 的帮助下,我找到了丢失的 dlls,并将其放入相同的文件夹中,这有所帮助,但还不够:

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

而 "找不到...... "的提示音还在继续。你能告诉我问题出在哪里吗?我已经纠结了一个星期了...

是的,我的系统是 Win7 + Matlab R2011a + VS201。


 
H_F_M:

下午好,我按照文章中的方法做了所有事情,但是在运行 TestMlEngine 脚本时,弹出了一个错误:

2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) Cannot open 'C:\Users\_HF_M\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5Libraries\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.2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 无法在'LibMlEngine.dll'中找到'mlxInputChar'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 无法在'LibMlEngine.dll'中找到'mlxOpen'
2011.12.17 15:55:23 TestMLEngine (EURUSD,H1) 无法在'LibMlEngine.dll'中找到'mlxClose'。

我在论坛上的某个地方发现,这是由于丢失了 dlls,在 depends.exe 的帮助下,我找到了丢失的 dlls,我把它放到了同一个文件夹中,它起了作用,但还不够。 现在它显示出来了:

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

而 "找不到...... "的提示音还在继续。你能告诉我问题出在哪里吗?我已经纠结了一个星期了...

是的,我的系统是 Win7 + Matlab R2011a + VS201。

安装 Matlab 时,系统路径只有 "C:\Program Files\MATLAB\R2011b\bin" 。我添加了 "C:\Program Files\MATLAB\R2011b\bin\win32".Matlab 目录中的 Dlls 变得可见了,Matlab 引擎也启动了。在此之前,我写道我看不到 dlls。

 

Good day)我又遇到了一个问题--由于某些原因,在 <MATLAB>\extern\lib\win32\older 文件夹中找不到 "Borland "目录,尽管 Borland C++ Builder 6 已经安装。因此,libeng.lib 和 libmx.lib 文件也无法连接到项目 中。在执行 "implib libeng libeng.lib libeng.dll" 命令时,结果如下:

)

Borland 文件夹不在,现在也不在......谁能告诉我如何解决这个问题?或者至少能扔掉这两个文件?)

 

总之,请提供帮助,因为我不懂一些东西....。

为了实验的纯粹性,我安装了 VMware,在其中安装了两个系统--XP 和 7。

然后安装了 Matlab R2011b,安装了 MCR,安装了 MT5 的最新版本。从文章所附的存档中,我按照存档中的说明将所有文件分散到各个文件夹中。我将 mq5 文件编译成了 ex5 文件(即删除压缩包中现有的 ex5 文件,将新编译的文件放在原处)。我启动 MT5,然后启动 Matlab(我试过不启动 Matlab,结果还是一样),在终端点击 TestMlEngine,结果显示

TestMLEngine (EURUSD,H1) 13:44:58 Cannot open 'C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\DEA4AAFB99C996D79821EC8BDBADDC3C\MQL5Libraries\LibMlEngine.dll' (126)
TestMLEngine (EURUSD,H1) 13:44:58 Cannot find 'mlxClose' in 'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'中找到'mlxOpen'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'中找到'mlxInputChar'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'中找到'mlxInputInt'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'中找到'mlxInputLogical'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'中找到'mlxGetDouble'。dll'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'中找到'mlxGetInt'
TestMLEngine (EURUSD,H1) 13:44:58 无法在'LibMlEngine.dll'
TestMLEngine (EURUSD,H1) 13:44:58 无法在 'LibMlEngine.dll' 中找到 'mlxGetSizeOfName'。

我不知道该怎么办。我试了所有能试的方法。我尝试了文章 "如何在 10 分钟内为 MQL5编写 DLL 库 并交换数据?(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:

当我安装 Matlab 时,系统路径只有 "C:C:\Program Files\MATLAB\R2011b\bin" 。我添加了 "C:\Program Files\MATLAB\R2011b\bin\win32" 。Matlab 目录中的 Dlls 变得可见了,Matlab 引擎也启动了。在此之前,我写的是我看不到 dlls。

如果你指的是 "路径 "环境变量,我在那里添加了 "C:\Program Files\MATLAB\R2011b\bin\win32" ,但情况并没有改变 :-(
 
H_F_M:
如果你指的是路径环境变量,我在其中添加了 "C:\Program Files\MATLAB\R2011b\bin\win32" ,但情况并没有改变 :-(
除此之外,还有一些 dll 库丢失了。请通过 "depend.exe "检查启动时缺少了什么。