当尝试在指标缓冲区中显示长条数(假设为7000)时,有人知道如何避免错误 array out of range
吗?
答案 0 :(得分:3)
MQL4指标使用"其他"处理数组的机制比#"普通"数组有。
... Testing pass stopped due to a critical error in the EA
... array out of range in '!2015-09-08___!EA 2xAMA 01 2015-09-08_msMOD_0.00.mq4' (519,39)
是的, MT4
在尝试处理错误 ptr
->
{{1}时会引发致命错误一个人必须小心谨慎 避免 这种情况,或者 trim array[aStaticSIZE]
(类似于低延迟循环缓冲方案)不要指向数组边界(下溢/溢出)或 扩展 ptr
通过array[]
以便跟上声明为动态ArrayResize()
的数组上的ptr增长(直到内存允许)),然而 MQL4技术指标 还有其他情况。
从double Array[];
开始,您的" 普通"如果O / S内存池管理器允许,则数组不能超过 "New"-MQL4.56789-Build-840
元素,因此即使使用更高维度的映射2.147.483.647
,也应该有足够的空间。
多年前,我们使用了许多并行的2D / 3D阵列来实现快速和{ 2D | 3D | 4D }
(安全封装)堆/堆栈处理程序,以便在100k +行/ 2D平面的比例下维护高度动态的实体所有人都做得很好 - private
。
所以一些7k +元素不应该让你担心。
从这个意义上讲,您的代码无需关心这些问题。
MQL4
答案 1 :(得分:2)
我遇到了类似的问题,我的缓冲区总是出现“Array out of range
”错误。我使用 ArraySize()
进行了检查,返回 0
。
最后,我忘了在指标的 SetIndexBuffer(...)
中为此缓冲区数组打电话 onInit() {...}
。< / p>
由于我使用的内部缓冲区没有绘制线条,我使用 IndicatorBuffers()
函数先增加缓冲区数量,然后使用 {{1}注册我的附加缓冲区}} 强>
SetIndexBuffer(...)