期货夜盘无人值守监控什么:断线、无成交与拒单信号 前言国内很多商品期货、部分金融期货都有夜盘晚上九点到凌晨一两点仍在交易而交易员已经下班。所谓无人值守就是策略进程在服务器上继续跑没有人盯着屏幕。这时最怕的不是均线算错而是几类静默故障行情其实已经断了但程序还在空转、单子挂在交易所一整天没人成交、或者柜台连续拒单而策略还以为在正常运行。第二天开盘才发现往往已经错过处理窗口。天勤 TqSdk 的程序通常靠wait_update()推进每调用一次就从服务器收一批行情和交易回报更新内存里的对象。监控的核心是把这些对象里几个关键字段是否还在正常变化转成可告警的信号。下面按行情、进程、委托成交、资金风控四块说明夜盘该看什么、英文字段名在天勤里指什么、阈值怎么设才不至于误报。一、先弄清要盯的几个天勤对象你看到的英文/代码名在天勤里是什么夜盘监控用它干什么quote某合约的实时行情快照由api.get_quote(合约代码)得到看价格时间是否还在走quote.datetime该行情快照对应的业务时间由行情服务写入不是本机时钟判断行情是否停更symbol合约代码字符串如SHFE.rb2510上期所螺纹钢某月份多品种时要逐个盯get_order()返回当前账户委托单字典key 为委托号看挂单是否僵死status委托状态ALIVE表示仍在交易所有效、未完全成交也未撤完筛在途单volume_left该委托还剩多少手没成交挂单长时间不变要告警last_msg柜台返回的委托状态说明文字拒单时常有原因统计拒单关键词is_error天勤标记是否为错单文档提醒为 False 也不代表一定没错回报可能在途辅助判断拒单get_position(合约)该合约持仓对象看仓位是否长期不变pos.pos净持仓手数正为多、负为空与信号对照get_account()资金账户对象看风险度、权益risk_ratio风险度文档定义为保证金除以账户权益是否接近满仓emergency策略里自定的紧急标志变量名非天勤内置表示已进入强平/停机流程避免重复开仓TqApi天勤与行情、交易服务建立连接的主对象常写作变量api全程序应只有一个实例二、行情是否还活着监控逻辑在交易时段内若某合约的quote.datetime或 K 线表最后一行的datetime超过若干分钟不更新说明要么休市正常、要么断线或订阅丢失异常。休市时 datetime 本来就不会跳所以要配交易日历或交易时段过滤避免凌晨休市误告警。交易时段内常用阈值是五到十分钟无更新则打一条告警日志并尝试api.close()后由外部守护进程重启。实现上可在is_changing(quote, datetime)为真时记录last_seen[symbol] time.time()另起轻量定时检查与当前时间差。也可对wait_update(deadline时间戳)设超时deadline 是 Unix 时间超过则函数返回 False表示这一帧长时间没收到业务包适合记一条“心跳超时”日志用法见官方文档不宜把 deadline 设得过小。三、连接与进程systemd、supervisor、Api 指什么进程外要确认 Python 进程还在。Linux 服务器上常用 systemd系统自带的服务管理器或 supervisor第三方进程守护工具配置成进程崩溃自动拉起、且同一策略只跑一个实例。Windows 上可用计划任务或服务原则相同。进程内要确认只有一个TqApi实例。重复创建而不close()会叠多个连接表现为内存上涨、行情乱跳。Jupyter 里反复运行单元格最容易犯这个错服务器上则是部署脚本启动了两次。内存持续涨也要查是否缓存了巨大 DataFrame、是否在循环里追加日志不轮转。这些不属行情断线但会导致 eventually 卡死。四、成交与委托ALIVE、volume_left 为什么要一起看策略发出目标仓后天勤会在后续wait_update里通过TargetPosTask或insert_order真正报单。监控要看委托对象get_order()返回的每一项status ALIVE单还在场上排队或部分成交中。若从夜盘九点挂到十点volume_left一直等于初始手数、一点没减少说明价格可能太远或流动性太差需要告警而不是干等。last_msg出现资金不足、非交易时段、价格非法等字样应计数一夜拒单次数突增比单笔拒单更危险。is_error为真时按错单处理记录完整last_msg备查。同时看持仓若日志里已有开仓信号但get_position(symbol).pos一小时不变可能是拒单、熔断未处理、或 task 没在set_target_volume后继续wait_update。这三类原因排查路径不同都要靠日志里的order_id与last_msg区分。五、资金与风控字段account.risk_ratio接近 1 表示保证金占权益比例很高夜盘波动一大容易追保或拒单。可设阈值如 0.85 先告警、0.95 触发减仓。emergency若是你在代码里定义的紧急状态例如当日回撤超限后置 True监控应确认进入 emergency 后是否还有新开仓日志若有说明信号层未正确冻结。日初权益day_start_balance若在夜盘日切后未重置会把前一天基准带到今天导致回撤计算失真。夜盘跨越自然日时要在团队约定的时间点重记日初权益。六、TqNotify 与日志落地天勤在tqsdk.lib提供TqNotify以你本地reference/tqsdk.lib.rst为准在wait_update循环里收集柜台相关通知再统一交给一个dispatch函数全量写文件仅严重级别发钉钉或短信。避免每笔成交都推即时消息夜盘会被刷屏。建议结构化日志至少包含时间戳、合约 symbol、事件类型、委托号 order_id、status、last_msg、pos.pos。事后复盘不用猜英文字段对应什么。七、夜盘特有场景夜盘结束到日盘开盘之间策略是否应暂停自动开仓要在配置里写死不能依赖 K 线 datetime 自动分辨。小品种夜盘流动性差ALIVE单挂很久不成交较常见监控项应包含“有单无成交持续时长”。上线前在模拟盘人为断网一次看告警能否在预期时间内触发比真到夜盘才第一次验证可靠得多。总结夜盘无人值守真正要做的是把‘人不盯盘就容易忽略’的静默故障提前变成可见信号行情是否还在动、委托是否卡住、拒单是否异常、风险是否越线。监控要同时覆盖程序内与程序外主循环读 quote/order/position/account 把证据写入日志进程外用 systemd 或 supervisor 保活避免崩溃后长时间没人发现。更关键的是区分休市与交易时段防止因为 datetime 不推进造成误告警同时把 ALIVE 无成交、last_msg 拒单关键词突增等指标做成可解释阈值。通过这样的闭环策略即使在深夜运行也能把不确定性控制在可响应范围内并在第二天开盘前把问题定位清楚。FAQ1休市时也告警行情不更新怎么办用交易日历或 quote 交易时段判断休市不报。2TqNotify 会漏消息吗主循环若长时间阻塞在 sleep 或同步 IO通知也会延误勿在 wait_update 之间长时间卡住。3多策略同机怎么区分日志每条日志加 strategy_id 前缀拒单率分策略统计。4云服务器还要额外监控吗进程外可用简单 HTTP 心跳或磁盘空间监控与程序内监控互补。风险提示以上内容用于期货程序化运维参考不构成投资建议。