FennEdge Learn · 编程

DAS Trader Advanced Hotkey Script Course

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

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

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

DAS Locate 脚本:询价、借股与结果核对

分步读懂 InquiryShare、Inquire 与 LocateLowest 的代码和副作用。

先区分询价、借股与订单

Locate 是借股相关流程,不能与普通报价或做空订单混为一谈。InquiryShare 设置询价数量,Inquire 发起询价,LocateLowest 进入实际 Locate 动作。接口短,不意味着它只是查询。

阶段 得到什么 还没有证明什么
填入股票和数量 请求准备信息 尚未收到提供方报价
询价返回 对应提供方的数量、价格等响应 尚不能据此认定借股成功
Locate 结果 借股请求的实际结果 不保证随后订单接受或成交
订单回执 那笔交易订单的状态 不应反过来替代 Locate 记录

下方按官方 Short Locate 教程拆开讲解。教学数值不表示应借多少股;费用、券源、权限和结果字段以具体券商、提供方及 DAS build 为准。

配好窗口再写代码

先打开 Short Locate 窗口,右键标题栏,将窗口命名为 feLocate。在窗口中明确选好练习股票、适用账户/提供方与其他必填项;确认券商提供可用于练习的 Locate 环境。模拟交易账户不自动证明 Locate 动作也免费或模拟。

在 Hotkey Script Builder 的 ShortLocate 命令分类核对当前版本可用字段。GetWindowObj 的参数是自己命名的窗口,不是 ShortLocate 这个窗口类型。下方明确沿用窗口中已选好的股票,不猜测跨券商的自动选股或路由设置。

第一步:只填写询价数量

Advanced Script · 修改 Short Locate 输入,不发起询价。 需要上述 feLocate 窗口已存在并配置正确。110 仅为演示数量。

$feLocateWindow = GetWindowObj("feLocate");
$feLocateWindow.InquiryShare = 110;

执行后直接看窗口:数量应为 110,股票和提供方应仍与准备记录一致。InquiryShare 是 Locate 窗口的询价字段,不是 Montage 的 Share,也不是成交股数。

第二步:单独发起询价

Advanced Script · 向配置的提供方发起询价。 先完成字段检查,确认练习环境允许查询,再单独运行。它不是纯本地读取。

$feLocateWindow = GetWindowObj("feLocate");
$feLocateWindow.Inquire;

这里 .Inquire; 是官方示例中的命令形式,不擅自改成 .Inquire()。发起请求后,等待窗口显示本次请求的响应,核对股票、请求数量、返回数量、每股价格、总费用和适用条款。旧报价、空白行、错误或超时都不是成功响应。

脚本执行到了下一行,不能证明异步询价已经完成。不要用固定等待几秒来推断券商侧状态,也不要将询价与实际 Locate 无条件连成一个热键。

第三步:读懂实际 Locate 命令

官方用下面这条命令进行 Locate。代码阅读 · 会请求借股,可能产生费用。 保留为注释以便学习准确写法,不作为本课程的直接执行练习。只有在核对报价、数量、费用、权限与提供方条款后,才可在你明确选择的环境另行配置这一步。

// $feLocateWindow.LocateLowest;

Lowest 不能保证在所有提供方、所有时间都拿到全市场最低成本,也不能证明所需数量已经分配。具体比较范围与成交规则需要查当前券商说明。提交后的已借数量、未完成数量、费用和失败原因,应从 Locate 结果中逐项核对。

如果没有收到结果,先检查原请求,避免重试造成重复借股或费用。重置脚本变量、关闭窗口或取消交易订单,都不能被当作撤销已发生 Locate 费用的办法。

扩展命令如何查,而不混用接口

不同 build 和券商还可能暴露 InquireAll、自动 Locate、价格上限或其他命令。先在自己的 ShortLocate 分类找到准确说明,记录所属窗口、参数、单位、是否提交和返回证据,再扩展脚本。不能把另一个券商的整段热键直接当作通用模板,也不能把 CMD API 的协议命令当成本课程的 Hotkey Script 语法。

涉及 Exec 或 ExecHotkey 时展开辅助脚本全文:上层看起来只在准备输入,辅助层可能已经包含 LocateLowest。把每条可到达的外部动作都纳入审查。

动手练习:画出状态与证据

先只练习填写数量。若环境允许询价,再记录从“未请求”到“等待响应”到“已返回/失败/未知”的变化。对数量不足、空响应、超时和重复点击分别写出下一步核对动作;未知状态先查原请求。借股提交保留为代码阅读,不作为完成本课的条件。

Inquiry、接受与可用数量不是同一件事

询价得到价格和数量信息,不自动代表已经接受报价、支付费用或取得可供该账户使用的借股。提交 locate 后也可能出现部分数量、拒绝或状态未知。用“请求、供应商回复、接受动作、最终数量与费用”分别记录,不要用一个 done 标志覆盖全部。

如果界面显示的回复属于上一次股票,脚本即使成功填写了新的 InquiryShare,也不能消费旧回复。符号、账户、供应商、请求数量与回复时间必须对应本次操作。

练习解答

只运行 Inquire 后,能够确认的是询价请求入口被触发及后续可观察到的回复;不能据此填写“已借到”。LocateLowest 则是有潜在费用的动作,不适合在超时后盲目重试。状态不明时先核对供应商与账户记录。

进阶 Locate 工作流 提供独立的假数据费用计算器、部分数量处理和验收矩阵。它不会虚构通用的报价读取函数或统一适用于所有 broker 的路由。