文章 "MetaTrader 5 中的 WebSockets" - 页 4 12345 新评论 Racheal Samson 2023.03.11 19:07 #31 Denis Kirichenko # :所以,说好的 3 年时间还在等待......所剩无几--还得等一年 ))) 也许吧:))) Agustinus Biotamalo Lumbantoruan 2024.07.15 11:42 #32 MetaQuotes:新文章Websockets for MetaTrader 5 已发布:作者: Francis Dube弗朗西斯-杜贝 太好了!那么,如何解析继续帧?到目前为止,它只能解析第一个响应中的帧。我使用的是 nodejs websocket。 Hafiz Tamur Ahmed 2024.08.04 16:39 #33 你好,@Francis Dube 做得很好、 我在 nodejs/nestjs 中实现了你的库,以便与我的网络套接字服务器一起工作。我面临的问题是,当我在本地服务器上使用套接字时,一切正常。mql5 套接字发送握手时,我得到了正确的响应,即 "101 切换协议"。 但当我把我的nestjs应用程序部署到digitalocean 应用程序平台后,情况就发生了变化,起初我无法将mql5套接字连接到服务器,但后来我可以连接到它,但我没有得到正确的握手响应,这是因为"CWebsocketClient " 的connect方法返回false,因为升级方法没有解析任何响应,我从部署的应用程序中只得到了 "H "的响应。 由于套接字状态始终设置为 "CONNECTING",我不确定是否还能实现其他功能,因此在连接成功后,我无法执行任何操作。不过,在调用 connect 方法后,如果使用"sendString " 方法向服务器发送数据,数据就会送达。 这也是我困惑的地方,我不知道如何在我的应用程序中实现这些功能,因为我无法用其他方法来测试握手过程,我已经尝试过扩展来检查我的 web socket 是否在我的应用程序中工作,结果发现它工作得很好,但一涉及到 mql5,事情就变得一团糟,而且没有足够的详细说明来找出这种行为的原因。 如果有任何关于这个问题的线索或指导,我将不胜感激。 附注:我现在没有在 mql5 EA 中做任何花哨的事情,我只是按照文章中的连接指南与服务器连接。其他什么都没做!:( Shane Leigh Kingston 2024.12.30 07:42 #34 请注意,WebsocketClient.fillRxBuffer 中存在一个错误,即在 while 循环中多次调用 m_socket.Read(..)。 m_socket.Read(..) 并未将数据追加到数组的末尾,而是写入了数组的起点。 在我连接到本地 Web 套接字进行测试的情况下,我发现对m_socket.Read(..) 的 第一次调用只获取了一个字节,然后对 m_socket.Read(..) 的第二次循环又获取了其余 字节。因此,缓冲区缺少了第一个字节,导致解析 帧时出错。 在填充缓冲区之前,还需要确保 m_rxbuf 为空,否则缓冲区可能会认为已获取的数据多于实际数据。在解析帧后,缓冲区会被清空,但为了确保万无一失,我决定在调用 fillRxBuffer 时清空缓冲区。 我还让m_socket.Read(..) 在没有数据可读取时停止循环,这样它就不会一直等待超时时间。理想情况下,我认为它应该一直读取数据,直到有足够的数据来解析一帧为止,但这需要对代码进行一些调整。 不过还是要感谢这篇文章。到目前为止,这是我找到的最接近我所需的解决方案。最终,我可能会创建自己的网络套接字库。 Soewono Effendi 2024.12.30 07:56 #35 https://www.mql5.com/en/book您可以在书中找到工作的本地 websocket欣赏 Shane Leigh Kingston 2024.12.30 11:49 #36 Soewono Effendi #: https:// www.mql5.com/en/book 你可以在书中找到工作的本地 websocket 欣赏 我想你可能把网络套接字与普通网络套接字或普通 HTTPWebRequests 混淆了。网络套接字需要在普通 HTTP 请求的基础上进行自定义编码。我在这篇文章的基础上进行了一些项目特定的修改,成功地找到了一个解决方案。 Soewono Effendi 2024.12.30 12:49 #37 Shane Leigh Kingston #:我想你可能把 webockets 与普通网络套接字或普通 HTTPWebRequests 弄混了。网络套接字需要在普通 HTTP 请求的基础上进行自定义编码。我在这篇文章的基础上进行了一些项目特定的修改,成功地找到了一个解决方案。 给你个提示,,如果你不想看书,那是你的损失,不是我的损失;) pauldic 2025.03.09 19:43 #38 Shane Leigh Kingston 解析 帧时出错。 在填充缓冲区之前,还需要确保 m_rxbuf 为空,否则缓冲区可能会认为已获取的数据多于实际数据。在解析帧后,缓冲区会被清空,但为了确保万无一失,我决定在调用 fillRxBuffer 时清空缓冲区。我还让m_socket.Read(..) 在没有数据可读取时停止循环,这样它就不会一直等待超时时间。理想情况下,我认为它应该一直读取数据,直到有足够的数据来解析一帧为止,但这需要对代码进行一些调整。不过还是要感谢这篇文章。到目前为止,这是我找到的最接近我所需的解决方案。最终,我可能会创建自己的网络套接字库。 请 @Shane Leigh Kingston,我知道这是篇旧文章,但我需要一种用 mql5 实现 webocket 的方法,而这个库似乎是唯一比较接近的方法。但我又遇到了你刚才描述的问题,但我不是这方面的专家。请您指导我如何解决这个问题。如果您能提供帮助,我将不胜感激。 先此致谢。 Stanislav Korotky 2025.03.10 13:25 #39 pauldic #: 请 @Shane Leigh Kingston,我知道这是个旧帖,但我需要一种用 mql5 实现 websocket 的方法,而这个库似乎是唯一比较接近的。但我又遇到了你刚才描述的问题,但我不是这方面的专家。请您指导我如何解决这个问题。如果您能提供帮助,我将不胜感激。 。 在algotrading 一书 中有另一种 websockets 实现。 您可以在论坛讨论中找到实际版本的源代码: 关于交易、自动交易系统和交易策略测试的论坛专家:交易者的 MQL5 编程 - 书中的源代码。第七部分Stanislav Korotky, 2025.03.10 13:32 我附上了一些websockets 类的错误修正和改进。 MQL5 Book: Advanced language tools / Projects / WebSocket protocol in MQL5 www.mql5.com We have previously looked at Theoretical foundations of the WebSockets protocol . The complete specification is quite extensive, and a detailed... pauldic 2025.03.11 19:48 #40 Stanislav Korotky #:算法》一书 中还有另一种 websockets 的实现方法。您可以在论坛讨论中找到实际版本的源代码: 是的,@Stanislav 我昨天找到了它,到目前为止它一直很有用,谢谢你 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
所以,说好的 3 年时间还在等待......所剩无几--还得等一年 )))
也许吧:)))
新文章Websockets for MetaTrader 5 已发布:
作者: Francis Dube弗朗西斯-杜贝
你好,@Francis Dube 做得很好、
我在 nodejs/nestjs 中实现了你的库,以便与我的网络套接字服务器一起工作。我面临的问题是,当我在本地服务器上使用套接字时,一切正常。mql5 套接字发送握手时,我得到了正确的响应,即 "101 切换协议"。
但当我把我的nestjs应用程序部署到digitalocean 应用程序平台后,情况就发生了变化,起初我无法将mql5套接字连接到服务器,但后来我可以连接到它,但我没有得到正确的握手响应,这是因为"CWebsocketClient " 的connect方法返回false,因为升级方法没有解析任何响应,我从部署的应用程序中只得到了 "H "的响应。
由于套接字状态始终设置为 "CONNECTING",我不确定是否还能实现其他功能,因此在连接成功后,我无法执行任何操作。不过,在调用 connect 方法后,如果使用"sendString " 方法向服务器发送数据,数据就会送达。
这也是我困惑的地方,我不知道如何在我的应用程序中实现这些功能,因为我无法用其他方法来测试握手过程,我已经尝试过扩展来检查我的 web socket 是否在我的应用程序中工作,结果发现它工作得很好,但一涉及到 mql5,事情就变得一团糟,而且没有足够的详细说明来找出这种行为的原因。
如果有任何关于这个问题的线索或指导,我将不胜感激。
附注:我现在没有在 mql5 EA 中做任何花哨的事情,我只是按照文章中的连接指南与服务器连接。其他什么都没做!:(
请注意,WebsocketClient.fillRxBuffer 中存在一个错误,即在 while 循环中多次调用 m_socket.Read(..)。
m_socket.Read(..) 并未将数据追加到数组的末尾,而是写入了数组的起点。
在我连接到本地 Web 套接字进行测试的情况下,我发现对m_socket.Read(..) 的 第一次调用只获取了一个字节,然后对 m_socket.Read(..) 的第二次循环又获取了其余 字节。因此,缓冲区缺少了第一个字节,导致解析 帧时出错。
在填充缓冲区之前,还需要确保 m_rxbuf 为空,否则缓冲区可能会认为已获取的数据多于实际数据。在解析帧后,缓冲区会被清空,但为了确保万无一失,我决定在调用 fillRxBuffer 时清空缓冲区。
我还让m_socket.Read(..) 在没有数据可读取时停止循环,这样它就不会一直等待超时时间。理想情况下,我认为它应该一直读取数据,直到有足够的数据来解析一帧为止,但这需要对代码进行一些调整。
不过还是要感谢这篇文章。到目前为止,这是我找到的最接近我所需的解决方案。最终,我可能会创建自己的网络套接字库。
https:// www.mql5.com/en/book
我想你可能把网络套接字与普通网络套接字或普通 HTTPWebRequests 混淆了。网络套接字需要在普通 HTTP 请求的基础上进行自定义编码。我在这篇文章的基础上进行了一些项目特定的修改,成功地找到了一个解决方案。
我想你可能把 webockets 与普通网络套接字或普通 HTTPWebRequests 弄混了。网络套接字需要在普通 HTTP 请求的基础上进行自定义编码。我在这篇文章的基础上进行了一些项目特定的修改,成功地找到了一个解决方案。
给你个提示,
,如果你不想看书,那是你的损失,不是我的损失;)
在填充缓冲区之前,还需要确保 m_rxbuf 为空,否则缓冲区可能会认为已获取的数据多于实际数据。在解析帧后,缓冲区会被清空,但为了确保万无一失,我决定在调用 fillRxBuffer 时清空缓冲区。
我还让m_socket.Read(..) 在没有数据可读取时停止循环,这样它就不会一直等待超时时间。理想情况下,我认为它应该一直读取数据,直到有足够的数据来解析一帧为止,但这需要对代码进行一些调整。
不过还是要感谢这篇文章。到目前为止,这是我找到的最接近我所需的解决方案。最终,我可能会创建自己的网络套接字库。
先此致谢。
请 @Shane Leigh Kingston,我知道这是个旧帖,但我需要一种用 mql5 实现 websocket 的方法,而这个库似乎是唯一比较接近的。但我又遇到了你刚才描述的问题,但我不是这方面的专家。请您指导我如何解决这个问题。如果您能提供帮助,我将不胜感激。 。
在algotrading 一书 中有另一种 websockets 实现。
您可以在论坛讨论中找到实际版本的源代码:
关于交易、自动交易系统和交易策略测试的论坛
专家:交易者的 MQL5 编程 - 书中的源代码。第七部分
Stanislav Korotky, 2025.03.10 13:32
我附上了一些websockets 类的错误修正和改进。算法》一书 中还有另一种 websockets 的实现方法。
您可以在论坛讨论中找到实际版本的源代码: