错误、漏洞、问题 - 页 2490

 
Slava:

你仔细阅读了我在下面帖子中的引文吗?

自从引入 "每个图表 的最大条数 " 设置后,即从MT4开始,这种行为就一直存在。在这15年中,我们已经多次解释过,为什么我们不是每次都按照这个设定来削减酒吧的数量。而现在我们并不是每次都削减。

没有人读过文件。但这是一个悖论。他们仍然要求我们在他们不看的文件中写些别的东西。

斯拉瓦, 我没有抱怨。我仔细阅读了,不仅是你的引文,还有这一段

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

虫子,虫子,问题

斯拉瓦, 2019.06.29 18:25

rates_total总是显示当前图表上可用的 条数

我不明白你这句话的意思

而这

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

虫子,虫子,问题

斯拉瓦, 2019.06.29 18:42

我现在手头没有客户终端,无法引用帮助。从移动设备上点击两下https://www.metatrader5.com/ru/terminal/help/startworking/settings#max_bars

特别强调的段落。

为了更经济的计算,指标可以有比 "窗口最大条数 "参数中指定的更多条数。 随着新条形图的到来,旧条形图不会立即从数据缓存中删除。这允许指标不在每个新条形上完全重新计算,而只是为新条形额外计算其数值。

我已经不止一次地阅读过文件。但我已经在最近开始的终端上做了图片。窗口中只有5000条,新的还没有来得及加载。

当然,我有不明白的地方,这就是为什么我再次询问并试图了解。我想不会有任何变化。请不要把我的陈述当作是一种抱怨。

 
Igor Makanu:

该参考资料不正确,有误导性,我写道:https://www.mql5.com/ru/forum/304239/page57#comment_11519307

在MQL5中,缓冲区一般像平常的数组一样工作,在MT4中,终端处理缓冲区 - 它将它们重置为EMPTY_VALUE,然后 ...我不记得我在哪里写过关于MT5和MT4指标的区别了

你需要清除缓冲区--你把它们当作一个普通的数组来清除,终端只设置数组-缓冲区本身的大小。

伊戈尔,你能不能用简单的俄语解释一下:如果指标缓冲区的每个洞都将被填充一些数值,这些数值将取代那里的垃圾,在用正确的数值填充这些洞之前,强迫这些洞的目的是什么?对于执行速度的损失?

 
Alexey Viktorov:

伊戈尔,你能不能用简单的俄语解释一下:如果指标缓冲区的每个洞都将被填充一些数值,以取代其中的垃圾,那么在填充所需的数值之前强行清除这些洞的目的是什么?对于执行速度的损失?

填补 "洞 "只在有 "箭头 "的指标中至关重要,在MT4的指标初始化过程中,这些 "洞 "将由EMPTY_VALUE值自动填补。

在MT5中,它必须由程序员来完成。

或者在MT5中,程序员应该通过if()else结构填充指标缓冲区

也就是说,这将在MT4中发挥作用。

if(...) Buf[i] = high[i];

在MT5中,你必须写。

if(...) Buf[i] = high[i]; else Buf[i] = EMPTY_VALUE;

或者在MT5中,你需要清除指标缓冲区,否则当你切换TF时,指标将从数组中抽取 "垃圾",这是由指标缓冲区....。如何写,考虑什么,是一个品味的问题


SZY: 速度? 好吧,测量一下速度,在99%的情况下,内置函数更快,但在循环中填充每一个条状物EMPTY_VALUE和用ArrayInitialize(Buf,EMPTY_VALUE)进行一次初始化之间,性能上没有区别。

 
Igor Makanu:

填补 "洞 "只在有 "箭头 "的指标中至关重要,在MT4的指标初始化过程中,这些 "洞 "将由EMPTY_VALUE值自动填补。

在MT5中,它必须由程序员来完成。

或者在MT5中,程序员应该通过if()else结构填充指标缓冲区

也就是说,这将在MT4中发挥作用。

在MT5中,你必须要写。

或者在MT5中,你需要清除指标缓冲区,否则当你切换TF时,指标将从数组中抽取 "垃圾",这是由指标缓冲区....。如何写,考虑什么,是一个品味的问题


