跳转到内容

监控与事故复盘

系统监控(进程、内存、API 连通性)只是底线。量化系统真正要监控的是:实盘表现是否偏离回测预期——偏离是策略失效、数据故障或执行问题的最早信号。

每日收盘后自动执行:

  1. 持仓对账:实盘持仓 vs 策略目标持仓 vs 券商账户记录,三者应一致;
  2. 滑点对账:每笔成交的成交价 vs 信号时刻的价格(滑点分布);
  3. 收益对账:策略实盘收益 vs 同期模拟收益(影子回测,见研究到生产的一致性)。
reconciliation.py
import numpy as np
import pandas as pd
def daily_recon(live_pos: pd.Series, target_pos: pd.Series,
slippage: pd.Series, baseline: float = 1.0) -> list[str]:
"""每日对账:返回告警列表"""
alerts = []
pos_gap = (live_pos - target_pos).abs()
if (pos_gap > 1e-6).any():
alerts.append(f"持仓偏差: {pos_gap[pos_gap > 1e-6].to_dict()}")
if slippage.std() > 3 * baseline * slippage.expanding().std().iloc[-2]:
alerts.append(f"滑点分布突变: 今日 std={slippage.std():.4f}")
return alerts
指标告警含义
滑点分布突变(均值/方差跳变)执行问题或市场流动性变化,往往先于策略失效
实盘收益与影子收益的差距扩大信号执行不一致或数据故障
目标持仓偏差持续未收敛OMS 或数据链路问题
成交量占比异常上升容量问题,见回测引擎设计

告警阈值不要用固定值:滑点、偏差的"正常水平"随市场变化,用滚动分布(如 3 倍滚动标准差)判定异常。

事故复盘的目的不是追责,是把一次性教训变成永久性检查。模板:

  1. 发生了什么:时间线、影响金额、影响范围;
  2. 根因:数据、代码、执行、制度——归因到"哪一层缺失";
  3. 为什么没有更早发现:监控盲区在哪,哪个指标本可以更早告警;
  4. 修复:代码/流程修复 + 新的检查清单条目(这是复盘的真正产出)。
  • 每日三类对账自动化,异常即告警;
  • 滑点分布突变作为策略失效的领先指标重点监控;
  • 每次事故产出检查清单条目,进入风控或监控。
  • 每日对账:实盘持仓 vs 目标持仓 vs 券商账户
  • 滑点分布突变往往先于策略失效,是最重要的领先指标
  • 每次事故写复盘,产出进入检查清单