文章 "用于在以仓位为中心的 MetaTrader 5 环境中跟踪订单的虚拟订单管理程序" - 页 2

 
phampton:

这是正确的,wackena。 您所做的是直接向服务器发送传统订单,因此没有打开虚拟订单。 您需要使用 VirtualOrderManagerTester 来手动发出虚拟订单。

我应该在文章中明确指出,如果在某一特定符号上引入 VOM EA,那么交易该符号的所有其他 EA 也必须启用 VOM。 这是因为 VOM 中有灾难保护 SL 代码。

保罗

谢谢,保罗。

VirtualOrderManager.mqh 能否在 MT-5Strategy Tester 中使用?如果可以,应如何用 VOM 设置 EA?

 
wackena:

谢谢你,保罗。

VirtualOrderManager.mqh 能否在 MT-5Strategy Tester 中使用?如果可以,应该如何用 VOM 设置 EA?

可以,我在策略测试器中进行的非常有限的测试表明,它可以在不做任何改动的情况下运行,尽管速度很慢,因为必须处理每个刻度。
 

我一直在使用 VOM 开发马丁格尔类型的 EA。在打开多笔卖出交易(相同类型和货币对) 的情况下,CloseAllOrders 功能似乎只关闭最后一笔交易,而之前的交易仍未关闭。

VOM.CloseAllOrders(_Symbol,VIRTUAL_ORDER_TYPE_SELL);

在有多个相同类型和货币对的虚拟订单(vo)未平仓的情况下,该函数代码应启动关闭一个vo订单还是关闭所有未平仓的vo订单。

VOM.OrdersTotal() 可以很好地跟踪未结虚拟订单的数量。

 
wackena:

我一直在使用 VOM 开发马丁格尔类型的 EA。在打开多个相同类型和货币对的 卖出交易时,CloseAllOrders 功能似乎只关闭了最后一笔交易,而之前的交易仍未关闭。

在有多个相同类型和货币对的虚拟订单(vo)未平仓的情况下,该功能代码应启动关闭一个vo订单,还是应关闭所有未平仓的vo订单。

VOM.OrdersTotal() 可以很好地跟踪未结虚拟订单的数量。

你好,wackena、

我刚刚在 VirtualOrderManagerTester 中添加了一个关闭所有订单的按钮,见附件。 虽然我承认这种关闭所有虚拟订单的方法很笨拙,但效果还可以,更好的方法是将它们汇总起来,然后发出一个服务器订单,我会在下一个版本中考虑这样做。

请随时给我发一份 LOG_VERBOSE EA 日志副本,以便我更好地了解发生了什么。

保罗

附加的文件:
 
phampton:

你好,瓦基纳、

我刚刚在 VirtualOrderManagerTester 中添加了一个关闭所有订单的按钮,请参阅附件。 虽然我承认关闭所有虚拟订单的方法很笨拙,但效果还不错,更好的方法是将所有虚拟订单汇总,然后发布一个单一的服务器订单,我会在下一个版本中考虑这样做。

请随时给我发一份 LOG_VERBOSE EA 日志副本,以便我更好地了解发生了什么。

保罗

附上日志文件。
附加的文件:
 
wackena:
附上日志文件。

谢谢 - 从日志中可以看出,只有在虚拟止盈被触发时,才会调用 OrderClose,即无论您使用什么代码来明确关闭订单(如 CloseAllOrders),都不会被触发或在没有订单可关闭时被触发。

 

更新文章附录:

虚拟订单管理器 库的文档、用户指南和源代码注释现在有俄语版本。

 

该库存在一个重大问题。用 VOM 打开并手动关闭的交易会被 VOM 看到。

不仅如此,当我在 VOM 中试图关闭这些交易时,VOM 会以相反的方向打开交易。

例如

- 我用 VirtualOrderManagerTester 打开 5 个买入订单,一切正常。

- 我手动关闭所有 5 个订单:在 MT5 中我没有看到订单,而在图表(VOM)上有 5 个未结订单。

- 我关闭 VirtualOrderManagerTester 中的 5 个订单:我在 MT5 中看到 5 个卖出订单,而在 VOM(VirtualOrderManagerTester)中没有。

在我看来,这是一个大问题,因为如果我的 EA 订单被经纪人或其他 EA 关闭,当我的 EA 尝试使用 VOM 关闭它时,将打开相反方向的订单。

有什么办法可以解决这个问题吗?

附加的文件:
vom_test.jpg  188 kb
 
mbt22:

该库存在一个重大问题。用 VOM 打开并手动关闭的交易会被 VOM 看到。

不仅如此,当我在 VOM 中试图关闭这些交易时,VOM 会以相反的方向打开交易。

例如

- 我用 VirtualOrderManagerTester 开立了 5 个买入订单,一切正常。

- 我手动关闭所有 5 个订单:在 MT5 中我没有看到订单,而在图表(VOM)上有 5 个未结订单。

- 我关闭 VirtualOrderManagerTester 中的 5 个订单:我在 MT5 中看到 5 个卖出订单,而在 VOM(VirtualOrderManagerTester)中没有。

在我看来,这是一个大问题,因为如果我的 EA 订单被经纪人或其他 EA 关闭,当我的 EA 尝试使用 VOM 关闭它时,将打开相反方向的订单。

有什么办法可以解决这个问题吗?

你好,mbt22、

您强调的问题肯定是这个库的限制--账户上运行的所有 EA 都必须使用 VOM,包括手动交易。

然而,请记住,VOM EA 的这种社交性限制可能会在许多 MQL5 EA 中出现。 换句话说,如果在同一符号上进行手动交易或其他任何类型的 EA,这些 EA 也可能会失败。

下面是一个非 VOM EA 交际失败的示例:假设该 EA 外部的交易(手动和/或 EA 生成的)总计为 1.0 手空单,EA 发出 0.1 手的买单,止损 50 点。我记不清 EA 中的OrderSend 功能 是如何工作的(是完成还是返回止损错误),但可以肯定的是,止损不能应用于低于 0.9 手空头 仓位的 50 点。

测试 EA 能够使用 VOM 管理手动交易,但如果情况发展到经纪商平仓指令,那么 VOM 就失去了控制,需要对账户进行仔细评估。

VOM 不善于与非 VOM 活动打交道的主要原因之一是它对灾难保护止损的管理,这是任何基于客户的交易平仓过程中必不可少的绝对风险管理。

保罗

 
phampton:

嗨,MBT22、

您所强调的肯定是这个库的限制--账户上运行的所有 EA 都必须使用 VOM,包括手动交易。

但是,请记住,VOM EA 的这种交际性限制可能会在许多 MQL5 EA 中出现。 换句话说,如果在同一符号上进行手动交易或其他任何类型的 EA,这些 EA 也可能会失败。

下面是一个非 VOM EA 交际失败的示例:假设该 EA 外部的交易(手动和/或 EA 生成的)总计为 1.0 手空单,EA 发出 0.1 手的买单,止损 50 点。我不太记得 EA 中的OrderSend 功能 是如何工作的(是完成还是返回止损错误),但可以肯定的是,止损不能应用于低于 0.9 手空头 仓位的 50 点。

测试 EA 能够使用 VOM 管理手动交易,但如果情况发展到经纪人关闭订单,那么 VOM 就失去了控制,需要对账户进行仔细评估。

VOM 不善于与非 VOM 活动打交道的主要原因之一是其对灾难保护止损的管理,这是任何基于客户的交易平仓过程中必不可少的绝对风险管理。

保罗


好的。

感谢您的快速回复。