断线和异常,处理代码要写在最外层
发布时间:3小时前阅读:14
策略跑了一周都正常,某天下午网络抖了一下,之后账户出现两笔重复委托。这类事故的根源往往不是网络,而是异常处理写得不对。
一、断线时的状态是未知的
连接断开的那一刻,你的委托可能已经发出但没收到回报,也可能根本没发出去。这两种情况在本地看起来完全一样。
如果处理逻辑是"断线就重连然后重发",就可能产生重复下单。正确做法是重连后先查委托列表和持仓,用服务器状态对齐本地状态,再决定是否需要重发。
二、异常处理要分层
最外层兜住所有未捕获异常,记录完整堆栈,然后让策略安全退出,而不是带着错误状态继续跑。
中间层处理可预期的异常:取数失败重试、委托超时撤单重发、回报延迟轮询。这些要有次数上限,不能无限重试。
内层不写异常处理,让问题向上冒泡。到处捕获异常会让真正的错误被吞掉。
三、幂等设计
每笔委托生成唯一标识,重发时带同一个标识。服务器据此判断是否重复,这是防重复最有效的手段。
如果没有这个机制,就在本地记录已发委托,重连后先比对再补发。
四、心跳和超时
长时间没有行情推送,未必是市场没成交,可能是连接已经断了但没报错。设置心跳检测,超过一定时间没有数据就主动重连。
五、退出要干净
策略停止时,先撤掉所有未成交委托,记录当前持仓和状态,再退出。直接杀掉进程,会留下一堆孤儿委托,第二天开盘可能被动成交。
六、告警要能触达
异常记录下来不等于你会看到。关键错误要推送到手机,比如连接断开超过五分钟、连续三笔委托被拒、当日亏损超过阈值。
七、定期演练
手动断一次网,看策略能不能自己恢复;手动撤掉一只标的的数据源,看会不会崩。演习过的问题,真发生时不会慌。
八、一个具体的判断标准
上线之前问自己三个问题:断电重启后策略能不能自己恢复持仓状态;某只标的取数失败会不会让整个策略崩溃;出现一次异常委托会不会导致后续所有信号错位。
三个问题的答案都是"能",异常处理才算及格。
异常处理不好看,也不产生收益。但它决定了你的策略能不能连续跑一年。
股票开户欢迎找我!可以申请万0.854的股票佣金、etf 可转债佣金万0.5、国债逆回购一折(百万分之一)!量化软件QMT+ptrade免费使用!还有888、999资金靓号等你选!
温馨提示:投资有风险,选择需谨慎。



问一问
从业认证

+微信
分享该文章
