# IPO 提交与结果核对 当前实现使用文件记录,不增加数据库或后台任务。 - 路径:`qmt_data_dir/ipo/<账户 SHA-256>//<证券>/<尝试序号>.json`。 - 提交前用独占创建方式写入并落盘 `pending`;占位失败不提交。 - HTTP 正常返回仍保留 `pending`,不代表最终申购成功。 - 下次 IPO 任务先查询账户委托。查不到、状态未知、仍在处理或已有部分成交时,不重发。 - 同一本地订单编号查到状态 56 后记录 `confirmed`,后续保持防重。 - 同一编号查到状态 57 且成交量为 0,才记录 `rejected` 并原子占位下一次尝试。旧尝试的废单不能授权新尝试再次重发。 - 不同账户、日期使用不同记录。每次尝试都有写入记录且传给 QMT 的本地订单编号。 状态码依据:[迅投官方委托核对示例](https://dict.thinktrader.net/innerApi/code_examples.html)。撤单、部撤等情况未自动视为可以再次申购。 旧版只有证券名的 `.lock` 文件不再作为新账户的申购记录,避免跨账户锁冲突;首次运行通过当天同证券买入委托防重。升级应在当前账户委托可查询的条件下进行,旧锁本身无法证明归属账户或最终结果。 损坏或无法读取的记录不会触发重新提交;记录写入失败也不会提交。若长期查不到回报,需要先人工核对柜台结果,不能直接删除待确认记录后重跑。 接口响应是 QMT `get_ipo_data()` 的原样转发:以证券代码为键的字典(部分版本再按市场分一层),SDK 在 `sdk/trade.py` 规范化为候选列表并补全 `stock` 全码;空响应表示当日无候选,无法识别的结构抛错并记录,不静默当作"今日无新股"。候选要求完整代码及对应交易所、有限正价格、正整数数量。当前参与板块范围保持不变。