MT5和速度在行动 - 页 89

 
也许只要进行几次测试,问题就会消失?
 
traveller00:
也许只要进行几次测试,问题就会消失?

也许。我希望我有更多的时间来自己做测试 :(

 
traveller00:
也许只要进行几次测试,问题就会消失?

测试只有在你第一次开始的时候才会显示出差异。

 
Slava:

Symbol(),_Symbol条目等同于NULL(其中允许用NULL代替符号名)。

在这种情况下,不需要额外检查当前符号的存在、当前符号在市场观察中的存在以及不必要地调用当前符号的属性,因为当前字符的属性已被缓存。

也就是说,如果指定了一个普通的字符串参数,而不是Symbol()、_Symbol或NULL,那么就检查完整的程序和更多的属性调用

问题。

   string symbol=_Symbol;
   SymbolInfoInteger(symbol,...)
   SymbolInfoInteger(NULL,...)

- 在这两种情况下,SymbolInfoXXX 调用的行为,它们的差异会不会超过一个检查?

symbol==_Symbol

?

 
traveller00:

顺便说一下,从今天最新发布的MT5版本的新鲜日志来看。

这是在一个符号上盘旋的3个EA,每个都在自己的图表上。而这个要求每隔一段时间 就会继续下去。这样的峰值当然不常有,但事实上,1个来自最后一个tick的新ticks请求被执行了700毫秒。

我已经监测了大约12个小时,但我已经可以看到滞后性跨越了所有极限。

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 8589203 mcs.

3个EA,每个都在自己的图表上,都在1个符号上,都在通过CopyTicksRange请求从前一个tick开始的旧ticks。而滞后的时间几乎为9秒。而且似乎这还不是极限。最有可能的是,Tick存储是一个共享资源,对它的访问是同步的,但即使是非常糟糕的同步,也不应该有这种时间。

有人会说这是一个一次性的小故障。在这12个小时的监测中,不幸的是,已经有超过100个1秒的退出。而这些看起来不再是一次性的突发事件。看起来经常有多个蜱虫同时进入,这就是造成这些尖峰的原因。

即使我们闭上眼睛,不看3个EA为一个共同的资源而争斗的事实,让我们看一下其他的监测。

ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 1401285 mcs.

该符号上只有1个专家顾问。而且还是一秒半。它不是唯一的一个,还有其他符号的EA,但它不是多线程的吗?或者说不同符号的蜱虫仍然可以互相拖累?

这是对基本EA的基本功能。该平台被定位为一个算法交易平台。这就是说,基本功能引起了强烈的质疑。一个很大的要求是再看一下。我几乎可以肯定在某处有改进的余地。或者,如果能像这里建议的那样,获得函数被调用后的最后几秒钟,我将非常感激

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

MT5和速度在行动

fxsaber, 2021.03.01 07:28

请考虑这样的功能。

int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


现在,只有通过CopyTicks*才能解决获得新刻度线而不跳过的问题。对于这项广泛的任务,这是一个非常繁琐的机制。这就像用大炮打鸟。

因此,刹车,保留巨大的缓存,等等。

 

尽量减少了对SymbolInfoTick和CopyTicksRange的调用。

  • SymbolInfoTick快照--每100µs不超过一次调用。
  • 只有在市场观察中确实有新的刻度线到达时,才会调用新刻度线的CopyTicksRange。


终端和机器(交换文件被禁用)有这个负载。


因此,有可能大大减少常规函数的滞后信息的数量(减少调用)。


在50分钟内登录。

2021.03.05 19:31:45.429 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 154 mcs.
2021.03.05 19:32:58.939 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 161 mcs.
2021.03.05 19:33:01.583 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 19:36:01.682 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 143 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 234 mcs.
2021.03.05 19:36:31.229 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 913 mcs.
2021.03.05 19:39:08.716 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 139 mcs.
2021.03.05 19:39:30.994 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 315 mcs.
2021.03.05 19:39:32.858 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 114 mcs.
2021.03.05 19:40:41.437 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 19:42:26.104 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 116 mcs.
2021.03.05 19:42:28.849 ::SymbolInfoTick(_Symbol,Tick)] = 109 mcs.
2021.03.05 19:43:10.977 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 481 mcs.
2021.03.05 19:43:53.945 ::SymbolInfoTick(_Symbol,Tick)] = 130 mcs.
2021.03.05 19:49:20.352 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 19:51:31.242 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 19:51:44.986 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 107 mcs.
2021.03.05 19:52:05.590 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 219 mcs.
2021.03.05 19:53:56.013 ::SymbolInfoTick(_Symbol,Tick)] = 236 mcs.
2021.03.05 19:55:41.453 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 105 mcs.
2021.03.05 19:55:47.109 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 148 mcs.
2021.03.05 19:55:47.110 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 265 mcs.
2021.03.05 19:59:26.011 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 186 mcs.
2021.03.05 20:00:01.569 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 117 mcs.
2021.03.05 20:01:19.704 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 109 mcs.
2021.03.05 20:02:07.285 ::SymbolInfoTick(_Symbol,Tick)] = 177 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 198 mcs.
2021.03.05 20:02:07.286 ::SymbolInfoTick(_Symbol,Tick)] = 202 mcs.
2021.03.05 20:04:40.170 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 364 mcs.
2021.03.05 20:04:45.905 ::SymbolInfoTick(_Symbol,Tick)] = 143 mcs.
2021.03.05 20:04:45.906 ::SymbolInfoTick(_Symbol,Tick)] = 158 mcs.
2021.03.05 20:04:45.907 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 504 mcs.
2021.03.05 20:04:48.259 ::SymbolInfoTick(_Symbol,Tick)] = 104 mcs.
2021.03.05 20:04:54.727 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 104 mcs.
2021.03.05 20:05:39.642 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 101 mcs.
2021.03.05 20:07:40.189 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 101 mcs.
2021.03.05 20:09:21.844 ::SymbolInfoTick(_Symbol,Tick)] = 115 mcs.
2021.03.05 20:09:32.422 ::SymbolInfoTick(_Symbol,Tick)] = 107 mcs.
2021.03.05 20:10:02.423 ::SymbolInfoTick(_Symbol,Tick)] = 128 mcs.
2021.03.05 20:15:48.838 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 149 mcs.
2021.03.05 20:16:36.001 ::SymbolInfoTick(_Symbol,Tick)] = 105 mcs.
2021.03.05 20:17:51.499 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 480 mcs.
2021.03.05 20:17:51.638 ::SymbolInfoTick(_Symbol,Tick)] = 342 mcs.
2021.03.05 20:17:52.802 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 429 mcs.
2021.03.05 20:17:53.340 ::SymbolInfoTick(_Symbol,Tick)] = 142 mcs.
2021.03.05 20:19:21.512 ::SymbolInfoTick(_Symbol,Tick)] = 122 mcs.
2021.03.05 20:20:35.836 ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 116 mcs.


