2. 算法执行基础
算法执行风险控制的第一步,不是写风控规则,而是把算法从“策略想法”到“真实成交”的完整链路拆开看清楚。只有明确算法在什么阶段、什么环境下、以什么模式运行,以及哪些指标会先于事故发生变化,后续的异常处置才有抓手。本节围绕算法生命周期、执行环境、关键指标、常见执行模式与风险来源五个方面展开,为后续章节的监控、熔断与复盘建立共同语言。
一、算法生命周期:从研究到退役的六个阶段
算法并非“上线即完成”,它更像一个有生命周期的生产系统。典型生命周期可划分为六个阶段:研究回测、仿真验证、灰度上线、全量运行、监控调优、退役下线。每个阶段的输入、输出与风险特征都不同。
- 研究回测:验证逻辑有效性,风险在于过拟合、幸存者偏差、未来函数。
- 仿真验证:接入实时行情但不下真实单,风险在于仿真撮合与真实撮合差异。
- 灰度上线:小资金、小仓位、限定标的,风险在于参数未适配真实流动性。
- 全量运行:策略按目标规模执行,风险集中在容量、延迟与市场冲击。
- 监控调优:根据实盘表现调整参数,风险在于频繁调参导致策略漂移。
- 退役下线:逐步减仓并停止信号,风险在于退出过程中的流动性与敞口残留。
二、执行环境:算法运行的四个关键层面
算法执行环境决定了策略“能不能跑、跑得多快、跑得准不准”。可以从四个层面理解:
- 硬件与网络层:服务器位置、网络延迟、时钟同步、冗余链路。
- 系统与中间件层:操作系统、消息队列、数据库、行情与交易网关。
- 算法运行层:策略进程、参数配置、状态存储、日志与监控埋点。
- 市场与合规层:交易所规则、涨跌停、最小变动单位、报撤单限制。
很多“算法异常”其实不是算法逻辑错,而是环境层出了问题。例如行情时间戳错乱、交易网关重连、系统时钟漂移,都会让算法在错误的时间做出正确的计算。下面是一段典型的执行环境配置片段:
execution:
gateway: "ctp_prod"
market_data: "level2_udp"
clock_sync: "ntp:10.0.0.1"
max_order_rate: 50 # 每秒最大报单数
cancel_ratio_limit: 0.8
reconnect:
retry: 5
backoff_ms: 200
三、关键指标:算法执行的“仪表盘”
算法执行不能只看盈亏。盈亏是结果,指标是过程。过程指标先恶化,结果才会恶化。常用关键指标可分为四类:
| 类别 | 指标 | 含义 | 异常信号 |
|---|---|---|---|
| 执行质量 | 滑点、成交率、撤单率 | 实际成交与预期的偏差 | 滑点突增、撤单率接近上限 |
| 系统性能 | 延迟、吞吐、丢包率 | 算法与市场的交互效率 | 延迟抖动、行情丢包 |
| 风险敞口 | 净头寸、集中度、杠杆 | 当前暴露的风险规模 | 头寸超限、单标的集中 |
| 行为合规 | 报撤单频率、自成交 | 是否符合交易所规则 | 频繁报撤、疑似自成交 |
四、常见执行模式与风险来源
算法执行模式决定了风险的类型。常见模式包括:
- 市价单执行:追求成交确定性,风险是冲击成本与滑点。
- 限价单执行:追求价格优势,风险是未成交与逆向选择。
- TWAP/VWAP:按时间或成交量拆分,风险是行情突变时仍机械执行。
- 冰山/隐藏单:减少市场影响,风险是暴露后引发跟单。
- 做市/双边报价:赚取价差,风险是库存累积与单边行情。
风险来源可以归纳为五类:市场风险(价格跳空、流动性枯竭)、模型风险(参数失效、逻辑缺陷)、系统风险(延迟、断连、进程崩溃)、操作风险(误配置、误触发)、合规风险(违反报撤单与自成交规则)。理解这五类来源,才能在异常处置时快速定位。
五、案例与复盘:一次“正常”的异常
某量化团队在开盘后 15 分钟发现策略成交率骤降,滑点扩大。初步排查算法逻辑无异常,最终定位为行情源切换后时间戳精度从毫秒变为秒,导致信号计算使用了过期价格。算法本身没有错,但执行环境变化未被监控覆盖。复盘结论有三点:
- 行情源切换必须纳入变更管理,并同步更新监控阈值。
- 时间戳精度、延迟分布应作为独立指标持续监控。
- 异常处置不能只看算法层,要按“环境—系统—算法—市场”顺序排查。
掌握本节内容后,读者应能画出自己算法的执行链路图,标注每个节点的输入输出、关键指标与潜在风险来源。这张图将成为后续异常处置与熔断设计的起点。