好吧,衡量一下速度,在99%的情况下,内置函数运行得更快,但在EMPTY_VALUE循环中填充每个条,和用ArrayInitialize(Buf,EMPTY_VALUE)初始化一次,性能上没有区别。

这一切都只是一种唠叨。以前就是这样,我也想这样,很难改变我的习惯和其他原因。

if else结构可以很容易地被替换成

Buf[i] = условие ? high[i] : EMPTY_VALUE;
 
Alexey Viktorov:

这一切都只是唠叨。这就是过去的方式,这就是我想要的方式,很难改变我的习惯和其他原因。

if else结构很容易被替换成

如果我很挑剔的话,在C++或C#中提高性能的技巧建议不要使用 "条件运算符? :" 我想我曾经读过一篇关于Habra的文章(我没有测试过,我尽可能地写得方便)。

;)

 
Igor Makanu:

如果我很挑剔的话,关于如何在C++或C#中提高性能的建议是,不要使用 "条件运算符? :" 我想我曾经读过一篇关于Habra的文章(我没有测试过,我自己写的东西尽可能的方便)。

;)

编译器不是白痴,优化效果比Habra上的大师还要好。
 
Artyom Trishkin:
这里的编译器不是白痴,而且比Hubr上的 "大师 "们优化得更好。

在这样的场合,我总是重复:"太阳在早晨升起,在晚上落下......"- 你看到这里有什么逻辑吗?- 是的,这符合逻辑,但我的句子里有信息吗?- 它不在那里。

我不会测试它?:, 编译机....Hubr,好...

 
Igor Makanu:

我不会测试它?:

测试了MT5。

2019.06.30 13:37:04.230 tst (EURUSD,H1) Testing if() cycles=999999999999 time=10859 ms

2019.06.30 13:37:15.116 tst (EURUSD,H1) 测试 ?: cycles=999999999999 time=10891 ms

2019.06.30 13:38:05.348 tst (EURUSD,H1) Testing if() cycles=999999999999 time=10843 ms

2019.06.30 13:38:16.190 tst (EURUSD,H1) 测试 ?: cycles=999999999999 time=10844 ms

2019.06.30 13:38:32.111 tst (EURUSD,H1) Testing if() cycles=999999999999 time=10860 ms

2019.06.30 13:38:42.955 tst (EURUSD,H1) 测试 ?: cycles=999999999999 time=10843 ms

测试了MT4。

2019.06.30 13:46:09.087 tst EURUSD,H1: 测试 ?: cycles=999999999999 time=33234 ms

2019.06.30 13:45:35.854 tst EURUSD,H1: Testing if() cycles=999999999999 time=32953 ms

2019.06.30 13:44:43.421 tst EURUSD,H1: 测试 ?: cycles=999999999999 time=333298 ms

2019.06.30 13:44:10.094 tst EURUSD,H1: Testing if() cycles=999999999999 time=33016 ms

2019.06.30 13:42:56.925 tst EURUSD,H1: 测试 ?: cycles=999999999999 time=33344 ms

2019.06.30 13:42:23.584 tst EURUSD,H1: Testing if() cycles=999999999999 time=32953 ms

MT的开发者们,一如既往地站在游戏的顶端!
 
我注意到很久了,在一个大项目 中高亮显示自定义宏名称并不总是有效。 许多在其他文件中定义的宏由于某种原因没有被高亮显示。 我还搞不清楚其中的规律。 我所看到的是,在某个文件中定义的所有宏在某一行之后在其他文件中停止高亮显示。 有没有人自己看到这种情况?
 
Alexey Navoykov:
我注意到很久了,在一个大项目中,用户定义的宏名称的高亮显示并不总是有效。 许多在其他文件中定义的宏由于某种原因没有被高亮显示。 我还找不到模式。 我所看到的是,所有在某个文件中定义的宏在某一行之后在其他文件中停止高亮显示。 有没有人看到自己发生这种情况?

我注意到,如果你作为任何函数的参数来写,它就不会亮起来。我认为这不是一个完整的匹配类型。或者说,如何更准确地称呼它,我不知道。