第四章:社交媒体与舆情分析
做量化交易这些年,我越来越觉得,市场不只是数字的游戏。它背后是人,是情绪,是群体心理。你想想看,一条推文能让一支股票涨20%,一个论坛帖子能引发一波轧空行情。这不是偶然,这是信息优势的体现。
我个人习惯把社交媒体舆情看作市场的「情绪温度计」。它不直接告诉你价格会涨会跌,但它能告诉你市场现在有多热、有多冷。今天我们就来聊聊怎么用好这个温度计。
4.1 Twitter/微博的情绪指标
先说Twitter和微博。这两个平台的特点是快,非常快。消息从发出到传播,可能只需要几分钟。我曾在项目中遇到过这样的情况:某公司财报还没正式发布,Twitter上已经有分析师在讨论关键数据了。等官方消息出来,股价已经反应完了。
怎么量化这种情绪?核心思路是三个维度:
- 情感极性:正面、负面、中性。用NLP模型对每条推文打分。
- 讨论热度:特定关键词的推文数量、转发量、点赞量。
- 意见领袖权重:大V的推文权重应该更高。我一般会给粉丝数超过10万的账号额外加权。
举个实际例子。假设我们要监测特斯拉的舆情,可以这样构建情绪指标:
# 伪代码示例:Twitter情绪得分计算
def twitter_sentiment_score(tweets):
total_score = 0
for tweet in tweets:
# 情感分析得分,范围[-1, 1]
sentiment = analyze_sentiment(tweet.text)
# 影响力权重
influence_weight = log(tweet.followers_count + 1)
# 互动权重
engagement_weight = (tweet.retweets + tweet.likes) / 1000
total_score += sentiment * influence_weight * (1 + engagement_weight)
return total_score / len(tweets)
4.2 Reddit/WallStreetBets的舆情监测
说到Reddit,尤其是WallStreetBets,我得说这是个神奇的地方。2021年的GameStop事件让全世界都看到了散户的力量。但说实话,真正有价值的不只是那些「火箭emoji」和「钻石手」的口号。
我监测WSB舆情时,重点关注三个东西:
- 帖子标题的关键词频率:哪些股票被反复提及?频率突然飙升的,往往有故事。
- 评论区的情绪一致性:如果大部分评论都在看多,但价格没动,这可能是个反向指标。
- 「YOLO」和「DD」标签的比例:YOLO多说明情绪化交易盛行,DD多说明有人在认真分析。
具体怎么抓数据?Reddit有官方API,但限制比较多。我一般用Pushshift.io的存档数据做历史分析,再用PRAW库实时抓取新帖子。微博的话,可以用爬虫,但要注意频率限制。
# 用PRAW抓取WSB热门帖子
import praw
reddit = praw.Reddit(
client_id="你的ID",
client_secret="你的密钥",
user_agent="舆情监控/1.0"
)
wsb = reddit.subreddit("wallstreetbets")
for post in wsb.hot(limit=50):
print(f"标题: {post.title}")
print(f"得分: {post.score}")
print(f"评论数: {post.num_comments}")
print("---")
4.3 利用Google Trends发现趋势
Google Trends是个被很多人低估的工具。它不直接告诉你交易信号,但它能告诉你「大众注意力」的流向。我个人的习惯是,每周一看Trends,看看哪些关键词的搜索量在异常上升。
为什么会这样?因为人的行为模式是:先搜索,再行动。当某个股票或概念的搜索量突然飙升,说明有大量新玩家在关注它。这些新玩家带来的资金,往往会推动短期价格波动。
我常用的几个监测维度:
| 关键词类型 | 示例 | 信号含义 |
|---|---|---|
| 股票代码 | TSLA, GME | 直接交易兴趣上升 |
| 行业概念 | 元宇宙, 量子计算 | 板块轮动可能开始 |
| 事件关键词 | 美联储加息, 财报 | 市场关注度集中 |
| 恐慌词 | 股市崩盘, 经济衰退 | 情绪极端化,可能见底 |
核心逻辑:Google Trends的搜索量变化,往往比价格变化领先1-3天。尤其是那些平时没人搜、突然暴增的关键词,值得重点关注。
用Python调Google Trends数据也很简单:
from pytrends.request import TrendReq
pytrends = TrendReq(hl='zh-CN', tz=360)
pytrends.build_payload(
kw_list=['比特币', '以太坊'],
timeframe='today 3-m'
)
data = pytrends.interest_over_time()
print(data.tail())
嗯,这里要注意一点:Google Trends的数据是相对值,不是绝对值。它显示的是搜索热度相对于峰值的比例。所以别盯着数字本身,要看变化趋势。
最后,我把这三个数据源整合起来,形成一个简单的舆情监控框架。下面这张图是我自己用的结构:
说白了,这套框架的核心就是:把不同来源的噪音数据,转化成有意义的信号。Twitter告诉你情绪方向,Reddit告诉你情绪强度,Google Trends告诉你情绪是否在扩散。三者结合,你就能比大多数人早一步看到市场的「情绪拐点」。
我自己的经验是,这套方法在事件驱动型交易中特别有效。比如财报季、政策发布、产品发布会这些节点,舆情数据往往能提前给出信号。当然,它也不是万能的——遇到黑天鹅事件,所有模型都会失效。但话说回来,哪个模型能预测黑天鹅呢?