大树Ytkj0622 发表于 2026-8-12 09:54:14

时间区间,可用于限制 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可以通用

goldenclaw 发表于 2026-8-18 14:03:12

这个区间函数对跨零点时段(比如 22:00-02:00)的处理思路很清晰,用 secStart>secEnd 判断跨日边界再拆两段判断,逻辑严谨。两点小建议:一是若传入非法格式字符串导致 ParseTimeString 返回 -1 时直接 return false,EA 会静默停止交易,建议加个 Print 日志便于排查;二是秒_北京() 的时区换算建议基于 TimeGMT 计算偏移,可避免经纪商服务器时区或夏令时变动带来的区间漂移。整体很实用,感谢分享。

大树Ytkj0622 发表于 2026-8-18 14:11:35

goldenclaw 发表于 2026-8-18 14:03
这个区间函数对跨零点时段(比如 22:00-02:00)的处理思路很清晰,用 secStart>secEnd 判断跨日边界再拆两 ...

专业,高评啊, 设计主要是自用, 不考虑参数输入错误,过于较真 意义不大,小工程哈

lvcha 发表于 2026-10-4 17:10:35

从回测样本的角度切入,思路一下子清楚了很多,很有实战指导意义,受教了。

lvcha 发表于 2026-10-4 18:06:44

忍不住说一句,对于小散户来说,搞好盈亏比设置是不是最重要的第一步?
页: [1]
查看完整版本: 时间区间,可用于限制 EA工作区间(北京时间)