我查了代码,用的是iCustom调用自己写的子函数,里面有个循环是从rates_total开始往前推的,判断背离时用了iRSI和iBands,但问题可能出在数据缓冲区的索引上。我怀疑是MT5的OnCalculate里,prev_calculated在历史数据重新下载或者新价格跳动时没有正确同步,导致数组下标超过了bars的总数。更奇怪的是,只有加载到EURUSD才触发,黄金和镑美都没事,感觉像是这个品种的tick数据量特别大,缓冲区扩容时出了岔子。
有没有人遇到过类似的情况?我试过把指标改成只计算当前K线,不再扫描历史,白屏倒是消失了,但这样背离信号就完全不准了,等于废掉。我想保留完整的扫描逻辑,又不想每次新报价都去碰历史数组,是不是应该在OnCalculate里加个保护,比如检查rates_total和prev_calculated的差值,或者干脆用ArrayResize强制锁定缓冲区大小?另外,白屏是不是MT5的图形引擎因为指标崩溃而拒绝重绘,有没有办法在不重启终端的情况下强制刷新图表?
主要卡在怎么让指标在数据量大的品种上稳定运行,又不牺牲计算精度。哪位懂底层机制的帮看看,是iCustom的调用方式有问题,还是OnCalculate的返回值设置不对?我用的MT5 build 4450,不知道是不是版本兼容性的坑。
有没有人遇到过类似的情况?我试过把指标改成只计算当前K线,不再扫描历史,白屏倒是消失了,但这样背离信号就完全不准了,等于废掉。我想保留完整的扫描逻辑,又不想每次新报价都去碰历史数组,是不是应该在OnCalculate里加个保护,比如检查rates_total和prev_calculated的差值,或者干脆用ArrayResize强制锁定缓冲区大小?另外,白屏是不是MT5的图形引擎因为指标崩溃而拒绝重绘,有没有办法在不重启终端的情况下强制刷新图表?
主要卡在怎么让指标在数据量大的品种上稳定运行,又不牺牲计算精度。哪位懂底层机制的帮看看,是iCustom的调用方式有问题,还是OnCalculate的返回值设置不对?我用的MT5 build 4450,不知道是不是版本兼容性的坑。
