一、情绪数据概述:市场里的“心电图”
大家好,我是老李。今天咱们聊聊情绪数据。
很多人做量化,盯着K线、成交量、MACD这些传统指标。但我个人习惯,会额外关注一个维度——市场情绪。说白了,就是市场里的人在“想什么”、“怕什么”、“贪什么”。
情绪数据,就是把这种看不见摸不着的“人心”,变成可以量化的数字。你想想看,价格波动背后,哪一次不是情绪的驱动?恐慌时砸盘,贪婪时追高,这就是情绪的力量。
1.1 什么是情绪数据?
情绪数据,也叫“市场情绪指标”或“舆情指标”。它反映的是市场参与者对某个资产、某个板块或整个市场的态度倾向——是乐观、悲观,还是中性?
举个例子:
- 正面情绪:大家觉得“牛市来了”、“这个币要起飞”
- 负面情绪:大家觉得“要崩盘了”、“赶紧跑”
- 中性情绪:没什么特别看法,观望中
嗯,这里要注意:情绪数据不是“算命”,它是基于大量文本、行为数据统计出来的概率分布。我刚开始接触时也犯过迷糊,以为情绪指数高就一定会涨。后来发现,情绪和价格的关系,远比想象中复杂。
1.2 情绪数据的三大来源
情绪数据从哪来?我归纳了三个主要渠道。每个渠道我都踩过坑,咱们一个一个说。
1.2.1 社交媒体
这是目前最主流的来源。Twitter、Reddit、微博、雪球、东方财富股吧……这些地方每天产生海量的讨论文本。
- Twitter/微博:实时性强,适合捕捉突发情绪
- Reddit/雪球:讨论深度高,适合分析板块情绪
- 股吧/论坛:散户情绪集中地,但噪音也大
我曾经做过一个项目,抓取某只股票在雪球上的帖子,用NLP模型分析情绪。结果发现,当负面情绪占比超过65%时,接下来3个交易日的下跌概率高达78%。当然,这个阈值因股票而异,需要自己调参。
1.2.2 新闻媒体
传统财经媒体、行业新闻、政策解读……这些内容相对权威,但时效性不如社交媒体。
- 财经新闻:如华尔街日报、财新、第一财经
- 政策文件:央行公告、监管文件、行业白皮书
- 公司公告:财报、业绩预告、重大事项
这里有个避坑指南:我曾经直接用新闻标题做情绪分析,结果发现很多标题是中性甚至偏负面的,但正文内容其实是利好。所以,我建议至少分析正文前200个字,或者用摘要模型提取关键信息。
1.2.3 舆情报告
第三方机构发布的舆情报告、投资者情绪调查、恐慌指数(VIX)等。这些数据已经经过初步加工,拿来就能用。
- VIX指数:市场恐慌程度的“体温计”
- AAII投资者情绪调查:美国散户情绪风向标
- 百度搜索指数/微信指数:关键词热度反映关注度
我个人习惯把舆情报告作为“验证信号”。比如,当我的模型从社交媒体上检测到恐慌情绪,再去看VIX是否同步飙升,如果两者一致,信号的可信度就高很多。
1.3 情绪数据在金融领域的应用价值
情绪数据到底有什么用?我总结了三个核心应用场景。
1.3.1 辅助择时
情绪极端时,往往是市场反转的前兆。比如:
- 极度恐慌:可能是抄底机会(但别急着接飞刀)
- 极度贪婪:可能是减仓信号(别贪最后一个铜板)
我记得2020年3月,新冠疫情引发全球恐慌,社交媒体上“崩盘”、“清仓”等词出现频率暴增。当时我的情绪模型给出了“极度恐慌”信号,随后市场在两周内触底反弹。当然,这不是说情绪指标能精准预测最低点,但它能告诉你“现在大概率不是乐观的时候”。
1.3.2 风险预警
情绪数据可以作为“风险雷达”。当负面情绪持续累积,而价格还在上涨,这就是典型的“背离”——往往意味着上涨不可持续。
举个例子:某只股票连续上涨,但社交媒体上的正面情绪占比却在下降。这种背离出现时,我通常会减仓或设置更紧的止损。
1.3.3 策略增强
把情绪数据作为因子,加入到现有的量化策略中。比如:
- 动量策略 + 情绪过滤:只在情绪中性或偏正面时做多
- 均值回归策略 + 情绪确认:在情绪极端时入场
- 事件驱动策略 + 情绪验证:重大新闻发布后,看情绪是否配合
1.4 本章知识体系总览
下面这张图,是我自己画的知识框架。你可以把它当作本章的“地图”。
这张图把本章的核心内容串起来了。你看,从三大来源到三大应用,中间其实有一条暗线——数据清洗与特征工程。这部分我们后面会详细讲,今天先有个整体印象。
1.5 一个小案例:情绪数据怎么用?
最后,我分享一个简单的代码片段。这不是完整的策略,但能让你直观感受情绪数据的处理流程。
# 伪代码:情绪数据获取与简单分析
import pandas as pd
from textblob import TextBlob # 一个简单的NLP库
# 1. 获取社交媒体文本(假设已爬取)
posts = [
"这只股票太强了,明天肯定涨停!",
"完了,今天又跌了三个点,割肉了",
"市场情绪一般,观望中"
]
# 2. 计算每条文本的情绪得分
def get_sentiment(text):
blob = TextBlob(text)
# 返回 -1(负面)到 1(正面)之间的值
return blob.sentiment.polarity
scores = [get_sentiment(p) for p in posts]
print("情绪得分:", scores)
# 3. 计算整体情绪指标
avg_score = sum(scores) / len(scores)
print("平均情绪得分:", avg_score)
# 4. 判断情绪状态
if avg_score > 0.3:
print("情绪偏正面")
elif avg_score < -0.3:
print("情绪偏负面")
else:
print("情绪中性")
这段代码很简单,但核心逻辑就是:文本 → 数值 → 判断。实际项目中,你会用到更复杂的模型(比如BERT、LSTM),但本质不变。
好了,这一章就到这里。情绪数据的概念、来源和应用价值,你应该有个基本认识了。下一章,我们会深入讲情绪数据的采集与清洗——这才是真正考验工程能力的地方。
公众号:蓝海资料掘金营,微信deep3321