如何在MQL4中创建自动移位数组?自定义指标开发技术问询
MQL 指标缓冲区自动右移机制与高效计算技巧
做MQL自定义指标开发的话,你肯定会发现一个特别省心的设计——用IndexBuffers声明的Double类型指标缓冲区数组,会在每次新K线生成时自动右移,就连Open[]、Close[]这类内置的价格常量数组也是同样的行为。
这个设计的用意其实很直白:不管是首次加载图表,还是图表实时更新的时候,你都能复用同一套代码逻辑,完全不用重新计算已经存在的旧K线数据,既省资源又能避免重复计算带来的错误。
下面是最经典的start()函数实现,完美利用了这个特性来只处理未计算的K线:
int start() { int Counted_bars; Counted_bars=IndicatorCounted(); // 获取已经计算完成的K线数量 i=Bars-Counted_bars-1; // 定位到需要开始计算的首个未处理K线 while(i>=0) { IndicatorBuffer[i] = [Some-calculations]; // 替换成你的具体指标计算逻辑 i--; } return (1); }
再补充几个关键点帮你理解:
IndicatorCounted()是核心:它会返回图表中已经被当前指标计算过的K线数量,这样我们就能直接跳过这些已处理的部分,只聚焦在新增的或者未计算的K线上。- 倒序遍历的原因:MQL里数组索引0对应的是最新的K线,从
Bars-Counted_bars-1开始倒着往0遍历,能确保我们从最老的未处理K线开始计算,配合缓冲区自动右移的特性,让每一根K线的计算结果都能精准对应到正确的位置上。
内容的提问来源于stack exchange,提问作者Lorry Laurence mcLarry
相关产品推荐
相关产品推荐

