文章 "MQL5 秘籍之:OCO订单"

 

新文章 MQL5 秘籍之:OCO订单已发布:

任何交易者的交易活动都会包含各种交易机制和内在联系,包括订单之间的关系。本文提出一种处理OCO订单的解决方案。将广泛采用标准类库来实现,同时也会新建一些数据类型。

本文聚焦于处理OCO类型的订单。这个机制在一些MetaTrader 5的竞争对手产品中已有实现。通过这个带有控制面板的处理OCO订单的例子,我想达到两个目的。其一,我想介绍标准类库的特性,另一方面我想扩展交易者的交易工具。


1. OCO订单的本质

OCO订单(一个订单取消另一个订单)代表一对挂单。

他们通过相互撤销的机制协同运作:如果一个订单激活了,那么第二个订单将被删除,反之亦然。

图 1 一对OCO订单

图 1 一对OCO订单

图 1 表示一个简单的订单关联关系。它代表了:两张订单必须同时存在。根据逻辑关系,这对订单中的任何一张单子都无法独自存在。

有些资料上说这对订单必须一单为limit单,另一单为stop单,并且订单必须是同一个方向的(买或者卖)。据我所知这样的限制对于创造富有扩展性的交易策略是不利的。我建议各种OCO订单对类型都应该被分析一下,更为重要的是我们要将其程序化。

作者:Dennis Kirichenko

 

同事们,有没有人见过使用位于 MQL5\Include\Canvas\Charts 中的库的示例,我有一个使用标准库 的想法,但没有示例,学习起来有点困难))。

 
thejobber:

同事们,有没有人见过使用位于 MQL5\Include\Canvas\Charts 中的库的示例,我有一个使用标准库 的想法,但没有示例,学习起来有点困难))。

SectionScripts\Examples\Canvas.
 
tol64:
SectionScripts\Examples\Canvas.
谢谢你,阿纳托利,我还以为只能在指标中使用呢))。
 

感谢您提供这篇有趣的文章。

  • 第 1 点存在翻译问题。

They are connected by mutual cancellation function: if the first one triggers, the second one stays untouched, and vice versa.

如果第一笔订单被触发,第二笔订单就应该被删除,而不是 "未触及"。

  • 使用 OnTrade/OnTradeTransaction 删除第二个订单的方法不够可靠。可能会出现根本没有收到 需求事件,或者收到了却没有处理的情况:

此外,交易可能会在从服务器传送到终端的过程中丢失。

而且

交易队列长度为 1024 个元素。如果 OnTradeTransaction 处理新交易的时间过长,队列中的旧交易可能会被新交易取代。

因此,最好添加一个 保护程序,以避免第二个挂单未被删除时出现意外。

 

angevoyageur 谢谢您的评论!您还是一如既往地在谈生意:-)

关于翻译--是的,有一处错误。

至于在交易事件处理程序的主体中删除未触发的订单--是的,应该利用额外的检查,例如在 NewTick 事件处理程序的主体中


 
遗憾的是,编译过程中存在很多错误,初学者无法使用。
 

我知道这是个老话题,但我真的很想用这个。我下载了 zip 文件,但不知道如何使用。


谢谢

 

多亏了像您这样的人,初学者才能不断进步,说不定哪天就能开始交易了。谢谢

 

我刚刚下载了所有的压缩文件,但我需要帮助,以了解如何使它们工作或安装。

 
vijanda:

我刚刚下载了所有的压缩文件,但我需要帮助,以了解如何使它们工作或安装。

您必须创建一个文件夹,存放所有相关文件。创建后,只需将文件复制到文件夹中即可:


oco_files


编译后,您将在 MT5 导航器中找到专家文件。


oco_files_mt5


自文章发布以来已经过去了很长时间。但代码运行正常。构建 1981。