量化圈子里聊“因子”,聊到后来基本就两类:一类是量价,一类是基本面。但最近几年,大家开始高频地提一个词叫“情绪 Alpha”。第一次看到这个标题的时候,我第一反应是:这不就是量化里那句老话“别人贪婪我恐惧”的科技版吗?但真正把情绪数据接进策略之后,我才意识到,这里面能挖的东西远比想象中深。
这篇是“Sentiment & News Alphas”系列的第一章,核心就一句话:把市场参与者的真实情绪做成可计算、可回测、可交易的信号。它不解决“市场为什么涨跌”这种哲学问题,它解决的是“当前市场对某只股票的情绪是否已经极端到可以反向押注”这种具体问题。适合谁看?如果你手里已经有一套量价或基本面策略,想找一种相关性低的增量信号源;或者你刚接触另类数据,想知道社交媒体、新闻、搜索热度这些东西到底怎么变成因子,这篇文章能帮你少走不少弯路。
1. 情绪 Alpha 到底在赚什么钱
很多人第一次听到“情绪因子”会觉得玄,以为是把新闻标题丢进模型里跑个分,然后对着分数开仓。这种做法不是不对,而是太粗糙。要理解情绪 Alpha 的收益来源,得先搞清楚你赚的是谁的钱。
1.1 市场参与者的行为偏差才是利润来源
市场的价格由边际交易者决定,而边际交易者往往不是理性的。某只股票出了利空公告,按理说价格应该一步到位,但实际上,散户看到新闻后第一反应是恐慌卖出,机构看到的是错杀机会。这种分歧和反应速度的差异,就是情绪因子的利润池。情绪 Alpha 赚的不是公司盈利增长的钱,而是市场参与者因为认知偏差、注意力偏差、处置效应而系统性亏掉的那部分钱。
散户容易高估新闻的短期影响,低估长期基本面;机构容易过度自信,忽略市场情绪极端值的预测力。这些行为模式是可重复的,所以情绪因子本质上是一种行为金融因子的落地实现。
1.2 情绪数据与量价、基本面数据的本质区别
量价数据是结果,是成千上万笔交易撮合出来的价格和成交量,它已经是“过去式”。基本面数据是慢变量,财报一个季度才披露一次,等你能算出来的时候,价格已经反应了一大半。情绪数据恰好卡在这两者之间:它发生在交易之前,是“态度”和“意图”的代理变量,而且更新频率可以做到秒级、分钟级、小时级。
这也是情绪因子为什么能提供增量信息的原因。它跟价格数据不是同一维度的东西,相关性天然偏低。把情绪因子叠加到已有的策略组合里,最大的价值不是单独把夏普做多高,而是把组合整体相关性降下来。
1.3 情绪因子的适用边界
不是所有标的都适合用情绪因子。我自己的经验是:小盘股、成长股、高换手率个股,情绪因子表现最好。逻辑也很简单,这些股票的定价权更多掌握在散户和游资手里,行为偏差更明显,情绪波动对价格的影响更直接。反而是一些超大市值、机构定价为主的蓝筹股,情绪因子的预测能力弱很多。
红利股和低波策略的持仓,情绪因子基本不适用,因为它们的定价逻辑从来就不是靠情绪驱动的。如果你要做的是指数增强,情绪因子更合适的定位是超额收益的补充,而不是主引擎。在做任何情绪策略之前,先想清楚:你的标的上到底有没有足够的“情绪交易者”?如果没有,把因子硬塞进去,只会增加换手和摩擦成本,直接拖累收益。
2. 情绪 Alpha 的完整构建流程
很多教程一上来就扔给你模型和代码,但实际做下来,最大的坑基本都藏在数据处理阶段。我把整个流程拆成四个环节,每个环节都有容易踩的雷。
2.1 第一步:数据源的选择与取舍
情绪数据的源头分几大类,各有利弊。第一类是社交媒体文本,比如国内外主流社交平台上用户对股票的自发讨论。它的优势是覆盖广、反应快,很多消息在新闻稿还没发出来的时候,社交平台上已经有讨论了。劣势是噪音极大,全是散户化的表达方式,各种 meme、表情包、反讽梗,词级别的分类很容易出偏差。
第二类是新闻数据,包括财经新闻、公司公告、政策报道。新闻数据的信噪比明显高于社交媒体,因为这些文本是成体系的,有标题、有正文、有来源机构。劣势是覆盖密度低,一家中小市值公司可能一个月都没几条像样的新闻。第三类是搜索趋势数据和研报数据,搜索趋势代表的是大众注意力的真实流向,研报则代表的是卖方观点的变化。
我见过很多人做情绪因子,只抓一种数据源,做出来整个策略对单一数据源过度依赖。实际使用中,建议至少两种数据源交叉验证。搜索数据能捕捉注意力,社交媒体能捕捉情绪强度,新闻能捕捉事件驱动。三者合一,互相校验,比任何单一数据源都靠谱得多。
2.2 第二步:文本标准化这件事不能省
很多做策略的人一看是文本数据,就直接调个预训练模型开始跑情绪打分,完全跳过预处理。这是个大坑。你拿到的原始语料,不管是爬下来的还是买的,都是脏数据。里面充斥着HTML标签、错别字、重复字符、表情符号、@信息、链接。这些噪音如果不清理,最后的情绪分数会被严重污染。
我的处理习惯分四步走:先做基础清洗,去掉链接、HTML标签、特殊符号,这一步写正则或者用现成的清洗库都可以;再做分词和词性标注,中文用分词工具,英文直接用空格切分,然后标出词性,重点抓形容词、副词和动词,因为情绪主要承载在这几类词上;然后做停顿词过滤,把虚词、代词、无意义连接词全部去掉;最后一步是做否定词处理,比如“不看好”和“看好”之间的区别,如果只做词语级别的情绪匹配,会直接把正面句判成负面句,这个问题必须做局部依存分析才能解。
2.3 第三步:情绪分数怎么算
情绪打分这一步,目前主流做法有两条路线。一条是词典法,一条是深度学习方法。词典法的核心是维护一个带权重的情绪词典,每个词有对应的情感分数,把所有词的情感分求和归一化,得到整条文本的情绪分。这个方法简单、解释性强、计算量极小,缺点是它锁死了情感表达方式,遇到讽刺、反话、语境反转就直接失效。
深度学习路线,比如用情感分类的预训练模型直接跑一个正向/负向/中性概率输出。优势是能把上下文语境考虑进去,像“这只股票跌得让我笑了”这种反讽句,词典法会判成负面,深度学习模型则有可能捕捉到那个“笑”字底下的别样意味。劣势是它对算力和数据量的要求高,而且推理结果不够透明,你要向投委会解释每一个预测背后的原因,会发现这件事非常困难。
我自己常用的做法是双轨制:用深度学习模型做粗分类,把文本分成正向、负向、中性;再用词典法在细分情绪上做加权修正,比如“恐慌”“贪婪”“焦虑”“兴奋”这类具体情绪维度。这个组合既能保证准确度,又保留了解释性。千万别迷信模型,情绪打分的实质仍然是“把人类的表达方式翻译成数字”,模型的验证才是核心环节,模型本身再花哨,验证不足也会翻车。
2.4 第四步:从文本分数到股票信号
单条文本的情绪分数是零散的,必须聚合到股票层面才算能用的信号。聚合方式通常有两种:一种是把同一只股票在固定时间窗口内所有文本的情绪分数做等权平均或市值加权平均;另一种是做事件驱动分析,把关键事件前后一段时间的情绪分数变化序列当成一个整体特征。
聚合之后,还必须做中性化处理。情绪因子跟市值因子有很强的相关性,因为小盘股在社交媒体上的讨论热度天然更高。如果不做市值中性化、行业中性化,你跑出来的因子表现很可能只是市值因子的镜像。一般做法是用线回归或者分位数映射,把情绪因子中跟市值、行业相关的部分剥离掉,剩下的残差才是干净的 Alpha 来源。
3. 从情绪信号到可交易策略的关键细节
算出一个情绪因子只是第一步,把它变成能产生持续收益的策略,中间隔着大量工程细节。有几次我把回测跑出很漂亮的曲线,一上模拟盘就废掉,后来发现全是处理细节上的问题。
3.1 信号平滑与换手率控制
原始情绪信号的换手率非常吓人。因为情绪数据的噪音大,可能今天情绪极度悲观,明天又来一条反转型新闻,情绪分直接从负变成正,你要是跟着这种信号频繁调仓,手续费和冲击成本就能吃掉大部分收益。我的做法是先对信号做指数加权平滑,给近期更大的权重,而不是直接等权滚动平均。然后设置调仓阈值,信号强度不超过阈值就不做任何操作,用这个方式硬性过滤掉低置信度的信号,能明显改善净值曲线的平滑度。
3.2 长短仓组合的构建方式
情绪因子既可以做多头策略,也可以做多空组合。做纯多头的时候,我一般会选择情绪分数排名前 20% 到 30% 的股票,等权持仓。做多空组合时,更推荐的方法是:多空组合的对手就是市场本身,如果你的模型在情绪极端值的判定上足够准确,做多前 10% 并做空后 10%,效果会显著好于单纯的多头策略。
不过这里要特别注意流动性约束,很多人做回测时完全忽略可做空名单和融券成本,导致回测出来的多空策略收益严重虚高。一套严谨的多空情绪策略,至少要把融券费、做空限制、最小交易单位这些现实摩擦全部考虑进去,否则未来上了实盘你会被市场教育得很惨。
3.3 情绪因子与其它因子的合成
情绪因子单独用,极端情况下能跑出很高收益,但其净值曲线会伴随大幅回撤。更合理的做法是把情绪因子跟动量因子、价值因子或者质量因子做线性合成或非线性合成,让每一种策略都在它最舒适的市场环境里贡献收益。一个简单的做法是对每个因子做 z-score 标准化,然后按照等权或半等权的方式合成一个综合因子。更进阶的做法是用条件因子模型:根据市场状态动态调整各因子权重,比如在市场波动率升高时,加大情绪因子的权重,因为它在这种环境下贡献信息的能力更强。
4. 情绪因子落地中的典型问题与排查
情绪因子最大的特征是最容易产生“过拟合幻觉”,因为可调的自由度太多:数据源可以换、文本清洗可以改、打分模型可以调、聚合方式可以选、平滑参数可以降、调仓频率可以变。这么多旋钮,你要是怀着一颗“追求最好回测结果”的心去调参,几乎必然得到一个在样本内优异、样本外崩溃的模型。
我踩过最深的一次坑,是在一个项目里用到了某个特定时间段内的社交媒体数据,回测效果很好,结果后来仔细一查,那段数据里有一大批被平台删帖删掉了,剩下的都是情绪比较温和的内容,等于变相做了一个未来数据清洗。这种坑如果不做数据一致性校验,根本发现不了。
再就是延迟问题。文本数据从事件发生到数据源收录,再到你本地处理完,这里面有时间差。有些所谓“实时”的数据源,实际上事件发生后 5 到 15 分钟才推给你,用于高频策略完全不可行。我的经验是:情绪因子比较适合用在日频或小时频的调仓周期上,如果要做日内,对数据链路的要求会成倍提高。
最后说一个小技巧:验证情绪因子有没有真实预测力,最简单的办法是做事件研究法。选一批情绪极端事件(比如某只股票连续 N 天被社交媒体情绪强制看多),然后统计事件发生后 5 天、10 天、20 天的累计超额收益。如果这种极端情绪过后,收益有明显的反向修正规律,说明因子有效。如果事件后收益没有规律,那无论你怎么调模型和参数,这个因子本身就是个幽灵信号,趁早放弃。
5. 后续章节与情绪之外的思考
这一章只聊了情绪 Alpha 的基础框架,但情绪本身不是孤岛。新闻数据结构更规整、来源更权威、事件语义更清晰,新闻 Alpha 和情绪 Alpha 的结合能产生很多非常有趣的叠加效应。比如新闻里出现利空事件,但社交媒体情绪反应平淡,说明市场对该利空尚未充分定价,这种“预期差”本身就是一种很有意思的信号。反过来,如果新闻平淡,社交媒体却情绪高涨,又是一种值得关注的背离信号。
这一系列的内容,我打算按三条线往下推进:第二章拆新闻 Alpha 的构建方法,第三章把情绪和新闻信号叠到一起,讲预期差因子的搭建与验证。这一篇的定位相当于把地基打牢了,把“情绪到底能不能变成 Alpha”这个命题先讲清楚。情绪 Alpha 不是一个可以直接抄作业的因子,它更像是一套方法论,需要你根据自己手上的数据、标的和系统去适配。但如果你能把它真正理解了、搭起来、跑顺了,它给你的超额收益会远超那些已经被挖烂的传统因子。希望这个系列对你能有实际帮助。