看起来不是太糟糕。没有任何贸易交易。他们怎么样,我看看。


然而,突出显示的片段显示,三个EA(不同的角色)几乎同时被滞后。也就是说,滞后性对终端来说是普遍的。

 
Slava:

Symbol(),_Symbol条目等同于NULL(其中允许用NULL代替符号名)。

在这种情况下,不需要额外检查当前符号的存在、当前符号在市场观察中的存在以及当前符号的不必要的调用属性,因为当前节点的属性是被缓存的

也就是说,如果你指定一个简单的字符串参数,而不是Symbol()、_Symbol或NULL,那么就会有对完整程序和更多请求属性的检查

请再次解释,因为论坛用户对你的话有不同的解释。

 

在终端,有一个EA/chart/symbol。


2021.03.05 23:02:02.860 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 189 mcs.
2021.03.05 23:02:24.152 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 339 mcs.
2021.03.05 23:02:53.540 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 915 mcs.
2021.03.05 23:05:35.325 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 223 mcs.
2021.03.05 23:05:41.398 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 245 mcs.
2021.03.05 23:05:44.585 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 376 mcs.
2021.03.05 23:06:35.210 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 173 mcs.
2021.03.05 23:07:38.298 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 290 mcs.
2021.03.05 23:08:50.342 ::CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,From)] = 102 mcs.
2021.03.05 23:14:58.216 ::SymbolInfoTick(_Symbol,Tick)] = 447 mcs.

这样的日志在15分钟内完成。似乎毕竟是一个缓慢的Windows的问题。在这种情况下,它是。

2021.03.05 23:49:20.792 Terminal        MetaTrader 5 x64 build 2815 started for MetaQuotes Software Corp.
2021.03.05 23:49:20.792 Terminal        Windows Server 2019 build 17763, Intel Core i7-7700 K  @ 4.20 GHz, 17 / 31 Gb memory, 3698 / 3725 Gb disk, IE 11, RDP, UAC, GMT+2
 

市场观察》造成的刹车的一个明显例子。

看一下处理器一栏中的数值(从右数第二个)。

 
服务器的 滞后上,再加上终端的滞后。

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

指标:平

fxsaber, 2021.03.12 10:56

只是想起了这个伟大的指标。

这是一张来自零ping的机器的照片。事实证明,终端的内部滞后平均为~2ms。它在0-9毫秒之间跳动。


例如,服务器收到了两个ticks:第一个,然后是10ms后的第二个。因此,在Terminal中,第二个刻度不是在第一个刻度之后的10毫秒内收到,而是在10-19毫秒内。平均而言,在12毫秒内。

如果你从市场上进行交易(市场行情或当前价格的挂单),将特别难以管理。很难说开发商是否能在这里改进什么。

看了一下莫斯科的交易所,那里的情况也差不多。事实上,通过MT5算法进行交易,你几乎可以保证处于执行队列的末端,没有时间去捡好东西,很遗憾。

Акцептирование SL/TP-ордеров
Акцептирование SL/TP-ордеров
  • 2020.11.24
  • www.mql5.com
В этой ветке пойдет речь об ордерах, которые создаются в результате срабатывания SL/TP-уровней открытых позиций...