在这个论坛上,是否可以创建 "mql代码 "的任何功能的帖子? - 页 3

 

还有这个关于如何寻找/修复零偏差的帖子:https://www.mql5.com/en/forum/general

 

如果经纪人多加一个数字?

https://www.mql5.com/en/forum/179191

 

不常见的错误

嗨,各位朋友。

我正在编写一个EA,我遇到了一个不常见的错误。所以,我想请你们帮助解决MT4上的这个错误,我相信你们中的一些人,根据你们的经验,可能已经遇到了同样的问题。

阅读整个EA可能是不现实的,源代码非常大。

编译成功后,在测试器中,MT4日志显示以下错误

时间:2011.01.28 23:35:36

信息。2007.07.13 00:00 InterCandles EURUSDFXF,H4: 堆栈溢出。

甚至通过以下方式将堆栈大小提高到天际

#property stacksize 167692160

我相信它分配了16MB的内存,错误仍然存在。

有没有人在测试器中遇到同样的"堆栈溢出"问题,或者能指出问题是在MT4内部,还是在EA中(可能在数组中,嵌套声明,太大的ex4文件,等等)?

我很感谢您的帮助,很抱歉占用了您的时间。

谢谢你。

 

问题的解决方案

好吧,在有人回复之前,我找到了解决方案。

在使用该函数 之前,当测试者加载EA--链接了附件中的库--之后,日志中显示了 "堆栈溢出 "的信息。

问题出在附件中名为 "power "的函数上。我的结论是以下几点。

1)当然,它的名字没有问题;在EX4的符号表中没有MQL函数的碰撞。其他标签也被测试过。

2)显然没有达到函数的限制。在删除有问题的函数后,增加了更多的函数,没有发生错误。只有通过删除这个函数才能正常工作,而不是通过MT4编译器在EX4文件中取消链接。

3) 递归通过多次调用执行,结果被留在堆栈中。堆栈随着参数 "exponent "的指数增长而线性渐进地增长。潜在的是,堆栈可能达到其极限,并发生溢出。堆栈溢出 "的错误出现与该函数的执行无关。

因此,我认为MT4编译器可能有一个检测[某些类别]递归的装置,这在语言中是不允许的,以避免EA执行过程中潜在的堆栈溢出。

附加的文件:
原因: