11.7 监控与告警
课前导读
本章目标
学完能解决什么困惑:你将理解为什么实盘系统不能只看收益曲线,还要像家里安装火警报警器一样,提前发现断网、延迟、数据异常、订单失败和回撤超限。
适合谁学习:已经理解组合、回测和实盘架构,准备把策略放进真实 A 股交易环境的新手投资者。
难度:advanced
用时:约 40 分钟
知识正文
先想一个生活场景。
你住在一栋楼里,平时不会盯着厨房看火苗。
但你会希望厨房有火警报警器。
它不是为了让你每天紧张。
它是为了在烟雾刚出现时,把问题从“小麻烦”拦在“大事故”之前。
实盘量化系统也是一样。
策略就像厨房里的炉灶。
数据、网络、订单、仓位、资金,就像燃气、电线、锅具和排风。
只要其中一个环节失控,系统就可能从“正常交易”变成“带病运行”。
监控与告警,就是实盘系统里的火警报警器。
它不负责预测明天涨跌。
它负责回答一个更底层的问题:
系统现在还能不能安全地执行原来的计划?
1. 从“盯盘”到“盯系统”
很多新手把实盘监控理解成“看行情”。
例如盯着上证指数、个股涨跌幅、持仓盈亏。
这些当然重要。
但量化实盘还需要盯系统本身。
因为亏损不一定来自策略判断错误。
也可能来自行情数据迟到、网络断开、订单没有回报、风控模块没有及时拦截。
如果你只盯收益,就像只看锅里的菜有没有糊,却不看燃气阀门是否漏气。
真正的监控要覆盖三个层面。
第一层是环境是否活着。
第二层是数据是否可信。
第三层是交易行为是否越界。
这三层组合起来,才是实盘系统的安全仪表盘。
graph TD
A[实盘系统运行] --> B[环境监控]
A --> C[数据监控]
A --> D[交易监控]
B --> E[网络与服务是否在线]
C --> F[行情与账户数据是否可信]
D --> G[订单与风险是否越界]关键心得
监控不是为了制造焦虑,而是为了让问题在可控范围内被发现。
2. 什么是告警分级
告警分级,就是把不同严重程度的问题分成不同响应等级。
就像小区里有烟雾提示、火警铃声、紧急疏散广播。
不是所有异常都要立刻停掉系统。
但也不是所有异常都可以等晚上再看。
实盘中常见的分级可以理解为三类。
提醒级:需要记录和观察,但不一定立刻干预。
例如某只持仓的行情延迟 2 秒,随后恢复。
警告级:需要尽快确认,可能影响交易质量。
例如订单连续两次被拒,或者数据源出现短时间缺口。
紧急级:需要立即暂停、降级或人工接管。
例如网络断开、账户资金异常、组合回撤超过预设上限。
这里的重点不是名字,而是响应动作。
没有响应动作的告警,只是噪音。
有分级、有责任人、有处理时限的告警,才是安全机制。
3. 断网:最朴素也最危险的故障
A 股交易时间集中,上午和下午各有一段连续交易。
如果系统在 9:30 到 11:30 或 13:00 到 15:00 之间断网,影响会非常直接。
行情可能无法更新。
订单状态可能无法确认。
风控模块可能拿不到最新持仓。
此时最危险的不是“没有交易”。
最危险的是系统以为自己仍然在正常交易。
因此断网监控至少要回答三个问题。
第一,行情连接是否正常。
第二,账户或交易通道的状态是否正常。
第三,系统是否能在连接异常时停止新增风险。
风险提示
本课程只讲监控思想,不提供真实券商接口连接步骤,也不提供可直接用于实盘的自动下单实现。
4. 延迟:慢几秒也可能改变成交质量
延迟不是完全断开。
它更像火警报警器电量不足,声音还在,但反应慢了。
在 A 股里,部分股票在开盘、临近午盘、尾盘集合竞价前后会出现成交活跃变化。
如果你的信号依据的是 10:00 的行情,但系统 10:00:05 才处理完成,实际成交价格可能已经变了。
延迟监控不是要求每一次都零延迟。
而是要知道延迟是否超过策略能承受的范围。
不同策略的容忍度不同。
低频调仓策略可能能接受分钟级处理。
日内更敏感的策略则不能把几秒延迟当小事。
你需要监控行情到达时间、信号生成时间、订单提交时间、订单回报时间。
把它们连起来,才能看见真实链路。
graph LR
A[行情到达] --> B[信号计算]
B --> C[风控检查]
C --> D[订单提交]
D --> E[订单回报]
E --> F[持仓更新]5. 数据异常:看似价格,实则陷阱
数据异常是新手最容易低估的风险。
例如某只股票价格突然显示为 0。
例如成交量缺失。
例如指数行情已经更新,个股行情还停留在上一分钟。
例如除权除息后,复权口径没有同步。
如果策略直接相信这些数据,可能会得出荒唐信号。
一个均线策略可能因为缺失价格而误判趋势断裂。
一个仓位模型可能因为净值计算错误而误以为风险很低。
所以数据监控要先问:这条数据像不像正常世界里会出现的东西?
不是所有异常都能被规则完全识别。
但常见异常必须被拦截。
例如空值、重复时间戳、价格跳变过大、成交量负数、停牌股票仍然生成买入信号。
6. 订单失败:没有成交不等于没有风险
很多新手以为订单失败只是“没买上”。
但实盘里,订单失败会让组合偏离原计划。
例如策略计划买入 5 只股票,每只 20% 仓位。
其中 2 只因为涨停、停牌、价格不合规或账户限制没有成交。
最终组合只买了 3 只,集中度就变高了。
如果系统没有识别订单失败,后续风险计算仍按 5 只股票处理,就会出现账面与现实不一致。
订单监控应至少记录四类状态。
已提交。
部分成交。
全部成交。
失败或撤单。
每种状态都要能进入后续处理。
例如部分成交后是否补单。
失败后是否放弃。
撤单后是否重新评估。
这些规则必须在盘前写清楚,而不是盘中情绪化决定。
7. 回撤超限:投资层面的火警
前面讲的是系统故障。
回撤超限则是投资风险告警。
回撤可以理解为账户净值从近期高点往下掉了多少。
如果组合从 100 万涨到 110 万,又跌到 99 万,最大回撤不是 1%,而是从 110 万到 99 万的下跌幅度。
在实盘中,回撤超限并不一定代表策略失效。
但它一定代表你需要停下来确认。
市场环境是否变化?
组合是否过度集中?
单只股票是否出现极端波动?
交易成本是否高于预期?
如果回撤告警被忽略,策略可能会在最脆弱的时候继续加码风险。
关键心得
回撤告警不是“认输按钮”,而是“暂停确认按钮”。
8. A 股案例:午后断连与错误追单
假设你运行一个低频 A 股轮动策略。
策略每天根据收盘前的信号调整少量仓位。
某天 13:20,行情数据源出现短暂断连。
系统没有监控到异常,仍使用 13:19 的旧价格计算信号。
13:25,网络恢复,策略发现目标股票已经上涨,便按旧逻辑继续提交买入。
结果买入价格明显高于预期。
更糟的是,原本应该卖出的股票订单因为状态回报延迟,没有被确认。
组合一度出现仓位偏高。
这个案例里,策略思想本身未必错。
真正的问题是系统没有在“数据不新鲜”和“订单状态不明”时暂停新增风险。
如果有监控,流程应该是这样。
graph TD
A[行情延迟超过阈值] --> B[触发警告级告警]
B --> C[停止生成新买入信号]
C --> D[等待数据恢复]
D --> E[重新计算信号]
E --> F[人工确认是否继续执行]9. 告警也需要防止过载
如果系统每分钟发几十条消息,投资者很快会麻木。
告警过载就像火警报警器太敏感,炒菜冒一点烟就狂响,最后大家会把电池拆掉。
所以告警设计要避免三个问题。
第一,重复告警不合并。
同一个数据源延迟,不需要每秒发一条。
第二,低级别问题升级条件不清楚。
提醒级如果持续 10 分钟,可能就该升级。
第三,告警没有恢复通知。
问题恢复后也要记录,否则复盘时不知道异常持续多久。
10. 可执行的监控设计步骤
你可以按以下顺序设计自己的监控。
先列出系统里最怕发生的五类事故。
再为每类事故找到可观测指标。
然后给指标设置正常区间和异常阈值。
接着定义告警等级。
最后写清楚每个等级对应的动作。
动作要具体。
例如“通知我”不够具体。
“暂停新增买入信号,保留卖出和撤单处理,记录异常开始时间,由人工在 5 分钟内确认”才是可执行动作。
11. 一段安全伪代码
下面只是监控逻辑示意,不是实盘接口实现。
如果 行情更新时间 距离当前时间 超过允许范围:
标记为 数据延迟
暂停新增买入信号
记录告警等级和开始时间
如果 订单失败次数 连续超过预设次数:
标记为 订单异常
停止重复提交同类订单
请求人工复核
如果 组合回撤 超过盘前设定上限:
标记为 风险超限
暂停加仓动作
进入复盘流程这段伪代码的核心不是技术语法。
核心是“先保护系统,再追求收益”。
交互实验室
本节的交互产物是一张告警分级表。
请把它复制到你的交易日志或策略说明文档里,并根据自己的策略频率调整阈值。
| 告警对象 | 观察指标 | 提醒级 | 警告级 | 紧急级 | 建议动作 |
|---|---|---|---|---|---|
| 网络连接 | 行情与账户连接状态 | 短暂抖动后恢复 | 连续多次连接失败 | 交易时段完全断开 | 暂停新增风险,确认连接后再恢复 |
| 行情延迟 | 最新行情时间与当前时间差 | 轻微落后 | 超过策略容忍范围 | 长时间无更新 | 停止使用旧行情生成新信号 |
| 数据异常 | 空值、重复、跳变 | 单条异常 | 多只股票异常 | 核心数据源异常 | 启用备用数据或暂停计算 |
| 订单失败 | 拒单、废单、无回报 | 偶发失败 | 连续失败 | 状态无法确认 | 停止追单,人工核对账户 |
| 回撤风险 | 组合净值回撤 | 接近阈值 | 达到阈值 | 明显超过阈值 | 暂停加仓,进入风险复盘 |
练习步骤如下。
选择你最关心的一个策略。
写出它最依赖的三类数据。
写出它最不能接受的两类系统故障。
为每类故障设置一个“提醒级”和一个“紧急级”。
给每个等级写出具体动作。
检查动作里是否出现“看情况再说”。
如果出现,把它改成可以执行的句子。
示例填写:
| 场景 | 我的阈值 | 我的动作 |
|---|---|---|
| 行情延迟 | 超过 60 秒 | 暂停新买入信号,保留风险降低动作 |
| 单日回撤 | 接近预设上限 | 降低观察频率之外的交易冲动,记录原因 |
| 订单失败 | 同类订单连续失败 | 不重复追单,先核对失败原因 |
练习提醒
告警表不是写给机器看的,而是写给未来紧张、疲惫、容易冲动的自己看的。
核心复盘
知识清单:
- [ ] 我能用“火警报警器”解释监控与告警的作用。
- [ ] 我知道实盘监控不只看收益,还要看环境、数据和交易行为。
- [ ] 我能区分提醒级、警告级、紧急级告警。
- [ ] 我理解断网、延迟、数据异常、订单失败都会让策略偏离原计划。
- [ ] 我知道回撤超限是投资层面的暂停确认信号。
- [ ] 我能为自己的策略写出一张告警分级表。
金句总结
实盘系统能活下来,不是因为它从不出错,而是因为它能在小错变成大错前及时报警。