FennEdge Learn · 编程

DAS Trader Advanced Hotkey Script Course

读懂代码,检查状态,验证结果。 从语言与数据结构,到订单对象、事件工作流和完整项目,系统学习 Advanced Script 编程。

按约 1046 分钟安排,已包含阅读、算例和每课练习;实际用时因人而异。

36节课程≈1046预计分钟—登录后保存进度
22
第 22/36 课 · 约 32 分钟

DAS Timer、Wait 与时间边界

用短回调、显式启停和跨日处理构建周期观察。

调度与等待不同

前置知识:共享状态与模块契约。手册描述 Timer Event 每秒执行,Wait(milliseconds) 暂停脚本继续运行;它不是 Promise、券商确认,也不能证明另一动作完成。手册不建议用 while 加 Wait 模拟 Timer。回调应短,将“何时检查”与“观察到什么状态”分开。

先初始化,再启用回调

安装练习时先清空或停用 Timer Event,手动运行初始化,再放入下方回调。它只更新计数和时间,不每秒弹窗,也不提交外部动作。

初始化脚本

$feClock = NewUserObj();
$feClock.enabled = 1;
$feClock.interval = 5;
$feClock.lastSecond = GetSecond();
$feClock.samples = 0;

Timer Event 正文

if ($feClock.enabled == 0) {
    return;
}
$feNow = GetSecond();
if ($feNow < $feClock.lastSecond) {
    $feClock.lastSecond = $feNow;
    return;
}
if (($feNow - $feClock.lastSecond) >= $feClock.interval) {
    $feClock.lastSecond = $feNow;
    $feClock.samples = $feClock.samples + 1;
}

解释时间规则

GetSecond 是午夜以来秒数,不是 Unix 时间。当时间向后跳,回调重设基准并跳过本轮;其他情况下,经过五秒才增计数,每次回调最多增加一次。延迟回调不会补执行所有错过的周期,这是“跳过遗漏采样”的规则,不是实时调度保证,也不代表交易所或券商时间。跨日与系统时钟变化要单独测试。

观察与停止

MsgBox($feClock.samples, $feClock.lastSecond);
$feClock.enabled = 0;

练习与参考解答

lastSecond=100、interval=5,回调到达时间为 102、105、117。参考结果:102 不增加,105 增加一次,117 增加一次,不补执行 110、115。若 lastSecond=86399、now=2,则基准改为 2,不增加。卸载时先在 DAS 停用回调,再清理 $feClock;enabled 无法保护根本不存在的对象。