LOGS & TROUBLESHOOTING
不要只问“为什么没单”。
先确定问题发生在触发、过滤、发送、服务器处理、成交还是最终核验。
1. 有 Gap,为什么没有下单?
报价是否新鲜→成本后是否达阈值→过滤是否通过→账户是否允许→发送前价格是否仍有效
| 日志结果 | 含义 | 下一步 |
|---|---|---|
| 未形成候选 | 基础条件未满足 | 核对报价、Point、Gap 和方向 |
| 策略过滤 | 时段、点差、仓位或风险条件阻挡 | 查看明确过滤字段 |
| 本地未发送 | 最终价格复核或队列前取消 | 拆分持久化、排队与复核耗时 |
| 请求已发送 | 进入交易端/服务器阶段 | 查看 requestId 与返回码 |
真实案例:某次只读核对中,21 次开仓意图均因“执行价格已向不利方向变化”在本地未提交,实际成交 0。该结果不能归因于券商拒单,也不能说成软件没有信号。
2. 发单以后为什么没有成交?
拒单
服务器明确拒绝请求。需要返回码、说明、账户权限和品种状态。
重报价
原价格失效,返回新价格;是否接受取决于执行模式和设置。
超时 / 未知
客户端没有及时得到终态,不能立即重复发单;先查询订单和持仓。
部分成交
部分数量完成,剩余量需要核对和明确处理,不能按计划手数记账。
3. 延时必须分段
| 阶段 | 起点 → 终点 | 说明 |
|---|---|---|
| 报价年龄 | 源时间戳 → 本机读取 | 涉及时钟同步和源端标记 |
| 本地判断 | 报价事件 → 决策完成 | 策略、过滤、线程排队 |
| 请求准备 | 决策 → SDK 调用 | 序列化、持久化和排队 |
| API 调用 | 接口开始 → 接口返回 | 不等于完整策略延时 |
| 最终核验 | 返回 → 订单/持仓一致 | 处理未知、部分成交和重连 |
现有样本出现过约 15–18 ms 的某段 API 调用,也出现过约 400 ms 的另一个连接窗口。账户、节点和环境不同,不能用于宣传“稳定 18 ms”或“比 WP7 快 X 倍”。
4. 滑点、点差和重报价
点差是下单前的买卖价差;滑点是参考/请求价与实际成交价之间的差;重报价是原价不能执行时返回新价。报告必须说明参考价格、买卖方向、Point 和正负号口径,部分成交使用成交量加权价格。
5. 一条可复查日志需要什么
- UTC 时间与界面显示时区。
- 版本、实例 ID、配置版本、账户别名与品种。
- 快源/慢源报价、报价年龄、Gap、点差和费用。
- 候选编号、过滤结果和本地未发送原因。
- requestId、订单票号、请求量、成交量与返回码。
- 参考价、请求价、成交价、滑点和执行耗时口径。
- 最终订单、持仓和策略状态核验。
- 日志默认脱敏,不记录密码、Secret 或完整个人信息。
6. 提交诊断材料
应提供:版本号、事件时间、账户别名、服务器名称、品种、策略实例、问题描述、脱敏日志和相关 requestId。不要发送账号密码。远程支持必须取得当次明确同意并可以随时结束。