第二章:投研流程设计——从数据获取到策略上线的全链路
大家好,我是老周。今天咱们聊聊投研流程怎么搭。
说实话,我见过太多团队,策略代码写得漂亮,但一上线就崩。为什么?流程没设计好。数据源断了没人知道,因子算错了没人发现,回测和实盘对不上账。嗯,这些坑我都踩过。
今天我把这套流程拆开给你看。从数据怎么来,到策略怎么跑,每一步的关键节点和决策机制,我都会讲清楚。
2.1 全链路流程总览
先看整体。一个完整的投研流程,我习惯分成六个阶段:
- 数据获取——把原始数据拉进来
- 数据清洗——把脏数据处理掉
- 因子计算——从干净数据里提炼信号
- 策略回测——用历史数据验证逻辑
- 模拟交易——在真实市场里跑一跑
- 实盘上线——真金白银干起来
每个阶段之间都有明确的交付物和决策点。说白了,就是上一阶段没做完,下一阶段别想动。
核心原则:流程不是用来限制人的,是用来保护人的。保护你不在错误的数据上浪费一个月。
下面这张图,是我团队现在用的流程框架。你仔细看看:
2.2 数据获取——地基不牢,地动山摇
数据获取是整个流程的起点。我见过最惨的案例:一个团队花了三个月做策略,结果发现数据源里某只股票停牌期间的数据是重复的。回测收益漂亮,实盘直接亏哭。
数据获取阶段,我建议你关注三个维度:
- 数据源可靠性:主数据源 + 备用数据源。别只依赖一家。
- 数据覆盖范围:全市场还是部分标的?频率是日线还是 tick?
- 数据更新时效:盘后数据还是实时推送?延迟多少?
我的习惯:数据进来后,先做一次「数据快照」。把原始数据原封不动存一份,后面不管怎么清洗,都能回溯对比。这个习惯救过我很多次。
2.3 数据清洗——脏数据是策略的毒药
数据清洗,说白了就是「去伪存真」。我团队里有个不成文的规定:清洗代码的代码量,不能少于策略代码。
常见的脏数据问题:
| 问题类型 | 表现 | 处理方法 |
|---|---|---|
| 缺失值 | 某天某只股票没有行情 | 前向填充 / 插值 / 剔除 |
| 异常值 | 价格突然跳变 100 倍 | 3σ 法则 / 百分位截断 |
| 重复数据 | 同一时间戳出现多条记录 | 去重保留最后一条 |
| 对齐问题 | 不同数据源时间戳不一致 | 统一对齐到交易所时间 |
我曾经踩过的坑:有一次因子计算一直报错,查了两天才发现是某只股票在除权除息日的数据没做复权处理。从那以后,我在清洗流程里加了一个「复权检查」步骤。你想想看,这种低级错误,一旦上线就是真金白银的损失。
2.4 因子计算——从数据到信号的转化
因子计算是投研的核心。但很多人忽略了一个关键点:因子计算必须可复现。
什么意思?就是你今天算的因子,和明天算的因子,在同样的数据输入下,结果必须完全一致。这听起来简单,但实际做起来很难。比如:
- 滚动窗口的计算,边界条件处理不当就会差一行数据
- 多线程并行计算,顺序不同可能导致结果微小差异
- 浮点数精度问题,不同机器上结果可能不一样
我团队的做法是:每个因子都写一个单元测试,用已知结果验证。代码大概长这样:
def test_momentum_factor():
# 构造已知数据
prices = pd.Series([100, 102, 101, 105, 110])
# 计算20日动量
result = momentum_factor(prices, window=20)
# 验证结果
expected = 0.10 # (110-100)/100
assert abs(result - expected) < 1e-6
关键节点:因子计算完成后,必须做「因子相关性分析」。如果两个因子相关性超过 0.9,说明它们捕捉的是同一类信号。这时候要么合并,要么剔除一个。否则策略会过度拟合。
2.5 策略回测——别被漂亮曲线骗了
回测是检验策略的试金石。但说实话,回测也是最容易「作弊」的环节。
我见过有人把未来数据用到回测里,回测曲线漂亮得像教科书,实盘直接腰斩。这不是技术问题,是职业道德问题。
回测阶段,我建议你关注三个核心指标:
- 夏普比率——衡量风险调整后的收益
- 最大回撤——策略最惨的时候亏多少
- 胜率与盈亏比——赚钱的交易占比多少,平均赚的钱和亏的钱比是多少
但比这些指标更重要的,是回测的假设是否合理。比如:
- 你的回测考虑了滑点吗?
- 考虑了交易手续费吗?
- 考虑了市场冲击吗?
- 考虑了涨跌停无法成交吗?
如果这些都没考虑,那回测结果就是「理想状态」,和现实差距很大。
我的建议:回测时至少加两档滑点——保守档和激进档。保守档用万分之二,激进档用万分之五。如果两个档位下策略都能赚钱,那实盘才有底气。
2.6 模拟交易——最后的实战演练
模拟交易是回测和实盘之间的桥梁。很多人觉得这步可以跳过,我强烈不建议。
为什么?因为回测是「事后诸葛亮」,模拟交易是「事前猪一样」。回测时你知道历史走势,模拟交易时你不知道下一秒会发生什么。这种心理压力,只有模拟交易能帮你适应。
模拟交易阶段,我关注两个点:
- 与回测的一致性:模拟交易的收益曲线,应该和回测的收益曲线走势相似。如果偏差超过 20%,说明回测假设有问题。
- 系统稳定性:交易接口是否稳定?数据推送是否及时?风控模块是否正常工作?
注意:模拟交易至少跑 30 个交易日。别跑一周就急着上线。市场环境是变化的,一周可能只是运气好。我团队的标准是:模拟交易期间,策略的夏普比率不能低于回测夏普比率的 80%。
2.7 实盘上线——真金白银的考验
终于到了实盘上线。这一步,我建议你分三步走:
- 小资金试水:先拿总资金的 5% 跑一周。看看实际成交和模拟交易有没有差异。
- 逐步加仓:如果小资金运行正常,每周加 10% 的仓位,直到满仓。
- 持续监控:实盘上线不是终点,是起点。每天检查策略表现,每周做一次归因分析。
实盘上线前,还有一个关键动作:应急预案。
比如:
- 如果策略突然亏损超过 5%,自动暂停交易
- 如果交易接口断连,自动切换到备用接口
- 如果服务器宕机,自动发送告警通知
这些不是可有可无的。我见过一个团队,实盘第一天服务器就挂了,因为没有应急预案,眼睁睁看着策略无法交易,当天亏损 3%。
总结一下:投研流程设计的核心,不是把每个环节做到完美,而是让每个环节之间有明确的「交接标准」。数据清洗完,要满足什么条件才能交给因子计算?回测做完,要满足什么条件才能进入模拟交易?把这些标准定清楚,流程就跑起来了。
好了,这一章就到这里。下一章我们聊聊因子研究的具体方法——怎么从海量数据里找到真正有效的信号。
公众号:蓝海数据掘金营,微信deep3321