文章 "MetaTrader 5 与 Python 的集成:接收和发送数据" - 页 11

 
谢谢你,兄弟。这篇文章太棒了。你帮了我大忙。
 



只是想知道为什么我们需要在 OnTick() 中不断调用 socket=SocketCreate() 和 SocketClose()?


它不能保持套接字打开/激活吗?或者说,是否有可能保持套接字打开/激活?

 
Ernesto Che 发送数据 请求,以绘制 纤维和通道。在您的示例中,Python 返回两个值,但我必须返回多达 12 个不同结构的数据,每个结构有三个坐标点。
一开始,我被 mt5 不能一次性返回描述所有结构的长字符串这一事实所困扰。我通过几次较短的查询进行了交换。一切似乎都能正常工作,但时不时会出现问题。
直觉告诉我这与超时设置有关。能否请您提供一个解决方案?
非常感谢

你好!我也在安装一个插座。我有一个问题--我用 python 编写了一个指标。它可以从 mt5 获取大量数据,而且要多少有多少,但要将数据返回给 mt5 就不那么容易了。在套接字上可以只传输一个字符串,最多可以传输 100 个小字符串,但我需要更多。除了套接字,还有什么其他解决方案? 除了在 Python->MT5 之间进行数据交换的网络/互联网请求,还有什么其他解决方案? 我不想为此使用 MySQL 数据库。我们讨论的是将大约 40 种货币对从 Python 传输到 MT5,其中包含 1000 个重新计算的历史读数,并在 MT5 中进一步构建指标线......我想摆脱 MT5 中的计算,因为 Python 的计算速度更快。因此,我希望看到指标的所有行,而不仅仅是每秒一次通过字符串传输的最后一个条形图。
有人能给我一些有用的建议吗?

TCP/IP Socket - MT5 将接收一个字符串,但无论如何都无法容纳 30 000 个数据....。即使是 jason 格式,一个字符串变量也最多只能容纳 100 个字符串。这样一个 Socket 有什么用呢?
原来,对于大数据来说,Python-->MySQL-->MT5 是一条出路

我也想到了这个主意:

使用 Python 中的 multiprocessing.shared_memory 和 MQL5 中的 WinAPI 可以直接从内存中读取数据。
 
Alex Renko #:
除了在 Python->MT5 之间进行数据交换的网络/互联网请求者之外?我不想调用 MySQL DB。

"调用 SQLite"--MT5 已内置SQLite,Python 显然也有SQLite....。

您可以使用套接字及时报告所需的信息(信号、警报等),并将大数据存入 SQLite。也就是说,在 python 中,您可以将所需的一切输入数据库,然后在 "数据更新 "套接字上吹哨。而在 MQL 中,您可以根据哨声重新读取数据库。

数据库本身可以存储在框架光盘上

 
Maxim Kuznetsov #:

"调用 SQLite"--MT5 已内置SQLite,Python 显然也有。

您可以使用套接字及时报告所需的信息(信号、警报等),并将大数据存入 SQLite。也就是说,在 python 中,您可以将所需的一切输入数据库,然后在 "数据更新 "套接字上吹哨。而在 MQL 中,您可以通过哨声重读数据库

数据库本身可以存储在框架光盘上

我明白您的意思了,谢谢您的回答...我想也是
MetaTrader 5 使用自己的编程语言MQL5,它在一个独立进程中运行。这就不允许与操作系统的共享内存直接交互,而其他使用低级 API 的应用程序则可以做到这一点。

壳中壳....20 年来,他们一直无法为 Mac 制作原生版本......

 
Alex Renko #:

我明白您的意思,谢谢您的回复....我也这么认为
MetaTrader 5 使用自己的编程语言MQL5,它在一个独立进程中运行。这就不允许与操作系统的共享内存直接交互,而其他使用底层 API 的应用程序则可以做到这一点。

壳中壳....20 年来,他们一直无法为 Mac 制作原生版本......

没有人禁止使用 DLL,在那里你可以随心所欲。

你可以直接搜索内存(可能不会更快 :-) )。

或者高效的中间解决方案,比如内存键值数据库。

只是在大多数情况下,刹车和瓶颈都在 Python 一方

 
我设置了 127.0.0.1:9090 选项,运行python socketserver.py,运行 EA socketclientEA.ex5(将 char 改为 uchar 后),但重新运行时出现了错误。
2025.10.09 10:41:44.665 socketclientEA (#GDAXIm,H1) 连接 localhost:9090 错误 4014