如何在MQL5中获取前15根K线或3分钟前的随机指标值
嘿,刚好对MQL5的指标调用熟得很,这就帮你搞定获取随机指标历史值的问题!
核心:用好iStochastic的最后一个参数——shift
你现在的代码只获取了当前最新K线(shift=0,默认值)的随机指标值,要获取历史值,关键就是给函数加上最后一个shift参数,它代表相对于最新K线的偏移量:
shift=0:当前最新K线(你现在用的默认值)shift=1:前1根K线shift=15:前15根K线,也就是你要的目标
1. 获取前15根K线的随机指标值
直接给iStochastic加上15作为最后一个参数就行,另外注意:随机指标返回的是0-100的浮点数,用double接收比int更准确,避免精度丢失:
// 获取前15根M1 K线的随机指标值 double stochastic_15bars_back = iStochastic(_Symbol, PERIOD_M1, 5, 3, 3, MODE_SMA, STO_LOWHIGH, 15);
2. 获取3分钟前的随机指标值
如果要精准定位“3分钟前”的数值,因为是M1周期,3分钟对应3根K线,但如果当前K线还没走完,直接用shift=3可能不准,更稳妥的方式是先通过时间找到对应的K线索引,再获取指标值:
// 计算3分钟前的时间戳 datetime three_minutes_ago = TimeCurrent() - 3 * 60; // 找到该时间对应的M1 K线的shift值(true表示找不晚于指定时间的最后一根K线) int target_shift = iBarShift(_Symbol, PERIOD_M1, three_minutes_ago, true); // 确保找到有效shift(避免返回-1的情况) if(target_shift != -1) { double stochastic_3min_back = iStochastic(_Symbol, PERIOD_M1, 5, 3, 3, MODE_SMA, STO_LOWHIGH, target_shift); // 这里可以对获取到的值进行后续处理 } else { Print("无法找到3分钟前对应的K线"); }
小提醒
- 记得检查
iBarShift的返回值,如果是-1说明没找到对应的K线,要做异常处理 - 如果你的图表是其他周期,调整
PERIOD_xxx参数就行,逻辑是通用的
内容的提问来源于stack exchange,提问作者Jaffer Wilson




