指标: Ping

 

Ping:

一款实时指标显示终端内部报价的滞后。

指标可视化的两种变体

作者: fxsaber

 

请分享VPS 上 最小网络 ping 的指标统计。


在我不访问的本地机器上,指标会出现长达半秒的峰值。


我已经很久没有监控过 EA 了,但 10 毫秒是很常见的。


总的来说,MT5(MT4也好不到哪里 去)是一桶焦油里的一勺焦油。


ZY 与市场交易(尤其是剥头皮交易)相比,通过挂单(例如证券交易所的限价单)进行交易的人受这种疾病的影响要小得多。

 

交易代码 Si-12.17 MetaQuotes-Demo


在网络 ping < 0.1 秒时,延迟达到 2 秒。这可能是因为报价流和交易流追溯混合的缘故。总之,很糟糕。

 

不知道为什么,中间那张很小。

这是第二张。


 
Maxim Dmitrievsky:

由于某种原因,平均值非常小

实际上并不小 ~5 毫秒。这是给零 ping 患者的一块石头。

这里有一个瞬间爆发。

在这样的爆发背景下,平均值当然难以察觉。


这个问题的来龙去脉是,在 MT4 ECN 上交易时出现了一些混乱,我自己的限制影响了定价,而且堆栈是可见的。在 MT4 上无法查看点数历史,但好在 MT5 上有相同的数据。这就是为什么我愚蠢地录制了几个小时的视频,记录了活跃交易期间终端本身的所有堆栈。我开始分析视频、MT5+ZoomPrice 和 MQL4 脚本的结果,以了解删节和执行的特殊性。


结果,我发现 MT4 显示了一些无稽之谈--要么这些价格在历史记录(MT5+ZoomPrice 和视频中的眼镜)中不存在,要么存在,但其中一些被遗漏了,而且其中一些持续时间比历史记录中长得多。最后,我意识到 MT4 本身的速度正在放缓。在 MT5 的历史中,一切都很完美。但疑虑悄然而至,指标证实了这一点。


现在我意识到,我不能完全相信 MT5 中当前价格的 相关性。第三方应用程序(视频记录的老版本)显示的实时价格比 MT4 准确得多,显然也比 MT5 准确得多。我还不知道如何比较它们来确认,因为我无法通过 MQL 直接从第三方桩中提取数据。但从得到的结果来看,平台滞后问题确实很严重。当您观察到这种情况时,所有关于高速的说法都会不攻自破。


是的,OrderSendAsync 的速度很快,但在发送之前,您需要根据当前价格确定方向,因此速度会变慢。

 
fxsaber:


是的,OrderSendAsync 的速度很快,但在发送之前,您必须确定当前价格的方向,因此速度会减慢。


也许应该从市场概览中删除所有不必要的货币对,尽管我不认为会有什么重大变化。

我记得有一个经纪人向我推荐过这个方法:)))

 
Maxim Dmitrievsky:

也许应该从市场概览中删除所有不必要的货币对,尽管我不认为会有什么重大变化。

我只保留了交易货币对和每个图表的 5000 条数据。现在我们可以肯定地说,基于指标(标准或 iCustom)的智能交易系统速度很慢,因为指标滞后尖峰的事实已经得到证实。因此,我们建议放弃 iCustom,转而通过 OOP 将其构建为智能交易系统。


事实上,最初有人说智能交易系统中的指标 是一个瓶颈,因为所有指标都是在一个线程中执行的,这与智能交易系统不同。Expert Advisor 中的滞后需要单独研究。获取滞后的功能已在说明中列出,因此并不困难。

 

为了进行自我检查,代码中有这样一行(未注释):

Print(TickToString(Tick) + TOSTRING(Ping));


它输出接收到的新 TICK 及其 ping。让我们以这样的日志为例

2017.11.16 20:08:19.602 Ping (EURUSD,M1)         time = 2017.11.16 20:07:58.215 bid = 1.17711 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_ASK
2017.11.16 20:08:19.602 Ping (EURUSD,M1)        Ping = 2.425000000000182
2017.11.16 20:08:23.142 Ping (EURUSD,M1)         time = 2017.11.16 20:08:01.212 bid = 1.17712 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.16 20:08:23.142 Ping (EURUSD,M1)        Ping = 541.3899999999999
2017.11.16 20:08:23.603 Ping (EURUSD,M1)         time = 2017.11.16 20:08:02.215 bid = 1.17711 ask = 1.17714 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.16 20:08:23.603 Ping (EURUSD,M1)        Ping = 543.261

终端时间一栏,即收到勾选的时间,标记为黄色(终端自己写入,而不是指标)。红色 是新的勾选时间。

您可以注意到,相邻红色记录之间的差异与相邻黄色记录之间的差异相差约 540 毫秒。这就是终端滞后的真实例子,当你看到所谓的实际价格时,其实已经过了半秒,因为它并不存在。

 
如果注释掉下面一行
  if (SymbolInfoTick(_Symbol, Tick, Ping))// &&
// (!IsIndicator || (Count++ > 1)))// 指标中的SymbolInfoTick需要 "预热",其形式为多个首次计算事件


则启动后会立即出现以下结果

2017.11.17 12:00:55.879 Ping (EURUSD,M1)         time = 2017.11.17 12:00:32.418 bid = 1.17925 ask = 1.17928 last = 0.0 volume = 0 TICK_FLAG_BID
2017.11.17 12:00:55.879 Ping (EURUSD,M1)        Ping = 0.0
2017.11.17 12:00:56.399 Ping (EURUSD,M1)         time = 2017.11.17 12:00:35.720 bid = 1.17923 ask = 1.17925 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
2017.11.17 12:00:56.399 Ping (EURUSD,M1)        Ping = 2781.549

将近三秒钟的 "滞后"!原因很简单--启动任何指标时,第一个 OnCalculate 调用都会强制使用旧的刻度线。这与在图表上按下 "更新 "按钮是一样的。

指标的这一行为并无错误,您只需了解第一次OnCalculate 调用是什么。在智能交易系统中,不会强制调用 OnTick,因此一切都很明确。

 

在我看来,我们不应该排除经纪人本身的报价延迟,那些臭名昭著的 "过滤器",历史记录已经是未经过滤的了。

但是,如果没有开发人员的评论,或者不掌握服务器部分,我们就永远不会知道。

另一方面,我将 2 个 EA 放在同一符号的不同终端窗口中,通过 RAM 对数值进行比较,发现偏差也很大,在强烈波动时超过了几个价差。我不知道如何解释这种现象。

 
Maxim Dmitrievsky:

在我看来,我们不应排除经纪商本身的报价延迟,这些都是臭名昭著的 "过滤器",而且历史记录已经是未经过滤的了。

MetaQuotes 演示版上延迟 15 分钟的交易所符号肯定没有任何过滤器。

另一方面,我在一个符号的不同终端窗口中安装了 2 个 EA,并通过 RAM 对数值进行了比较,发现偏差也很大,在强烈波动时超过了几个价差。我不知道如何解释这种现象。

关于交易、自动交易系统和测试交易策略的论坛

有些经纪商的报价滞后是真的吗?

fxsaber, 2017.11.17 11:20 pm.

在 MT4/5 中,您需要注意价格相关性的概念。

连接到同一账户的同一台机器上的两个终端会在相当大的范围内不同步。

这需要由开发人员处理,因为 MT5 的任何速度特性都可能被合理地扭曲,说得温和一点。