【CJ 进阶续篇 14/30 · 总第 42 篇】

程序最容易犯的错误,是把没有答案的状态强行归到“失败”或“成功”。

请求超时了,不代表订单没有成交;接口返回异常,也不代表仓位已经清空。此时如果系统按失败重试,可能重复下单;按成功继续,又可能漏掉需要处理的敞口。未知状态之所以危险,是因为它会诱使程序假装自己掌握了事实。

更稳妥的做法,是把未知当成一等状态:暂停相关动作,保留请求身份和时间,改用独立查询确认真实结果,再决定恢复、撤销还是人工介入。等待确认的时间也应该被监控,而不是永远挂着。

查到结果以后,也不能跳过原来的请求身份。先确认查询结果对应哪张订单,再处理剩余部分,才能避免把另一张相似订单当成答案。恢复的依据必须是已经确认的事实,而不是等待太久以后作出的猜测。

交易系统不可能消灭所有未知,但可以避免在未知里继续扩大风险。承认“不知道”,有时是最专业的自动化动作。

下一篇:部分成交最容易把一条对冲拆成两种风险。

#状态机 #系统可靠性