在调查TP订单执行时,我注意到一些TP订单的创建与接受它们的点位有很大的滞后。
汇报显示,这种情况不仅在不同的经纪商上重复出现,而且在与交易服务器在同一台机器上的终端上进行交易时也是如此。也就是说,有一个非常低的ping,并且是交易服务器的唯一交易账户。
编写GetAcceptedTick 函数使我们能够彻底调查这个问题并建设性地展示这个问题。
脚本。
因此,下面的脚本位于预告片中。
// Скрипт выводит самое длительное или конкретное акцептирование SL/TP-ордера. #property script_show_inputs input datetime inFrom = D'2020.01.01'; // С какого времени проверять ордера input ulong inTicket = 0; // Отдельно проверяемый тикет // Возвращает самый медленный TP/SL-ордер с определенной даты. ulong GetSlowestOrder( const datetime From ); // Распечатывает подробности акцепта SL/TP-ордера. void PrintOrder( const ulong MaxTicket ); void OnStart() { Print("\n\nStart " + MQLInfoString(MQL_PROGRAM_NAME) + TOSTRING(inFrom) + TOSTRING(inTicket) + "\n"); PrintOrder(inTicket ? inTicket : GetSlowestOrder(inFrom)); }
在MQ-Demo上运行的结果。
Total Orders (from 2020.09.01 00:00:00) = 58493, calculated = 439 Calculation time = 00:00:11.328, Performance = 38.0 orders/sec. ServerName: MetaQuotes-Demo Last Tick 2020.09.30 19:07:32.917 1.80181 1.80205 Accepted Tick 2020.09.30 19:07:32.716 1.80178 1.80202 Accepted Length = 357 ms. Order 726444166 ORDER_TYPE_BUY GBPAUD 2020.09.30 19:07:33.073 1.80206 ORDER_REASON_TP ORDER_STATE_FILLED 2020.09.30 19:07:33.082, Position created 2020.09.30 17:21:17.933, StopLevel = 0 Orders (2) before 726444166 with PositionID = 725926764: ------------------------ Checked Orders = 0 ------------------------
该脚本声称找到了一个TP订单和一个触发其产生的tick(文本中用颜色突出显示)。看起来,如果价格已经达到交易服务器上未平仓头寸的TP水平(特别是在模拟交易中),相应的TP订单应该立即创建(不一定执行)。然而,在这种情况下,它不是立即发生的,而是在357毫秒后发生的。
让我先说一下,即使是一毫秒的延迟也不算太少。在时间上是一个有意义的动词,在algotrading。
验证。
我们不要盲目地相信脚本,要手动检查这种情况。因此,这里是我们的订单。
脚本所发现的相应的接受勾可以在这里看到。
箭头显示的是TP订单诞生的点位之间。截图清楚地表明,脚本是正确的,TP订单的创建在交易服务器方面发生了巨大的滞后。
底线。
现在有一个工具,在通过TP/SL水平交易时,显示贸易服务器方面的滞后值。目前,它们是巨大的。而这无疑是该平台的一个严重缺点,需要加以纠正。
不幸的是,不可能登记接受待定订单,因为终端方面没有这一信息。但几乎无一例外的是,在执行订单时,TP/SL订单方存在明显的滞后,不能不影响滞后。因为原因似乎是同一性质的。
总而言之,MT5平台目前在这些情况下具体落后于100%。并要求进行修复,直到出现零滞后。
我鼓励你们分享你们账户的结果。为改善MT5作出贡献!
鼓励你分享你的账户的结果。帮助改进MT5!
Total Orders (from 2020.11.01 00:00:00) = 21725, calculated = 10465 Calculation time = 00:04:33.609, Performance = 38.0 orders/sec. ServerName: RannForex-Server Last Tick 2020.11.16 00:34:35.201 104.630 104.640 Accepted Tick 2020.11.16 00:34:06.309 104.627 104.639 Accepted Length = 28894 ms. Order 1715452 ORDER_TYPE_SELL USDJPY 2020.11.16 00:34:35.203 104.627 ORDER_REASON_TP ORDER_STATE_REJECTED 2020.11.16 00:34:35.217, Position created 2020.11.16 00:33:51.196, StopLevel = 0 Orders (4) before 1715452 with PositionID = 1715287: ----------------------- Last Tick 2020.11.16 00:34:06.309 104.627 104.639 Accepted Tick 2020.11.16 00:34:06.309 104.627 104.639 Accepted Length = 3 ms. Order 1715425 ORDER_TYPE_SELL USDJPY 2020.11.16 00:34:06.312 104.625 ORDER_REASON_TP ORDER_STATE_REJECTED 2020.11.16 00:34:06.327, Position created 2020.11.16 00:33:51.196, StopLevel = 0 Checked Orders = 1 ------------------------
28秒的滞后!在这些情况下,可能最好已经联系了经纪人。
2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) ServerName: ICMarkets-MT5 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Last Tick 2020.11.24 23:00:49.327 1.33569 1.33570 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Accepted Tick 2020.11.24 23:00:49.327 1.33569 1.33570 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Accepted Length = 7 ms. 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) Order 106887648 ORDER_TYPE_BUY GBPUSD 2020.11.24 23:00:49.334 1.33572 ORDER_REASON_TP ORDER_STATE_FILLED 2020.11.24 23:00:49.830, Position created 2020.11.24 22:57:47.071, StopLevel = 0 2020.11.25 02:42:17.718 CheckOrders (EURUSD,H1) 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) Orders (2) before 106887648 with PositionID = 106886713: 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:42:17.719 CheckOrders (EURUSD,H1) ------------------------
2020.11.25 02:47:22.624 CheckOrders (EURUSD,H1) ServerName: ICMarkets-MT5 2020.11.25 02:47:22.624 CheckOrders (EURUSD,H1) 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Last Tick 2020.11.18 12:44:37.354 1.18748 1.18748 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Accepted Tick 2020.11.18 12:44:37.354 1.18748 1.18748 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Accepted Length = 17 ms. 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) Order 105637485 ORDER_TYPE_SELL EURUSD 2020.11.18 12:44:37.371 1.18749 ORDER_REASON_SL ORDER_STATE_FILLED 2020.11.18 12:44:37.476, Position created 2020.11.17 22:24:15.116, StopLevel = 0 2020.11.25 02:47:22.633 CheckOrders (EURUSD,H1) 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) Orders (2) before 105637485 with PositionID = 105516718: 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:47:22.634 CheckOrders (EURUSD,H1) ------------------------
2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) ServerName: OctaFX-Real 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Last Tick 2020.11.23 18:14:35.081 1.18108 1.18115 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Accepted Tick 2020.11.23 18:14:35.081 1.18108 1.18115 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Accepted Length = 11 ms. 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) Order 8950107 ORDER_TYPE_SELL EURUSD 2020.11.23 18:14:35.092 1.18105 ORDER_REASON_TP ORDER_STATE_FILLED 2020.11.23 18:14:35.104, Position created 2020.11.23 18:11:38.678, StopLevel = 20 2020.11.25 02:50:58.687 CheckOrders (EURUSD,H1) 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) Orders (2) before 8950107 with PositionID = 8950014: 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:50:58.688 CheckOrders (EURUSD,H1) ------------------------
2020.11.25 02:54:37.912 CheckOrders (EURUSD,H1) ServerName: Pepperstone-MT5-Live01 2020.11.25 02:54:37.912 CheckOrders (EURUSD,H1) 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Last Tick 2020.09.03 01:00:02.426 106.199 106.199 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Accepted Tick 2020.09.03 01:00:02.426 106.199 106.199 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Accepted Length = 4 ms. 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) Order 18982771 ORDER_TYPE_SELL USDJPY 2020.09.03 01:00:02.430 106.191 ORDER_REASON_TP ORDER_STATE_FILLED 2020.09.03 01:00:02.466, Position created 2020.09.02 22:57:47.081, StopLevel = 0 2020.11.25 02:54:37.934 CheckOrders (EURUSD,H1) 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) Orders (2) before 18982771 with PositionID = 18975080: 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) ------------------------ 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) Checked Orders = 0 2020.11.25 02:54:37.935 CheckOrders (EURUSD,H1) ------------------------
Fxsaber的另一个大脑爆炸。我甚至不知道该说什么。
我认为唯一可行的解决方案是与经纪人一起找到瓶颈,如果可能的话,尝试修复它。
如果要进行内部修复,你就必须
- 经受住开发商的一连串批评,并证明滞后已经发生(考虑到你可能不知道的事情,例如,经纪人的服务器硬件)
- 说服你,这是很关键的
- 等待修复
- 热心地推动经纪人升级到最新的版本,这可能比前面所有的项目都要难得多。
ServerName: RannForex-Server
Accepted Length = 28894 ms.
这里有一个强烈的怀疑,那就是你所交易的经纪人的技术非常酷。
在自定义极限处理插件中,有一些东西正在减慢速度。
这就是对你所交易的经纪人的非常酷的技术的强烈怀疑。
...经纪人的服务器可以是你想要的任何东西,也可能是交流区中关于滞后的主题链接,我们只能猜测。
对于内部修复,你将不得不
- 你将不得不承受来自开发商的一连串批评,并证明滞后的发生(考虑到你可能不知道的细微差别,例如,经纪人的服务器部分的硬件)。
fxsaber, 2020.11.25 00:47
在MQ-Demo 上运行的结果。
Total Orders (from 2020.09.01 00:00:00) = 58493, calculated = 439 Calculation time = 00:00:11.328, Performance = 38.0 orders/sec. ServerName: MetaQuotes-Demo
在另一个主题中已经反复说过,即使是终端机也在因大量的因素而放慢速度。因此,更为复杂的交易服务器必然会更加缓慢。我仍然希望算法优化仍然是可能的。即使是5毫秒的滞后,也已经非常糟糕了。更不用说数百毫秒了。
该分支将处理因触发未结头寸 的SL/TP水平而产生的订单。
我写了一个复杂但有用的功能,即获取作为指定SL/TP订单触发器的tick。
这一伟大功能的应用是创建这一分支的原因。我确信我没有抓住代码中的所有错误,但为了历史和理解它真的很困难, 我已经给出了完整的清单。