3、情绪指标构建基础:文本情感分析(NLP基础)、成交量情绪指标、波动率情绪指标

各位同学,咱们今天聊点实在的。

情绪指标这东西,说白了就是把市场里那些看不见摸不着的「恐慌」和「贪婪」,变成一串能算的数字。我做了这么多年量化,最大的感触就是:价格会骗人,成交量会骗人,但情绪不会。你想想看,当所有人都慌不择路的时候,那个成交量曲线和波动率曲线,简直比心电图还诚实。

3.1 文本情感分析:NLP基础

先说说文本情感分析。嗯,这里要注意,很多人一上来就搞什么BERT、GPT,其实没必要。我个人习惯,先从最简单的做起。

核心思路:把新闻、股吧帖子、社交媒体上的文字,转化成「正面」「负面」「中性」三个标签。然后统计每天的正负面比例,这就是最原始的文本情绪指数。

关键点:不要追求100%准确。情绪指标要的是「趋势」,不是「精确值」。我在项目中遇到过,用简单词典法跑出来的情绪曲线,跟市场波动率的相关系数能达到0.6以上,够用了。

具体怎么做?我一般分三步:

  1. 数据清洗:去掉HTML标签、特殊符号、停用词。中文分词用jieba,简单粗暴。
  2. 情感词典构建:用现成的知网Hownet情感词典,或者自己标注。我建议用「金融领域情感词典」,网上有开源版本。
  3. 打分规则:正面词+1,负面词-1,中性词0。然后累加除以总词数,得到当天的情绪得分。
# 一个极简的文本情绪打分函数
def sentiment_score(text):
    pos_words = ['利好', '突破', '增长', '抄底', '牛市']
    neg_words = ['利空', '暴跌', '崩盘', '恐慌', '熊市']
    score = 0
    for word in pos_words:
        if word in text:
            score += 1
    for word in neg_words:
        if word in text:
            score -= 1
    return score

避坑指南:我曾经用通用情感词典去分析股市评论,结果「暴跌」被标成负面,「抄底」被标成正面。但实际在股吧里,「抄底」往往是套牢的开始。所以一定要用金融领域词典,或者自己微调。

3.2 成交量情绪指标

成交量这东西,我把它叫做「市场的体温计」。价格涨跌可以造假,但成交量不会。你想想看,如果某只股票连续三天缩量上涨,那大概率是庄家在自拉自唱,散户根本没跟。

核心指标

指标名称 计算公式 含义
成交量比率(VR) VR = (上涨日成交量之和) / (下跌日成交量之和) VR > 1.5 表示情绪过热,VR < 0.5 表示情绪冰点
能量潮(OBV) OBV = 前日OBV + 当日成交量 × 涨跌方向 OBV与价格背离时,往往是反转信号
成交量加权平均价(VWAP) VWAP = Σ(价格 × 成交量) / Σ成交量 价格在VWAP上方表示多头情绪强

我个人习惯用VR指标。为什么?因为它简单。你不需要什么复杂的数学,就看每天上涨和下跌时的成交量对比。如果连续5天VR > 2.0,那基本可以确定市场情绪已经进入「疯狂」阶段,这时候就该考虑减仓了。

注意:成交量情绪指标在「极端行情」下会失效。比如2015年股灾期间,VR指标连续多日低于0.3,但市场并没有立刻反弹,而是继续暴跌。这时候需要结合波动率指标一起看。

3.3 波动率情绪指标

波动率,说白了就是「市场的恐惧指数」。我经常跟团队说:价格是表象,波动率才是本质。为什么?因为当所有人都恐慌时,波动率会急剧放大;当所有人都麻木时,波动率会极度萎缩。

常用指标

  • 历史波动率(HV):过去N天的价格标准差。一般用20天或30天。
  • 隐含波动率(IV):从期权价格反推出来的波动率。这个需要期权数据,门槛稍高。
  • 波动率指数(VIX):标普500的隐含波动率,被称为「恐慌指数」。

嗯,这里要重点说一下历史波动率的计算。很多人直接用收盘价的标准差,这是不对的。正确的做法是用「对数收益率」的标准差:

import numpy as np

def historical_volatility(prices, window=20):
    # 计算对数收益率
    log_returns = np.log(prices[1:] / prices[:-1])
    # 滚动标准差
    hv = log_returns.rolling(window=window).std()
    # 年化
    return hv * np.sqrt(252)

实战经验:我习惯把波动率分成三个区间:

  • HV < 15%:低波动,市场情绪麻木,适合做趋势策略
  • 15% < HV < 30%:正常波动,情绪中性,适合做均值回归
  • HV > 30%:高波动,情绪恐慌,适合做反转策略

为什么会这样?你想想看,当波动率很低的时候,说明市场没有方向,大家都在观望。这时候一旦出现趋势,往往能持续很久。而当波动率很高的时候,说明多空分歧巨大,这时候追涨杀跌很容易被两边打脸。

3.4 三种情绪指标的融合

单独看一个指标,就像盲人摸象。我个人习惯把文本情绪、成交量情绪、波动率情绪结合起来,构建一个「综合情绪指数」。

下面这张图,就是这三种指标的关系框架:

情绪指标构建框架 文本情感分析 新闻/股吧/社交媒体 成交量情绪 VR/OBV/VWAP 波动率情绪 HV/IV/VIX 综合情绪指数 加权融合 / 主成分分析 / 机器学习 交易信号:买入/卖出/持有

具体怎么融合?我常用的方法有两种:

  • 等权加权:三个指标各占1/3,简单粗暴。适合快速验证。
  • 动态加权:根据近期表现,给表现好的指标更高权重。比如最近波动率情绪更准,就给它50%权重。

一个小技巧:我习惯在融合之前,先把三个指标都做「归一化」处理,让它们都在0到1之间。这样就不会因为量纲不同导致某个指标被淹没。

好了,这一章的内容就到这里。文本情感、成交量、波动率,这三个工具你拿好了,后面咱们就要开始调参实战了。记住,情绪指标不是万能的,但没有情绪指标是万万不能的。


专注资料整理