为什么量化系统做好了却不敢用?
我自己的量化系统做了挺久:数据能拉,因子能算,报告能出,交互和性能也都过得去。但到现在,我没开过一次实盘。
不是回测结果难看。是无论结果好看难看,我都说不清那个数是不是真的。
数据错、复权错、撮合错、未来函数、过拟合——这五件事任意一件出问题,回测都会给我一个漂亮的数,而且它们在报告上的样子一模一样。我自己分不出来,换个人也分不出来。
系统VS策略
卡了很久之后我发现,纠结的问题始终是:"这个结果不行,是系统的问题还是策略的问题?"
然而,认真思考下来,发现这是一个没有绝对答案的问题。
系统和策略两层之间本来就没有清晰边界:撮合价的假设写在系统代码里,决定的却是策略的含义;一个策略失效和一段数据错掉,输出的样子也几乎一样。
但换个角度,这个问题的拆分方式也不是完全没用,只是用错了地方。拿它做归因,谁也归不出来;拿它做分区,它很好用。
我要做的不是判断问题出在哪一层,而是每一层的假设和设计是否符合预期,因为任何系统都无法完美地复刻复杂的真实市场,相比于完美但黑盒的系统,我更愿意相信不完美但透明的设计,前者看似诱人但不可控,后者虽不性感但可控。
系统的边界
系统能做的:
- 可重复——同一份数据加同一份代码,跑出同一个回测
- 可交叉验证——已知输入给已知输出。比如"买 100 股、持有一天、收盘价成交",这个收益我能口算,系统输出差超过 0.1% 就是 bug
- 有边界——我清楚哪些结论我能验证,哪些不能
系统不会也不应该做的:
- 未来是否赚钱——这是市场的事
- 100% 证明自己没有 bug——总有边界 case
- 替代经验直觉——很多 quant 的经验是隐性知识,工程化不了
工程意义上的"信",信的从来不是结果,是边界。我不需要相信这套系统能赚钱,我只需要知道它每一处的假设是不是被思考设计过。
对照参考清单
约束限制:A股市场,日级别
整个系统做下来,深刻觉得必须要理解系统的局限性,才能正确地对待系统产出的结果,不盲从,也不多疑。以下均为经验之谈,仅供参考:
系统层前提
1. 数据语义契约(字段语义 + 数据可用日)
- 是什么:每个字段"什么算什么不算",以及"什么时候能拿到"
- 为什么必要:不同数据源的字段名一样、含义不一样;财务因子不是发布日就能用,实盘有 N 天延迟
- 不做会失真:拿今天的数据算昨天的收益,就是前视偏差;字段错了,回测的股票池会偷偷变,跑出来的是幸存者偏差
2. 计算口径(复权 + 因子公式的精确数学定义)
- 是什么:复权选前复权、后复权还是不复权;每个因子公式的精确数学定义
- 为什么必要:因子必须和价格口径一致;同一个因子换一种实现,结果可能差 5%
- 不做会失真:除权日因子值跳变,信号不稳;你跑出来的回测和别人对不上
3. 成交价与滑点(成交价假设 + 摩擦)
- 是什么:信号触发后按什么价成交(开盘 / 收盘 / VWAP),假设多少 bps 的摩擦
- 为什么必要:信号定义和撮合价必须配套,否则算的是两个策略
- 不做会失真:回测和实盘的成交价差出好几个点;小摩擦下算出来的 alpha,实盘摩擦一口吃光
4. 涨跌停与可成交性(规则清单 + 一字板 + 拒单在仓位上怎么办)
- 是什么:主板、创业、科创、ST、北交各自的涨跌停;一字板拒单怎么处理;涨停日能不能开新仓,跌停日能不能卖出
- 为什么必要:A 股规则不统一——主板 10%、创业 20%、ST 5%、北交 30%;一字板当天挂着单也成交不了
- 不做会失真:回测里买得到的票,实盘买不进,算出来的是假 alpha;跌停日卖不掉,实际仓位和策略的预期脱节
5. 脏数据判定(标准 + 修复还是剔除)
- 是什么:什么算脏、脏了之后是修复还是剔除、阈值怎么定
- 为什么必要:这是软选择,靠经验,但必须显式——每一个阈值都是一个决定
- 不做会失真:静默修复就是静默失真;脏数据混进因子计算,几个月后才发现
6. 时间结构(调仓频率 + 样本期划分)
- 是什么:日调仓还是周、月调仓;in-sample / out-of-sample 怎么切
- 为什么必要:调仓频率直接决定摩擦的量级;样本期怎么切,决定样本外验证里有多少是偶然
- 不做会失真:回测很漂亮,实盘被摩擦吃光;样本外看着还行,其实是运气
策略层限制
7. 流动性与容量(对手盘 + 规模上限)
- 是什么:策略能跑多大的规模——单股上限加组合上限
- 为什么必要:A 股小盘股可能没有足够的对手盘;个人 100 万没问题,机构 1 亿就失效
- 不做会失真:拿小资金的回测去指导大资金,严重错估
8. 信号稳定性(样本外 + 衰减)
- 是什么:信号在样本外是否还成立;衰减到什么程度该退役
- 为什么必要:样本内漂亮样本外不行,是过拟合;衰减到摩擦以下的信号是负 alpha
- 不做会失真:拿一个已经衰减的信号继续跑,等于送钱
9. 组合层面(多策略相关性 + 仓位管理)
- 是什么:多策略之间的相关性,以及单股、行业、组合的仓位上限
- 为什么必要:以为在分散,实际是同一批因子在几只票上重复押注;单股 50% 就是高杠杆
- 不做会失真:组合没分散,回撤放大,实盘的心理扛不住
10. 因子拥挤度
- 是什么:同一个信号被多少人用
- 为什么必要:5 家在用没问题,500 家在用归零
- 不做会失真:年化慢慢缩水,你以为策略失效,其实是市场变了
11. 策略元层(成立前提 + 失效与变化的区分)
- 是什么:把每个策略的成立前提显式写下来;区分"策略失效"和"市场变化"
- 为什么必要:前提失守却不知道,就会一直调参,而调参不等于想明白
- 不做会失真:把该退役的策略当成需要调参的策略,越调越偏
跨层耦合
12. T+1 × 信号频率
- 是什么:T+1 把信号频率强制降速,高频信号在这里跑不通
- 为什么必要:信号频率和成交时延是耦合的,改频率等于改策略含义
- 不做会失真:你以为在跑原来的策略,实际跑的是它的退路
对量化系统保持清醒
它是个工程系统,不是预测系统。能 100% 验证的只有"代码做了它说要做的事",别的都给不了——包括"这个策略能不能赚钱"。
量化的根本问题从来不是"有没有一个能赚钱的系统",是"我能不能持续迭代出一个可重复、有边界、不被自己骗的工程化输出",它只是工具,不是造钱的机器,量化真正做下来挑的从来不是天赋,而是纪律。
寒蝉 Hancic


