文章 "自己动手开发多线程异步 MQL5 WebRequest" 新评论 MetaQuotes 2019.01.11 07:52 新文章 自己动手开发多线程异步 MQL5 WebRequest已发布:本文介绍了一个可以在 MQL5 中提高 HTTP 请求操作效率的开发库。它在另外的线程中实现 WebRequest 在非阻塞模式下的执行,并且可以用于辅助图表和EA交易,交换自定义事件以及读取共享资源。也提供了源代码。 交易算法的实现经常需要分析来自各种外部来源、包括互联网的数据,MQL5 提供了 WebRequest 函数来发送 HTTP 请求到 "外部世界", 然而不幸的是,它有一个明显的缺点。这个函数是同步的,也就是说它会在执行请求的整个阶段阻止 EA 的运行。对于每个 EA, MetaTrader 5 都为它们分配了一个单独的线程,在代码中执行已有的 API(应用程序接口) 函数,以及执行到来的事件处理函数 (例如分时,市场深度变化的事件,计时器,交易操作,图表事件等等)。一次只执行一个代码片段,而所有剩余的“任务”都排队等候,直到当前片段把控制权还给内核。 例如,如果一个EA交易要实时处理新的分时,也要间断检查一个或者多个网站上的经济新闻,就不可能实现这两个需求而使它们不互相影响。一旦 WebRequest 在代码中执行,EA 交易就会在函数调用序列中保持“冻结”状态,而新的分时事件就会跳过。就算可以使用 CopyTicks 函数可能可以读取到跳过的分时,而做出交易决策的时机已经错过了。这里是使用UML顺序图表来阐述的这种情况: 图1. 事件处理序列图是在一个线程中的阻塞式代码作者:Stanislav Korotky 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
新文章 自己动手开发多线程异步 MQL5 WebRequest已发布:
本文介绍了一个可以在 MQL5 中提高 HTTP 请求操作效率的开发库。它在另外的线程中实现 WebRequest 在非阻塞模式下的执行,并且可以用于辅助图表和EA交易,交换自定义事件以及读取共享资源。也提供了源代码。
交易算法的实现经常需要分析来自各种外部来源、包括互联网的数据,MQL5 提供了 WebRequest 函数来发送 HTTP 请求到 "外部世界", 然而不幸的是,它有一个明显的缺点。这个函数是同步的,也就是说它会在执行请求的整个阶段阻止 EA 的运行。对于每个 EA, MetaTrader 5 都为它们分配了一个单独的线程,在代码中执行已有的 API(应用程序接口) 函数,以及执行到来的事件处理函数 (例如分时,市场深度变化的事件,计时器,交易操作,图表事件等等)。一次只执行一个代码片段,而所有剩余的“任务”都排队等候,直到当前片段把控制权还给内核。
例如,如果一个EA交易要实时处理新的分时,也要间断检查一个或者多个网站上的经济新闻,就不可能实现这两个需求而使它们不互相影响。一旦 WebRequest 在代码中执行,EA 交易就会在函数调用序列中保持“冻结”状态,而新的分时事件就会跳过。就算可以使用 CopyTicks 函数可能可以读取到跳过的分时,而做出交易决策的时机已经错过了。这里是使用UML顺序图表来阐述的这种情况:
图1. 事件处理序列图是在一个线程中的阻塞式代码
作者:Stanislav Korotky