1. 量化研究的第一步:先想清楚你要解决什么问题
很多人看到"量化研究"四个字,第一反应是写策略、跑回测、看收益曲线。但我在实际做下来发现,真正拉开差距的往往不是策略本身,而是你一开始有没有把自己要解决的问题定义清楚。我见过不少新加入的朋友,上来就抱着某个开源框架研究怎么调参,折腾了两周也没搞清楚自己在找什么信号,最后做出的东西回测漂亮得要命,实盘一跑就露馅。
量化研究,说到底是一套用数据驱动决策的研究方法。它不是为了消灭人的判断,而是把投资决策中那些可以被验证、被重复、被度量的部分,从直觉和情绪里剥离出来,变成可回测的规则体系。这套体系通常包含几个层次:首先是研究标的池怎么选,其次是研究什么样的信号能预测收益,然后是信号怎么组合成仓位,最后是交易执行的细节怎么处理。这四个层次里,每一层都有一堆看似不起眼但决定成败的细节。
所以这篇文章不打算给你一套现成的策略代码,那是害人。我尽量讲清楚一套完整的量化研究工作流——从数据准备、因子研究、回测设计到实盘衔接——每一步该关注什么,有哪些常规文档里不会写的坑。适合那些刚接触量化、或者已经写了一两个demo但总觉得哪里不对的读者。如果你已经有成熟策略,也可以拿我讲的边界条件对照一下自己的系统,大概率能找到几个隐藏bug。
在动手写任何代码之前,我建议先花几天时间把投资逻辑想清楚。不说书面文档,至少在心里能说清楚三件事:我赚的是什么钱?我的优势在哪里?什么情况下这个优势会失效?这三个问题回答不了,后面的一切研究都是自嗨。
2. 数据才是量化的地基:常见数据源与脏数据治理
2.1 数据源怎么选:行情、财务、另类数据各有门道
量化研究的第一步永远是数据。没有数据,一切都是空谈。但数据这块的水非常深,很多人上来就在数据源上栽了跟头。
市面上常见的数据来源大致分三类:行情数据(日线、分时、tick)、财务数据(财报、业绩预告)、另类数据(舆情、资金流、供应链关系等)。对个人研究者或者小团队来说,行情和财务数据是基本盘,另类数据可以作为增强项,但千万不要在初期把大量精力花在另类数据的清洗上——那是个无底洞。
我自己的经验是,先用日线级别的行情数据把研究流程跑通,等策略逻辑稳定了,再逐步提高数据频率。一上来就搞分钟级甚至tick级数据,不仅存储和处理成本高,而且研究周期会被拉得很长,很容易在细节里迷失方向。
选择数据源时,我比较看重三点:覆盖完整性(退市股票有没有保留)、复权处理方式(前复权还是后复权)、字段一致性(同一个个股在不同数据源里的代码和名称是否统一)。这三点决定了你后续做研究时会不会被数据本身的bug反复折磨。
我自己经历过最惨痛的教训是:某个模拟项目X在研究行业轮动时,因为数据源没有包含退市股票,导致幸存者偏差非常严重。回测里看似每年稳定跑赢的行业组合,剔除掉那些后来退市的股票之后,超额收益直接砍掉一大半。这就是典型的数据覆盖不全给研究结果带来的隐性污染。
2.2 脏数据治理:复权、停牌、涨跌停这些坑你必须处理
数据拿回来之后,别急着算指标。第一件事是清洗。量化研究里的脏数据治理,是那种听起来简单、做起来极容易出错、出错之后又极难发现的环节。
先说复权。股票分红送转会导致价格除权,表面上看股价大跌,实际上持仓者没有亏损。如果你直接用未复权的价格数据算收益率,那么分红日那天你的回测里会凭空多出一根大阴线,策略就会在那天自动"止损离场",完全是被数据错误误导的。处理办法是统一用后复权价格做研究,这样历史价格是连续可比的。但要注意,后复权价格会随最新一期分红持续变化,所以你需要固化截断日期,研究哪一段就用哪一段的复权因子,不要混用。
再说停牌。停牌期间没有交易价格,数据供应商通常会沿用停牌前最后一日收盘价,或者填充空值。拿这种数据计算收益率时,要特别小心停牌复牌后的跳空。比较稳妥的做法是:计算因子时排除停牌样本,但建仓时允许持有停牌股票——否则你的回测永远无法模拟"停牌期间不能卖出"的真实约束。
还有涨跌停。这是个人做量化最容易忽略的一个约束。涨停板上你根本买不进去,跌停板里你也根本卖不出来。但很多回测框架默认按当日收盘价撮合,导致你的策略在涨停日"买入成功"、在连续跌停日"卖出成功",回测曲线好看得离谱,实盘一上去就是流动性陷阱。处理办法是在回测引擎里加入涨跌停不可成交的约束,至少对你研究范围内的股票要做到这一步。
2.3 数据对齐与标签泄漏:最隐蔽的错误
数据清洗完还不够,你要面对的最隐蔽问题是对齐与标签泄漏。这两个问题即使在做了多年量化的团队里也偶尔出现,因为它们不像复权那样有明显的数值异常,而是逻辑层面的错误。
数据对齐指的是因子值和行情价格的时间戳必须严格对齐。比如你用截止到T日收盘的数据计算因子,却用T日当天的收益作为标签去训练模型,这就引入了未来信息。标准的做法是T日收盘计算因子,T+1日开盘或收盘确认交易,用T+1到T+2的收益作为标签。看似只差一天,但对很多高频因子来说,这一天的差异意味着相关性直接从正变负或从负变正。
标签泄漏更隐蔽。比如做事件驱动研究时,你从新闻数据里提取事件标签,但标签文本本身就来源于未来发布的公告,而你在T日做预测时不可能读到T+1日才发布的公告。这类问题在文本类因子和基本面类因子中特别常见。我处理这类问题时立了一条死规矩:任何输入特征的时间戳,都必须在标签时间戳之前至少一个完整的交易周期,这个周期根据你的最低持仓周期来定,最短也得留一天缓冲。
这些数据层面的问题,不像策略参数那样能直观看到收益曲线的变化,但它们是所有研究结论成立的前提。我个人的体会是,每拿到一套新数据,先写一个简单的数据体检脚本,检查空值率、极值、复权因子跳变、停牌记录连续性。这套体检流程的花费大概占整个研究周期的三分之一,但绝对物超所值。
3. 因子研究的基本功:从单因子测试到因子合成
3.1 单因子测试:IC、分组回测、换手率怎么看
数据准备好了,终于进入看起来像"量化研究"的部分——因子测试。一个因子就是一个横截面上的排序信号,比如市盈率、过去一个月的动量、营收增长率、波动率倒数等等。你要回答的问题只有一个:这个排序信号对未来收益有没有预测能力?
评判一个因子的预测能力,我主要看三个指标的组合,而不是单一指标。
第一个是IC(信息系数),也就是因子值和未来收益的秩相关系数。IC的绝对值越大越好,同时要看IC的稳定性,也就是IC序列的标准差。单纯IC高但忽正忽负的因子没有实操价值,因为你看不出它什么时候有效。我自己习惯用IC的均值除以标准差得到ICIR,这个指标能同时体现预测能力和稳定性,通常ICIR超过0.3才值得继续研究。
第二个是分组回测。把股票池按因子值从大到小分成五组或十组,分别计算各组未来的平均收益。一个有效因子应该呈现单调性——因子值越高的一组,未来收益也越高(或者反过来)。如果只是极值组有超额收益、中间组是乱的,那这个因子可能只在极端情况下有信号,实际应用时你得考虑头尾暴露的集中度风险。
第三个是换手率。这是很多人忽略的致命指标。一个因子如果靠极端的每日调仓来获取超额收益,即使IC很高,扣掉手续费和滑点后盈利也可能所剩无几。我一般会在因子测试阶段就估算调仓带来的双边换手成本,如果年化换手超过某个阈值,就要么降低调仓频率,要么放弃这个因子。
3.2 因子正交化与合成:别把重复信息当多因子
单因子测试通过之后,下一步是因子之间的合成。这里最常见的误区,是把高度相关的因子当成独立的alpha来源。比如市盈率因子和市净率因子,听起来两个不同,但本质上都在捕捉"价值"这个维度,它们的信息重叠度非常高。你把两个高度相关的因子简单加权,相当于给同一个信号加了双倍权重,组合的分散化效果会被严重高估。
处理这个问题的标准做法是因子正交化。我常用的是施密特正交化或回归取残差的方式,把所有因子对已有因子做回归,取残差作为新的增量信息。这一步做完,你往往会有个很沮丧的发现:原本看似不相干的十个因子,正交化之后真正贡献增量的可能只有四五个,剩下的全是冗余信息。
因子合成的方式也有所讲究。最简单的是等权合成,适合信息相对独立的因子。进阶一点是按ICIR加权,预测能力越强、越稳定的因子权重越高。再进阶的是用机器学习模型(比如线性回归、梯度提升树)来做因子合成,让模型自动学习因子之间的非线性交互。但我要提醒一句:模型越复杂,过拟合的风险越大,尤其是在数据量不够大的情况下。对个人研究者来说,从等权和ICIR加权起步通常是最稳妥的选择,等积累了足够长样本的因子表现数据,再尝试更复杂的合成方式。
3.3 因子衰减与调仓频率的权衡
最后一个因子研究中绕不开的问题是因子衰减。因子对未来收益的预测能力会随时间衰减,有的因子衰减特别快——比如日内动量类的因子,可能一两天就失效了;有的衰减慢——估值类因子往往能管两三个月。理解衰减速度直接决定你的调仓频率设计。
我的建议是,对每个因子都画出"IC随持有期变化"的曲线图。横轴是持有的天数,纵轴是持有N天后的IC值。你会很直观地看到这个因子的半衰期在哪里。然后根据半衰期和交易成本,找到最优调仓周期。这本质上是一个优化问题:调仓越频繁,因子新鲜度越高,但交易成本也越高;调仓越少,成本低但因子有效性打折。
实操层面,我一般把因子分为高频和低频两档来管理。高频档留给换手成本敏感的T+3到T+5类策略,低频档用于周频或月频调仓的组合。分类管理可以避免用一个调仓周期去硬套所有因子的尴尬。
4. 回测系统设计的核心决策与实盘差距
4.1 向量化回测 vs 事件驱动回测:各适合什么阶段
因子研究做完,就到了回测环节。回测的本质是模拟历史,但历史和实盘之间永远有差距。先讲讲回测系统的架构选择。
市面上开源的回测框架分两类:向量化回测和事件驱动回测。向量化回测把整个时间段的数据做批量运算,速度快、代码简洁,适合策略逻辑比较固定的研究场景,比如定期调仓的选股组合。事件驱动回测则像真实交易系统一样按时间轴逐事件推进,每一步都模拟下单、成交、持仓变动,逻辑更贴近实盘,但速度慢、代码复杂。
我的建议是研究阶段先用向量化回测快速迭代,等策略雏形出现、准备验证实盘可行性时,再迁移到事件驱动回测。很多新手一上来就追求逼真的模拟,结果被复杂系统拖慢了研究节奏,得不偿失。当然了,你如果做的是日内高频策略,那向量化回测可能帮不了你太多,只能直接从事件驱动框架起步。
4.2 手续费、滑点与涨跌停流动性约束
回测系统里最容易被低估的是交易成本建模。我见过太多回测曲线被交易成本打回原形的案例。手续费、印花税这些是明面上的固定成本,通常比较好估算。真正麻烦的是滑点——你的委托价格和实际成交价格之间的差距。
滑点在回测里不能简单地固定成几个基点,因为不同市场环境下的冲击成本差别很大。在低流动性股票上大单买入,滑点可能是高流动性股票的几十倍。我常用的方式是对成交价格做"悲观假设":买入时在信号价基础上加一定比例(比如千分之一到千分之二),卖出时减一定比例,然后用这个保守口径来过滤策略。如果策略在保守滑点下还能存活,实盘的容忍度就会高很多。
涨跌停约束前面提到过,在回测系统里要成为硬规则。涨停不能买入,跌停不能卖出,而且在涨跌停附近还要考虑排单概率递减的问题。有些框架允许你设置参与涨跌停成交的概率参数,这算进阶玩法,初期先把"不可成交"设为默认规则比较稳妥。
4.3 过拟合的识别:样本内外测试与参数敏感性
回测做得多了,你一定会遇到一个让你兴奋不已的时刻:某个参数组合下的回测曲线几乎笔直向上,夏普比率高得吓人。这时候要冷静,因为你大概率遇上了过拟合。
过拟合在量化研究里无处不在,表现形式有两种:一是参数过多,模型记住了历史噪音而不是规律;二是研究过程反复回测,用同一段数据不断调整策略,直到某版参数生效为止——相当于拿着答案考自己,考一百次总能考到满分。我自己的切身体会,识别过拟合最有效的方法是参数敏感性分析:把模型参数在合理范围内小步扰动,如果绩效指标剧烈波动,那就说明模型处于过拟合的"尖峰"状态;如果绩效平稳,说明模型抓住了比较稳健的规律。
另一个常用手段是样本内外划分。用前几年数据训练和参数筛选,后几年数据做验证,验证期只跑一次,不做任何调整。如果样本外效果大幅衰减,就要怀疑策略的稳定性了。真正能实战的策略,样本外表现不一定比样本内好,但至少不能离谱。
5. 从研究到实盘的最后一公里:风险控制与执行细节
5.1 仓位管理:凯利公式、固定比例和风险预算
策略研究到一定程度,研究重点要从"赚多少"转向"亏多少"。仓位管理是量化研究从理论到实战的一道关键分水岭。研究阶段你可能只关注收益,但实盘里问你的第一个问题一定是:最大回撤能到多少?你用多少仓位去承担这个回撤?你是否承受得起?
仓位管理的入门思路是固定比例仓位。比如回测显示某策略的年化波动率是15%,你决定目标组合波动率控制在10%以内,那么仓位比例就是10%除以15%,约等于三分之二。这个思路虽然粗放,但逻辑清晰、容易执行,适合刚上实盘的策略。
进阶一点可以采用风险预算的思路:把整体风险分配给不同类型的策略,再在策略内部使用类似比例的方法决定个股仓位。这里要特别警惕的是同一风险源的重复暴露。比如你的两个策略一个是行业动量、一个是个股反转,看似分散,但实际上都在赌市场整体情绪,一旦市场反转,两个策略可能同步亏损,风险预算瞬间突破上限。所以在分配风险预算之前,一定要先做策略收益的相关性分析。
5.2 多策略组合与相关性控制
到了这个阶段,你很可能已经从单一策略扩展到多策略组合。多策略的意义在于分散风险,但如果组合里的策略高度相关,分散就是幻觉。我自己做组合时,会定期计算各策略两两之间的收益相关性矩阵,目标是让组合的平均两两相关性低于某一个阈值(比如0.3)。
相关性会随市场环境变化,不能用一段时间的静态值一劳永逸。比如趋势类策略和均值回归类策略,长期看相关度不高,但在某些特殊行情阶段可能同时失效。所以我会分场景检查相关性:在历史大牛、大熊、震荡三种阶段分别计算,看组合在不同环境下的稳定性。这一步研究做完,你对整体策略的把握会清晰很多。
5.3 paper trading:模拟盘的真实价值
最后一环是模拟盘,也就是paper trading。很多人在模拟盘上亏了钱觉得挫败,赚了钱觉得多此一举,其实都没有正确认识模拟盘的价值。模拟盘的目的不是验证收益,而是验证你的系统链路是否顺畅:策略信号能不能准时推送、下单模块和券商接口对接是否稳定、自动风控能不能及时触发、账户资金变动能不能正确同步到数据库。
我见过不少团队跳过模拟盘直接上实盘,结果第一个月就被各种执行层面的问题搞得焦头烂额。有的问题很基础,比如交易接口的限流机制导致单子没发出去;有的问题很隐蔽,比如数据库里持仓和券商实际持仓对不上,导致风控模块错误地砍掉了不该砍的仓位。这些坑是回测永远测不出来的,只能在模拟盘中暴露。所以我的经验是,模拟盘至少跑三到四周,覆盖不同的市场行情,把整个系统链路跑顺了再考虑上实盘。
从数据到因子,从回测到模拟盘,这套流程走通一次之后,你对量化研究的理解会跟一开始完全不同。这行没有一劳永逸的圣杯,只有不断完善的工作流、持续升级的数据治理和永远保持敬畏的风险意识。写到这里忽然觉得,做量化最大的确定性,反而是你要接受它永远处于一个不断逼近、但从未完全到达的状态。这可能就是这个领域最迷人的地方了。