MQL4中Hour函数参数错误,寻求交易时间限制实现方案
交易时间限制实现及错误修复方案
错误原因与修复
你遇到的'Hour' - wrong parameters count错误,是因为在MQL4/MQL5中函数调用不符合规范:
- 在MQL4里,
Hour()是无参函数,仅用于获取当前K线的小时数;若要从指定datetime变量中提取小时,必须使用TimeHour()(接收一个datetime参数)。 - 即使MQL5中
Hour()支持带参数,统一使用TimeHour()也能保证跨版本兼容性。
修复后的基础校验函数:
// 校验交易时间是否合法的函数 bool IsTradeTime() { datetime now = TimeCurrent(); int hour = TimeHour(now); int minute = TimeMinute(now); // 如需精确到分钟可启用 // 示例:允许交易时段为9:00-15:30(注意:此处为服务器时区时间,需自行调整时区偏移) if ((hour > 9) || (hour == 9 && minute >= 0)) { if ((hour < 15) || (hour == 15 && minute <= 30)) { return true; } } return false; }
交易时间限制进阶建议
- 时区校准:MT4/MT5默认使用服务器时区,若需对应本地时区(如北京时间),需添加时区偏移。例如服务器为UTC时区,北京时间需加8小时:
datetime now = TimeCurrent() + 8 * 3600; // 8小时转秒数 - 排除非交易日:结合
TimeDayOfWeek()函数过滤周末或节假日:int weekDay = TimeDayOfWeek(now); if (weekDay == 0 || weekDay == 6) { // 0=周日,6=周六,根据服务器时区调整 return false; } - 精细时段控制:若要避开特定时段(如早盘跳空),可同时判断小时、分钟甚至秒数,提升校验精度。
- 调试日志:添加日志输出便于排查问题:
Print("当前时间:", TimeToString(now), ",校验结果:", IsTradeTime());
内容的提问来源于stack exchange,提问作者user1582596
相关产品推荐
相关产品推荐

