关于OnTimer的疑问
 Vars
    Global Integer timeID1;
    Global Integer timeID2;

Events
    OnInit()
    {   
        Print("当前时间:" + Text(SystemDateTime()));
        
        Numeric now_second = Value(Mid(Text(SystemDateTime()), 13, 2));    //当前秒数
        Print("当前秒数:" + Text(now_second) + "," + "等待:" + Text(60 - now_second) + " 秒。");
        
        timeID1 = CreateTimer((60 - now_second)*1000, 0, 1);    //立即开始,只触发一次
        timeID2 = CreateTimer(60000);    //一直触发

        print("aa");
    }


    OnTimer(Integer id, Integer millsecs)
    {
        If (id == timeID1)
        {
            print("timeID1 运行完毕,当前时间: " + Text(SystemDateTime()));
        }
        If (id == timeID2)
        {
            Print("timeID2 运行完毕,当前时间: " + Text(SystemDateTime()));
        }
    }

以下是输出信息:

当前时间:20250512.110654561
当前秒数:54,等待:6 秒。
aa
timeID1 运行完毕,当前时间: 20250512.110700587
timeID2 运行完毕,当前时间: 20250512.110754583
timeID2 运行完毕,当前时间: 20250512.110854585
timeID2 运行完毕,当前时间: 20250512.110954603

老师您好,我的本意是每次运行策略时,都等到整点整分整秒时才运行,我的疑问是:

当执行到 id == timeID1 时,是正常的,会等待 6 秒直至整分,而且它只会执行一次。

但是不知为何,其中又等待了 54 秒,才会执行 id == timeID2 ?


请教!! 关于 OnOrder 和 OnTimer
关于setbaseperiod的几个疑问
关于多数据源对齐的 SetBeginBarMaxCount疑问
关于MLRS使用的疑问
关于 SetGlobalVar 的疑问
关于tick的疑问
关于策略优化的参数设置疑问
请教ontimer撤单
关于NthLower用法的疑问
定时器/onbar和ontimer

因为你的timeID2 是每60秒运行一次呀

你创建的时间是 110654 ,第一次运行是110754 ,没错呀

哦哦,理解了谢谢,请问能否先执行 timeID1后,再执行 timeID2 的呢?而不是同时执行

换了其它方式解决了,没事了。。

在id == timeID1的循环里创建timeID2 ?

或者算好timeID1的执行时间,把timeID2的第二个参数设置成timeID1的执行时间

有老师在吗,坐等