Анализировал с владельцем MT5-сервера тормоза торговых приказов. Запускался OrderSend-Test2.mq5 в том же месте, где MT5-сервер стоит. Т.е. нулевой пинг. Демо, все внутри. Изучались логи MT5-сервера (2170) и MT5-клиента (2280). Логи сервера не буду приводить, просто словами опишу. Думаю, результаты буду интерсны всем, т.к. это поможет раскрыть...
在证券交易所的真实账户和真实交易中,经纪人 Otkrytie 即使等待 10 秒钟也无济于事,仍然会弹出历史记录不同步的提示。而且弹出的频率很高。这在我看来是很奇怪的,在其他特殊的滞后中是看不到的,ping 4 毫秒,订单执行 通常小于 15 毫秒。我甚至开始怀疑这里的一切是否正确,也许这与网络有关?虽然我不使用 INOUT,但所有 IN 和 OUT 都是分开的。是否有计划绕过这种情况?例如,自己背票。解决这个问题的优先级有多高?
请公布这两份日志。
你好 fxsaber、
祝您 2020 年好运!
在MT4OrderClose 功能的交易请求中不包含魔数是一种设计选择吗?
目前,MT4OrderClose 的DEAL_ENTRY_OUT 将有 magic ==0。
这并没有太大区别,因为通过仓位 ID,您可以跟踪 DEAL_ENTRY_IN 中的魔数,但出于历史分析目的,DEAL_ENTRY_IN / DEAL_ENTRY_OUT 的匹配可能会提供更大的灵活性。
Hi fxsaber,
祝 2020 年一切顺利!
在MT4OrderClose 功能的交易请求中不包含神奇数字是一种设计选择吗?
目前,MT4OrderClose 的 DEAL_ENTRY_OUT 将有 magic ==0。
这并不是什么大问题,因为使用头寸 ID 可以从 DEAL_ENTRY_IN 反向追踪魔数,但是对于历史分析而言,匹配 DEAL_ENTRY_IN/DEAL_ENTRY_OUT 可能会提供更大的灵活性。
在MT4OrderClose 功能的交易请求中不包含神奇数字是一种设计选择吗?
目前,MT4OrderClose 的DEAL_ENTRY_OUT 将包含 magic ==0。
这并无太大区别,因为通过仓位 ID,您可以跟踪 DEAL_ENTRY_IN 中的魔数,但出于历史分析目的,DEAL_ENTRY_IN / DEAL_ENTRY_OUT 的匹配可能会提供更大的灵活性。
如果愿意,您可以在 OrderClose 中设置 MagicNumber。
在 MT5 中,当部分平仓时,您可以更改未结头寸的 MagicNumber,这样您就有了选择。
例如,如果您有一个 MagicNumber = 5 的未结头寸,并且手动平仓,那么 DEAL_ENTRY_OUT_MAGIC = 0。程序库仍会返回 OrderMagicNumber() = 5。
我不知道这是一个错误还是一个功能,但对于期货来说,利润和开仓价的计算并不完全符合预期。假设在 12.00开仓,在 18.40 清仓并自动重新开仓,然后在 20.00 平仓。第 4 笔交易(平仓)的 GetHistoryPositionData 票据选择的利润为 MT4ORDERS::Order.Profit = ::HistoryDealGetDouble(Ticket, DEAL_PROFIT);这将返回第 3-4 笔交易(清仓和平仓)之间的差额。但它会返回开盘价,即 MT4ORDERS::Order.OpenPrice = ::HistoryDealGetDouble(OpenTicket, DEAL_PRICE);。也就是说,它将返回第一笔交易的开盘价。在我看来,让它统一是有意义的,要么从第一笔交易中获取所有信息(包括开仓价和利润),要么从最后一笔开仓交易中获取所有信息(从第三笔交易到清算)。还是说这是一种功能,应该是这样的,而我遗漏了什么?
所以,您是在通过库分析净额结算的历史记录。这正是最初提出的情况,而库尚未完成。能否完成是个大问题。因为要做很多手脚,而在实践中却没有这种需要。
我在 Netting 上仍然使用同一个库,但我绕过了历史工作。
https://www.mql5.com/ru/blogs/post/733393
从博文中测量情况的速度。
结果。
您可以清楚地看到 HistorySelect 函数花费了多少时间。
OrdersHistoryTotal 对热点的影响虽然较小,但仍很明显,因此建议在每个 On-event 事件中尽量不要调用超过一次。
按历史记录选择订单原来是免费的。
您可以收集市场订单(包括 TP/SL)执行时间的统计数据。
结果。
一个运行账户的执行时间最长可达两分钟。在此分享您的统计数据。该脚本不使用任何库,适用于 Netting/Hedge。
在 MT4/5 中,使用交易历史记录进行调试非常不方便。您必须使用各种拐杖解决方案。
在 MT5 中,您可以立即查看通过 MT4Orders 选择的订单的所有字段。为此,您需要将MT4ORDERS::Order 添加到MT4ORDERS::Order 观察中。
这样,您就可以看到所选订单的所有属性。
在此分享您的统计数据。该脚本不使用任何库,适用于 Netting/Hedge。
真实情况就是这样: