DAS 订单查询、订单身份与撤单范围
构建 GetOrderObj 条件,分清单个匹配结果与订单集合。
股票不是订单唯一身份
前置知识:订单对象与生命周期。GetOrderObj("Symb=MSFT") 查找首个匹配项,不返回全部 MSFT 订单。多账户、多方向、多次提交都让仅股票查询产生歧义。优先使用平台记录中的具体订单标识,并在支持时组合账户和股票。
官方记录的过滤能力
手册列出 Acc、Symb、Oid、RefNum、Price、Share、First、Last,数值支持 >、<、<=、>=;逗号组合条件注明从 5.7.9.9+ 提供。这个版本说明只针对对应功能,不代表课程所有接口的最低版本。文档没有完整说明转义、通配或 SQL 语法,不能把任意输入拼入查询。
读取已知模拟记录
Advanced Script · 查询与检查。将占位账户和 RefNum 替换成实际存在的模拟订单。查询失败后调用 ShowObject 可能报错,文档没有建立通用空对象判断写法;先从 Orders 中已经确认存在的记录开始。
查询例子
$feOrderFilter = "Acc=TR_PRACTICE,Symb=MSFT,RefNum=17";
$feMatchedOrder = GetOrderObj($feOrderFilter);
$feMatchedOrder.ShowObject();
两种不同的撤单范围
订单对象检查器列出对单个对象的 Cancel;账户方法 CancelOrder(flag,symbol,price) 则描述一个范围。文档中的 BUY|P< 表示账户、股票内低于阈值的买方向订单,不等于只撤销首个查询结果。字符串中的 | 是参数数据,不是外层语言布尔运算符。手册旗标表写成 FIST,不能未确认就擅自更正为 FIRST。
单独阅读有副作用的动作
// Code-reading examples; do not join them to the query hotkey.
// $feMatchedOrder.Cancel();
// $feAccount = GetAccountObj("TR_PRACTICE");
// $feAccount.CancelOrder("BUY|P<", "MSFT", 25.00);
练习与参考解答
一个模拟账户有 24、26 两笔 MSFT,另一个账户有 23 的 MSFT,假设均为买方向。对第一个账户使用 BUY|P<、阈值 25,范围是什么?参考解答:第一账户的 24 订单;不包括 26,也不包括另一账户的 23。撤单请求不是确认,应复查剩余订单和期间成交,再决定是否重试。