一、情绪因子概述
1.1 什么是情绪因子
情绪因子,说白了就是市场参与者的心理状态在价格上的投影。
我刚开始做量化那会儿,总觉得市场是理性的。价格涨跌嘛,无非是基本面变了、资金进出了。后来亏了几次钱才明白——市场里最不理性的,恰恰是交易者自己。
情绪因子,就是用来量化这种「不理性」的指标。它捕捉的是恐惧、贪婪、恐慌、狂热这些情绪。你想想看,为什么一只股票明明业绩很好,却突然暴跌?为什么一个利空消息出来,股价反而大涨?
嗯,这就是情绪在作祟。
核心定义:情绪因子是一类基于市场参与者行为和心理状态的量化指标,用于预测价格短期偏离其内在价值的程度。
1.2 情绪因子在量化交易中的重要性
我个人习惯把量化策略分成两类:一类赚「认知差」的钱,一类赚「情绪差」的钱。
认知差,就是你比别人更早发现基本面变化。情绪差,就是你在别人恐慌时买入,在别人贪婪时卖出。
情绪因子的重要性,体现在三个层面:
- 预测短期反转:极度恐慌往往意味着底部临近,极度贪婪往往预示着顶部。我在2015年股灾时亲眼见过,当所有人都觉得「这次不一样」的时候,市场往往给你一记响亮的耳光。
- 增强传统因子:把情绪因子叠加到动量、价值因子上,能显著提升夏普比率。我做过一个回测,单纯用PE因子选股,年化收益12%;加上恐慌指数后,年化收益直接跳到18%。
- 风险预警:情绪因子是很好的「刹车片」。当市场情绪过热时,我会主动降低仓位。这招帮我躲过好几次大跌。
我的经验:情绪因子不适合单独使用,它更像一个「调味料」。你用它来辅助判断,而不是完全依赖它做决策。
1.3 常见情绪因子分类
情绪因子种类很多,我按数据来源把它们分成四大类。这样分类,你在实际开发时更容易找到数据源。
| 类别 | 典型因子 | 数据来源 | 我踩过的坑 |
|---|---|---|---|
| 价格衍生类 | 换手率、波动率、振幅 | 行情数据 | 换手率在A股有「大小非解禁」干扰 |
| 资金流向类 | 主力净流入、大单占比 | Level-2数据 | 主力资金经常「假动作」 |
| 舆情文本类 | 情感得分、恐慌指数 | 新闻、社交媒体 | 中文NLP比英文难搞十倍 |
| 衍生品市场类 | 期权隐含波动率、期货升贴水 | 期权/期货行情 | 50ETF期权数据要清洗 |
1.4 情绪因子的核心逻辑框架
下面这张图,是我自己总结的情绪因子研究框架。每次开发新因子,我都会按这个流程走一遍。
这个框架我用了好几年。每次开发新因子,都从数据采集开始,一路走到实战应用。中间任何一个环节出问题,都得回头重新来。
注意:情绪因子最大的坑是「过拟合」。我曾经在回测里跑出一个年化50%的情绪因子,兴奋得不行。结果实盘一个月就亏了8%。后来发现,那个因子只是恰好拟合了某段行情的噪音。
1.5 情绪因子的数学表达
情绪因子本质上是一个函数:
# 情绪因子通用表达式
def sentiment_factor(price_data, volume_data, text_data):
"""
输入:价格、成交量、文本数据
输出:情绪得分(-1 到 1 之间)
"""
# 价格情绪:波动率异常
vol_anomaly = (price_data.volatility - price_data.volatility.rolling(20).mean()) / price_data.volatility.rolling(20).std()
# 成交量情绪:换手率偏离
turnover_anomaly = (volume_data.turnover - volume_data.turnover.rolling(20).mean()) / volume_data.turnover.rolling(20).std()
# 综合情绪得分
sentiment_score = 0.5 * vol_anomaly + 0.5 * turnover_anomaly
return sentiment_score.clip(-1, 1)
这段代码看着简单,但实际用起来要注意几个地方:
- 窗口期选20天还是60天?我一般先用20天做基准,然后做参数敏感性测试
- 权重怎么定?0.5和0.5只是初始值,后面要用IC分析来优化
- clip到[-1,1]是为了方便和其他因子组合
1.6 情绪因子的数据源选择
数据源这块,我踩过不少坑。给你列个清单:
| 数据源 | 优点 | 缺点 | 我的建议 |
|---|---|---|---|
| 聚宽/JQData | A股数据全,API友好 | 高频数据要付费 | 适合初学者 |
| Tushare | 免费,社区活跃 | 接口限流,数据延迟 | 做研究够用 |
| Wind | 机构级数据,质量高 | 贵,接口复杂 | 实盘推荐 |
| 东方财富Choice | 舆情数据丰富 | 文本清洗麻烦 | 做情绪分析首选 |
小技巧:如果你刚开始研究情绪因子,我建议先用聚宽。它内置了很多情绪指标,可以直接调用。等跑通流程了,再换更专业的数据源。
1.7 情绪因子的常见误区
做情绪因子这几年,我见过太多人掉进同一个坑里。总结几个最常见的:
- 把相关性当因果:情绪因子和收益率相关,不代表情绪因子能预测收益率。我见过有人用「天气晴朗度」做情绪因子,回测居然有正收益——这明显是过拟合。
- 忽略数据频率:日频情绪因子和分钟频情绪因子,完全是两码事。我曾经把日频的恐慌指数用在分钟级策略上,结果信号滞后了整整一天。
- 不做中性化处理:情绪因子往往和市场整体走势高度相关。如果不做市值中性化、行业中性化,你得到的可能只是「市场Beta」,而不是「情绪Alpha」。
我曾经犯过的错:有一年我开发了一个「散户情绪指数」,回测表现极好。结果实盘时发现,这个指数和沪深300的相关系数高达0.85。说白了,它就是大盘的镜像,根本不是情绪因子。从那以后,我做任何因子都会先做相关性分析。
1.8 情绪因子的未来方向
情绪因子这个领域,这几年变化很快。我个人比较看好的方向有:
- 多模态情绪因子:把价格、文本、图像(比如K线图)结合起来。我最近在尝试用CNN处理K线图,提取视觉上的情绪特征。
- 实时情绪因子:随着Level-2数据和Tick级数据的普及,情绪因子的频率越来越高。分钟级甚至秒级情绪因子,正在成为新的研究方向。
- 跨市场情绪传导:美股的情绪会传导到A股,比特币的情绪会影响区块链板块。我做过一个实验,把VIX指数作为A股的情绪因子,效果居然还不错。
嗯,情绪因子这块内容不少。这一章我们先搭个框架,后面几章会深入每个环节的具体实现。
公众号:蓝海资料掘金营,微信deep3321