动态数组存值时,需要动态分配空间,你没分配空间所以越界。
int array_size = ArraySize(数组名称)
ArrayResize(数组名称,array_size + 1)
参照以上,动态分配数组空间
刚入门一个编程语言,不要太快下结论那里有 bug,更何况 MT4 是一个十多年的老平台 。
修改代码如下:(ps 你的原始取 zigzag 的代码逻辑是有问题的,有时 zigzag 最近的一个点会超过8根K之外,不过下面的修改仅针对你提出数组越位的问题来做补强,不改变你原有代码的取数组逻辑)
int InpDepth=12; int InpDeviation=5; int InpBackstep=3; ENUM_TIMEFRAMES e_TimeFrame=PERIOD_CURRENT; /// int kC=1000; double zigzagbuffer[]; double real_zigzag[]; ArrayResize(zigzagbuffer,kC); ArrayResize(real_zigzag,kC); ArrayInitialize(zigzagbuffer,0.0); ArrayInitialize(real_zigzag,0.0); for(int i=0; i<kC; i++) { zigzagbuffer[i]=iCustom(Symbol(),e_TimeFrame,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i); } for(int m=0,n=0; m<kC; m++) { if(n>8) break; if(zigzagbuffer[m]!=0.0) { real_zigzag[n]=zigzagbuffer[m]; n=n+1; } }
多谢,这个非常棒!完美解决