错误、漏洞、问题 - 页 493

 
Lodar:
我不争论。
但这样一来
反正有一个四舍五入,它应该这样做吗?


看一下round()函数的类型。这是一个四舍五入函数,不是一个类型转换 函数。
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 

开发人员。

我不小心在Expert Advisor中循环处理了ticks,之后出现了一个 关于堆栈溢出的关键错误

问题是,信息中没有具体的信息,不知道具体发生了什么,在哪里发生。

我建议澄清这条消息的内容,如果可能的话,你想在编译阶段就抓住这样的问题(比如从被调用的方法中调用类的方法)。

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
MoneyJinn:

我不清楚为什么iCustom()会给那些缓冲区的单元格分配任意的数值,而实际上这些单元格并没有填入任何东西,也不清楚为什么不能以任何方式避免这种情况。

我想,这与指标缓冲区 数据的相应数组的内存分配有关系。

当无法确定数据的来源和真实性时,iCustom()的这种操作在我看来是不允许的,并为用户带来了额外的风险。

如果iCustom()为缓冲区单元分配任意的、与真实值不一致的值,无论如何。

为什么它不像MT4中实现的那样给这些单元格分配等于Empty_Value的值?

那么至少他们的地位会很清楚。

除了作者之外,没有人能够决定未使用的缓冲区数值应该填充什么。你说Empty_Value,但我,例如,需要它是0,或其他的东西。不管你想要什么值,用它来初始化。
 
Interesting:

开发人员。

...........,如果可能的话想在编译时抓到这样的问题(比如从一个被调用的方法中调用一个类的方法)。

我反对这样做。这将使编译器变得异常复杂,从而降低可靠性。

追踪不正确的递归是由程序员决定的。

但我希望错误信息中能包含溢出堆栈的函数名称。

 
Valmars:
除了作者之外,没有人能够决定未使用的缓冲区数值应该被填入什么。你说的是Empty_Value,但我,比如说,希望它是0,或其他的东西。不管你想要什么值,用它来初始化。

这是正确的,符合逻辑的。但问题是,用户没有填入任何东西的缓冲区单元格(!),iCustom()函数会根据自己的判断定期填入任意的垃圾。 它应该是这样的吗?

 
MetaDriver:

我反对这样做。这将使编译器变得异常复杂,从而降低可靠性。

追踪不正确的递归是由程序员决定的。

但我希望错误信息 中包含溢出堆栈的函数的名称。

是的,我们特意没有用元信息使工作引擎复杂化(毕竟它是原生的32/64)。

递归通常很容易被抓住--它直接取决于局部变量的大小,而程序中这样的地方非常少。

 
MoneyJinn:

这是正确的,符合逻辑的。但问题是,用户没有填写的缓冲单元格(!),iCustom()函数随意填写了一些垃圾。 它应该是这样的吗?

如果自定义指标不能正确填充其缓冲区,这个自定义指标就是有罪的。

而如果这个自定义指标通过iCustom发送其结果,那么它就是双重罪过,因为它误导了用户。

 
Renat:

如果一个自定义指标不能正确填充其缓冲区,这意味着这个自定义指标是有罪的。

而如果这个自定义指标通过iCustom给出它的结果,那么它就是双重罪过,因为它误导了用户。

我理解你的心态。我祝愿你成功。
 
Renat:

如果一个自定义指标不能正确填充其缓冲区,那就是这个自定义指标的责任。

而如果这个自定义指标通过iCustom输出它的结果,它就是双重罪过,因为它误导了用户。

我还是不明白,是什么阻碍了你使程序不仅高效,而且方便?如果我没记错的话,5中没有内置初始化指标缓冲区 的理由是为了优化速度。在这种情况下,指标开发者必须自己编码初始化字符串("零"),而以前在四中是由内核执行的。所以,由此产生的效率似乎并没有得到改善,而可用性却受到影响。但既然出于某种原因决定这样做,为什么不把它变成可选择的呢?也就是说,我们可以再引入一个#属性,指定缓冲区是否应该被自动初始化。

总结一下,我重复一下我已经表达过一次的想法:平台的任务,也就是MT的任务,是尽可能地保护用户(程序员)不受可能的 "错误 "影响。

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
MoneyJinn:

这是正确的,符合逻辑的。但问题是,用户没有填入任何东西的缓冲单元格,iCustom()会根据自己的判断定期填入任意的垃圾。 它应该是这样的吗?

实际上,这是一个常见的规则:初始化数组 是由用户决定的。一个未初始化的数组包含分配给它的内存中的随机值。 用户可能有充分的理由不对数组进行不必要的初始化(例如,为了节省时间)。当我确定在真正的信息出现之前我不必阅读和 "吃 "那些垃圾时,我有时会通过这种方式节省时间。

我没有看到MQ方面的任何恶意。如果他们 "预防性地 "开始减慢我的程序,我宁愿反对。

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Операции с массивами / ArrayInitialize - Документация по MQL5