时间区间,可用于限制 EA工作区间(北京时间)
bool 区间_北京(string _time_start_str, string _time_end_str){
if(_time_start_str=="0"&&_time_end_str=="0")
return true;
if(_time_start_str==""&&_time_end_str=="")
return true;
/**
* 判断当前北京时间是否在字符串区间内
* _time_start_str / _time_end_str 支持 "09:30" 或 "09:30:00"
* 自动处理跨零点:23:00:00 ~ 01:00:00
* return true=当前时间在区间内
*/
bool 时间类::区间_北京(string _time_start_str, string _time_end_str)
{
if(_time_start_str=="0"&&_time_end_str=="0")
return true;
if(_time_start_str==""&&_time_end_str=="")
return true;
if(_time_start_str=="00:00:00"&&_time_end_str=="00:00:00")
return true;
if(_time_start_str=="00:00"&&_time_end_str=="00:00")
return true;
int secStart = ParseTimeString(_time_start_str);
int secEnd = ParseTimeString(_time_end_str);
int secCur = 秒_北京();
if(secStart == -1 || secEnd == -1)
return false;
// 跨零点区间
if(secStart > secEnd)
{
return (secCur >= secStart || secCur <= secEnd);
}
// 同一天正常时段
else
{
return (secCur >= secStart && secCur <= secEnd);
}
}
//+------------------------------------------------------------------+ if(_time_start_str=="00:00:00"&&_time_end_str=="00:00:00")
return true;
if(_time_start_str=="00:00"&&_time_end_str=="00:00")
return true;
int secStart = ParseTimeString(_time_start_str);
int secEnd = ParseTimeString(_time_end_str);
int secCur = 秒_北京();
if(secStart == -1 || secEnd == -1)
return false;
// 跨零点区间
if(secStart > secEnd)
{
return (secCur >= secStart || secCur <= secEnd);
}
// 同一天正常时段
else
{
return (secCur >= secStart && secCur <= secEnd);
}
}
//+------------------------------------------------------------------+
Mt5 Mt4可以通用
这个区间函数对跨零点时段(比如 22:00-02:00)的处理思路很清晰,用 secStart>secEnd 判断跨日边界再拆两段判断,逻辑严谨。两点小建议:一是若传入非法格式字符串导致 ParseTimeString 返回 -1 时直接 return false,EA 会静默停止交易,建议加个 Print 日志便于排查;二是秒_北京() 的时区换算建议基于 TimeGMT 计算偏移,可避免经纪商服务器时区或夏令时变动带来的区间漂移。整体很实用,感谢分享。 goldenclaw 发表于 2026-8-18 14:03
这个区间函数对跨零点时段(比如 22:00-02:00)的处理思路很清晰,用 secStart>secEnd 判断跨日边界再拆两 ...
专业,高评啊, 设计主要是自用, 不考虑参数输入错误,过于较真 意义不大,小工程哈 从回测样本的角度切入,思路一下子清楚了很多,很有实战指导意义,受教了。 忍不住说一句,对于小散户来说,搞好盈亏比设置是不是最重要的第一步?
页:
[1]