期货程序化交易断线重连与订单状态同步
免责声明:本文基于个人使用体验,与任何厂商无商业关系。内容仅供技术交流参考,不构成投资建议。
一、前言
实盘运行中网络断线、进程重启后,需要重连并同步账户与订单状态,避免重复下单或漏单。做了多年期货程序化,我总结了一些断线重连与状态同步的实践。
今天分享期货程序化交易中断线重连与订单状态同步的思路和注意点。
二、断线重连思路
# 1. 检测断线:api 异常、心跳超时等# 2. 关闭旧连接、等待一段时间# 3. 重新创建 api、重新订阅行情与账户# 4. 同步持仓与挂单状态后再继续策略逻辑三、重连示例(框架)
fromtqsdkimportTqApi,TqAuth,TqAccountimporttimedefrun_with_reconnect(max_retries=5):foriinrange(max_retries):try:api=TqApi(TqAccount("期货公司","账号","密码"),auth=TqAuth("账户","密码"))klines=api.get_kline_serial("SHFE.rb2510",300,500)position=api.get_position("SHFE.rb2510")account=api.get_account()whileTrue:api.wait_update()# 策略逻辑...passexceptExceptionase:print(f"断线或异常:{e}, 第{i+1}次重连")try:api.close()except:passtime.sleep(10)print("重连次数用尽,退出")四、订单状态同步
# 重连后必须做的:# 1. 重新获取 account、position,以实盘为准# 2. 查询未完成订单(如有接口),避免重复发单# 3. 策略内部状态(如“已发开仓单”)要以最新持仓为准做校正# 示例:用当前持仓校正策略状态position=api.get_position("SHFE.rb2510")current_long=position.pos_long current_short=position.pos_short# 策略内“认为的持仓”要与 current_long/current_short 对齐后再发新单五、注意点
# 1. 重连间隔不宜过短,避免频繁重连# 2. 重连后先同步持仓与资金,再恢复策略逻辑# 3. 未完成订单要以交易所/柜台为准,必要时撤单重来# 4. 日志记录断线时间、重连次数,便于排查六、总结
断线重连要有关闭旧连接、等待、重新建连、重新订阅的流程;重连后必须以最新账户与持仓为准做状态同步,再继续下单。天勤等接口在重连后重新 get_position、get_account 即可拿到最新状态。我目前实盘会包一层重连与状态同步逻辑。量化交易有风险,断线处理只是稳定性的一环,策略和风控才是核心。
声明:本文基于个人学习经验整理,仅供技术交流参考,不构成任何投资建议。
