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 的路由。