DAS Alert 与触发脚本
创建与保存条件,区分触发回调,验证重复行为并清理练习提醒。
Alert 是条件对象,不只是弹窗
MsgBox(...) 在脚本执行到这一行时显示消息;Alert 则保存条件,在满足条件时触发配置的提醒或脚本。Timer Event 周期运行,Chart Update Script 随图表更新运行。它们的启动条件、生命周期和上下文都不同。
本课先创建一个只有价格条件的练习 Alert,再单独配置只显示消息的触发脚本。先完成上一课的脚本复用练习,理解“保存代码文本”和“执行代码”的区别。
创建并保存一个价格 Alert
Advanced Script · 创建并保存 Alert 配置。 使用单独的练习桌面、已加载行情的示例股票 MSFT;先查看 Alert 默认动作,确保没有关联订单或外部动作。50 是语法练习阈值,可能立即满足条件,不代表适合设置的市场价位。
$feAlertLevel = 50;
$fePracticeAlert = NewAlertObj();
$fePracticeAlert.name = "FE_Practice_Bid";
$fePracticeAlert.Symb = "MSFT";
$fePracticeAlert.AddItem("L1 BID", ">", $feAlertLevel);
$fePracticeAlert.Save();
| 代码 | 作用 | 在界面里核对什么 |
|---|---|---|
NewAlertObj() |
创建新的 Alert 对象 | 这不是查找或更新已有提醒 |
.name |
设置提醒名称 | 能与其他练习区分 |
.Symb |
指定条件所用的股票 | 与预期行情一致 |
.AddItem(...) |
添加字段、比较符和阈值 | L1 BID、严格大于、50 |
.Save() |
保存配置 | Alert 列表里实际出现正确条件 |
"L1 BID" 是 Alert 的字段标识;">" 是字符串参数,不是让外层脚本当场比较大小。这里严格大于阈值才满足条件,等于不满足。
把数值变量传给 AddItem,不能据此假定以后修改变量就会动态更新已保存的 Alert。若想监听全局变量,应按官方 Alerts & Triggers 设置界面配置变量条件,并单独验证变化与触发行为。
配置触发后执行的代码
在 Alerts & Triggers 设置中找到本练习提醒的 Script 字段,放入下面的正文。Advanced Script · 触发时只显示消息。 它是独立的回调正文,不是拼到创建 Alert 脚本末尾。
MsgBox("FE practice alert triggered");
如果把这行放在 .Save() 后面直接执行,只能证明创建脚本执行到那里,不能证明 Alert 条件已经触发。将“创建配置”“满足条件”“执行回调”分开观察。
也可以在完成上一课后,把已审查的 FE_PracticeMessage 作为触发脚本调用。Alert 回调本身与热键一样可能有副作用,不能因为入口叫提醒就忽略内部代码。回调中需要读取窗口时重新按名称获取,不依赖触发那一刻的焦点。
修改、停用与清理
创建前先查看是否已存在 FE_Practice_Bid。重复运行 NewAlertObj() 并不等于按名称更新;同名时的行为需在具体 build 确认,不能把名称当作去重保证。
官方在 p. 34 用 Reset() 后再 Save() 演示从提醒列表移除。Advanced Script · 清理本次练习 Alert。 仅当 $fePracticeAlert 仍指向刚创建的对象、且没有被其他脚本覆盖时,单独运行;重启或失去对象引用后,通过 Alert 界面处理。
$fePracticeAlert.Reset();
$fePracticeAlert.Save();
手册章节标题提到 GetAlertObj(),但正文没有提供可据以教学的查找参数与未找到时的契约。因此这里不猜测 GetAlertObj("name") 的写法。需要复用已有 Alert 时,在当前 build 的对象帮助与 Script Builder 中核对,再记录查找、修改与停用结果。
动手练习:做一张触发记录表
在练习环境配置一个可观察的阈值,记录条件低于、等于、高于阈值时的结果。再比较保持满足与离开后再次满足,记录是否重复提示。最后停用或清理本次 Alert,确认它不再触发。阈值、股票、行情时间、DAS build、重复/自动删除设置应与结果一起保存。
三种“触发”要分开
Alert 条件成立后执行 Script、Chart 更新回调以及订单的 Trigger 关系属于不同机制。第一个是提醒入口,第二个跟随图表事件,第三个涉及订单生命周期。一个 Alert 被保存,不代表它有任何订单关联。
每条提醒都要标注条件、股票身份、启停方法、重复触发策略和清理方式。如果你希望多条件 AND,不要假设连续 AddItem 自动等于 AND;见 多条件提醒,先计算自己的状态,再接提醒入口。
练习解答与验收记录
创建前记下现有提醒,创建后在 Alert 列表核对名称和条件,达到条件后核对触发次数,Reset/Save 后确认移除。再次运行创建脚本是否覆盖还是新增,应由本地实际列表证明,不能只凭相同 Name 推断。
预期提醒只在进入条件时发生一次,就需要记录“之前是否已经处于该状态”,不能仅在每次回调中检测当前条件。完整的重置、滞回和断连处理见 状态机。