FennEdge Learn · 编程

DAS Trader Advanced Hotkey Script Course

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

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

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

DAS 脚本模块与调用契约

围绕 ExecHotkey、Exec 设计输入、输出、状态归属和依赖。

命名热键也可以是模块

前置知识:事件复用、自定义对象。辅助热键可以没有实体按键,但仍在 DAS 环境执行并共享全局变量。这里没有已记录的自定义函数参数声明或局部栈隔离模型。应定义调用契约:配置输入、结果输出、ready 和错误信息。

定义辅助模块正文

建立名为 FE_CalcNotional 的热键,正文如下。Advanced Script · 只计算调用方传入的对象,调用前必须创建全部字段。

辅助脚本代码

$feCalc.ready = 0;
$feCalc.result = 0;
$feCalc.error = "Invalid quantity or price";
if ($feCalc.quantity > 0) {
    if ($feCalc.price > 0) {
        $feCalc.result = $feCalc.quantity * $feCalc.price;
        $feCalc.error = "";
        $feCalc.ready = 1;
    }
}

定义调用方

$feCalc = NewUserObj();
$feCalc.quantity = 40;
$feCalc.price = 8.25;
$feCalc.ready = 0;
$feCalc.result = 0;
$feCalc.error = "Not run";
ExecHotkey("FE_CalcNotional");
if ($feCalc.ready == 1) {
    MsgBox($feCalc.result);
} else {
    MsgBox($feCalc.error);
}

为什么要有明确契约

预期结果为 330。辅助模块先清除旧输出,再验证,最后写 ready。调用方不能仅因为代码继续执行就假定成功。这些是脚本组织约定,不是券商事务。若 Timer 同时写 $feCalc,会破坏数据交接,因此应统一所有者或划分记录。避免辅助脚本互相递归,依赖关系最终应落到短小、可审查的正文。

脚本文本与执行是不同对象

GetHotkeyScript 取得代码字符串,保存后是正文快照,后续编辑不会自动改写旧字符串。Exec 执行实际传入的那份文本。优先使用固定且已检查的辅助名称,不从任意文本构造代码。引号转义只解决语法嵌套,不解决权限或类型校验。发布时一起记录辅助脚本名称和版本,不能只分享调用方。

练习与参考解答

成功执行后把 quantity 改为零。参考结果:ready=0、result=0,并保留解释错误,而不是残留 330。再拆出只读取结果的显示模块,契约中说明它不改配置、不提交订单。辅助名称缺失的行为在练习 build 单独验证。