MQL4脚本中布林带多品种返回相同值的逻辑错误排查求助
MQL4脚本中布林带多品种返回相同值的逻辑错误排查求助
嗨,我一眼就看出问题所在啦!你代码里的iBands函数第一个参数用了NULL,这在MQL4里代表当前激活图表的品种——也就是说不管你想获取哪个品种的布林带数值,它都会只返回当前你看着的那个图表的数值,这就是为啥所有品种返回值都一样的原因!
给你几个针对性的解决方案,完全适配你做EA的需求:
- 指定单个品种获取布林带:如果你要单独获取某个品种(比如EURUSD)的布林带,直接把第一个参数换成品种代码字符串就行:
double bb_eurusd = iBands("EURUSD", PERIOD_CURRENT, 21, 0, 2, PRICE_CLOSE); Alert("EURUSD的布林带值: ", bb_eurusd);
- 遍历多个品种批量获取:如果你的EA需要监控多个品种,先把要监控的品种放进数组,然后循环调用
iBands即可:
void OnStart() { // 定义要监控的品种列表 string watchlist[] = {"EURUSD", "GBPUSD", "USDJPY", "AUDUSD"}; for(int i = 0; i < ArraySize(watchlist); i++) { // 明确指定品种符号获取布林带 double bb_val = iBands(watchlist[i], PERIOD_CURRENT, 21, 0, 2, PRICE_CLOSE); // 检查是否获取成功(避免品种不存在/周期错误等问题) if(_LastError != 0) { Alert("获取", watchlist[i], "布林带失败,错误码: ", _LastError); continue; } Alert(watchlist[i], " 的布林带值: ", DoubleToString(bb_val, 5)); } }
- EA开发额外提醒:如果你是把EA挂在某个图表上运行,但需要监控其他品种的布林带信号开平仓,千万记得不能用
NULL代替品种符号,必须明确写出每个要监控的品种代码,不然永远只会读取当前EA所在图表的品种数据。
备注:内容来源于stack exchange,提问作者z0diac
相关产品推荐
相关产品推荐

