FennEdge Learn · 编程

DAS Trader Advanced Hotkey Script Course

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

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

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

综合项目:DAS 多股票观察记录器

组合集合、行情对象与校验逻辑,生成可检查的多股票记录。

项目规格

前置知识:集合、行情状态、自定义对象。为两个已加载行情的股票建立手动快照记录。每行包含股票、读取的 Bid/Ask、价差、脚本观察时间和有效性。它不评价机会,也不创建订单。记录器拥有独立集合,不覆盖 QuoteObj.data。

准备与输入契约

在练习布局中加载 MSFT、AAPL,先分别验证 GetQuoteObj,再遍历集合。代码检查正价格与大小关系,不使用虚构空对象语法处理根本不存在的对象。报价可以数值合理但已经过期,所以 valid 仅表示通过本项目的数值检查。

完整实现

$feSymbols = NewUserObj();
$feSymbols.Set(0, "MSFT");
$feSymbols.Set(1, "AAPL");
$feSymbolCount = 2;
$feNotebook = NewUserObj();
$feNotebook.schema = 1;
$feNotebook.count = $feSymbolCount;
$feNotebook.rows = NewUserObj();
$feNotebook.validCount = 0;
$feNotebook.complete = 0;
$feRowIndex = 0;
while ($feRowIndex < $feSymbolCount) {
    $feSymbol = $feSymbols.Get($feRowIndex);
    $feQuoteForRow = GetQuoteObj($feSymbol);
    $feRow = NewUserObj();
    $feRow.symbol = $feSymbol;
    $feRow.second = GetSecond();
    $feRow.bid = $feQuoteForRow.BID;
    $feRow.ask = $feQuoteForRow.ASK;
    $feRow.spread = 0;
    $feRow.valid = 0;
    if ($feRow.bid > 0) {
        if ($feRow.ask >= $feRow.bid) {
            $feRow.spread = $feRow.ask - $feRow.bid;
            $feRow.valid = 1;
            $feNotebook.validCount = $feNotebook.validCount + 1;
        }
    }
    $feNotebook.rows.Set($feRowIndex, $feRow);
    $feRowIndex = $feRowIndex + 1;
}
$feNotebook.complete = 1;
$feNotebook.ShowObject();

跟踪数据流

先创建配置,随后创建 complete=0 的记录集。每轮新建一行,避免故意让所有键复用同一个可变行对象。价格副本通过检查后才增加 validCount;数值无效的股票仍有记录行。循环结束才设 complete=1,它不代表全部行都有效。

验收检查

逐行与可见行情比较并记录时间,预期 count=2、complete=1,validCount 可以为 0、1、2。确认两个股票拥有独立行。改变一个配置股票后重新手动运行,新记录集不应残留旧行。它不是两个股票的原子快照,读取按顺序发生,可能跨过多个行情更新。

扩展练习与参考解答

增加只列出无效行的报告。参考解答:从 0 到 count-1 遍历 rows,检查 row.valid,仅在等于零时将股票追加到显示字符串,不修改原记录。改成周期观察前,按照 Timer 章节分离初始化和采样,增加启停控制,不能每次 tick 重建使用者配置。