4、传统情绪指标计算:VIX解读、Put/Call Ratio计算、成交量情绪指标(TRIN)、构建情绪综合指数
各位同学,咱们今天聊点实在的。市场情绪这东西,听起来玄乎,其实是可以量化的。我做了这么多年量化,发现一个规律:情绪指标不是预测涨跌的圣杯,而是帮你判断当前市场处于什么温度的温度计。温度太高了,你得小心别烫着;温度太低了,也许该考虑加件衣服。
这一章,咱们把四个最经典的传统情绪指标掰开揉碎了讲。嗯,都是我在实盘里反复用过的,坑也踩过不少。
4.1 VIX:恐慌指数的正确打开方式
VIX,全称是CBOE波动率指数,江湖人称「恐慌指数」。说白了,它衡量的是市场对未来30天标普500指数波动率的预期。
VIX的核心逻辑:当市场恐慌时,大家抢着买期权对冲风险,期权价格被推高,隐含波动率上升,VIX就飙了。反过来,市场风平浪静时,VIX就在低位趴着。
我个人习惯把VIX分成几个区间来看:
| VIX区间 | 市场状态 | 我的操作倾向 |
|---|---|---|
| 低于12 | 极度乐观,市场麻痹 | 警惕回调,减仓 |
| 12-20 | 正常波动区间 | 正常交易,趋势跟随 |
| 20-30 | 恐慌开始蔓延 | 考虑对冲,降低杠杆 |
| 30以上 | 极度恐慌,接近底部 | 分批抄底,但别接飞刀 |
关键认知:VIX不是反向指标,它是同步指标。VIX飙升时,市场已经在跌了;VIX见顶时,市场往往也快见底了。我见过太多人看到VIX飙到40就急着抄底,结果被埋在半山腰。
为什么会这样?因为VIX反映的是预期,不是事实。当恐慌情绪达到极致时,该卖的人已经卖完了,剩下的都是死多头,这时候反而容易反弹。
我在项目中遇到过一件事:2020年3月,VIX飙到82的历史高位。当时很多模型都提示「极度恐慌,买入信号」。但如果你真在那时候满仓干进去,后面还有20%的跌幅等着你。VIX见顶不代表市场立刻反转,它只是告诉你:现在别做空,但也不急着做多。
4.2 Put/Call Ratio:聪明钱在干什么?
Put/Call Ratio,就是看跌期权成交量除以看涨期权成交量。这个指标简单粗暴:大家都在买Put,说明看空情绪浓;大家都在买Call,说明看多情绪浓。
但这里有个坑——你得区分是散户在买还是机构在买。散户喜欢买便宜的虚值期权,机构喜欢买实值期权对冲。所以很多专业交易员会看Put/Call Ratio的加权版本,按持仓量或金额加权,而不是简单按成交量算。
我常用的计算方式:
# 简单Put/Call Ratio
put_call_ratio = put_volume / call_volume
# 加权Put/Call Ratio(按持仓量加权)
weighted_ratio = (put_volume * put_oi) / (call_volume * call_oi)
# 我的经验阈值
# 低于0.7:过度乐观,警惕回调
# 0.7-1.0:正常区间
# 1.0-1.3:恐慌开始
# 高于1.3:极度恐慌,可能见底
避坑指南:我曾经犯过一个错误——只看单一交易所的Put/Call数据。后来发现,不同交易所的期权产品结构差异很大。比如CBOE的数据和国内中金所的数据,标的物不同,阈值完全不一样。建议至少对比两个以上交易所的数据。
你想想看,如果Put/Call Ratio突然飙升到1.5以上,但市场还在涨,这说明什么?说明有人在大量买入Put做对冲,而不是真的看空。这时候反而是多头信号——聪明钱在保护自己的多头仓位。
4.3 TRIN:成交量里的秘密
TRIN,全称是Trading Index,也叫Arms Index。它把涨跌家数和成交量结合起来,告诉你资金是在追涨还是在抄底。
公式很简单:
TRIN = (上涨家数 / 下跌家数) / (上涨成交量 / 下跌成交量)
嗯,这里要注意:TRIN小于1是看涨信号,大于1是看跌信号。为什么?
举个例子:如果上涨家数很多,但上涨成交量很小,说明大家都在小单买入,没有大资金参与。这时候TRIN会大于1,表面看涨,实际是虚涨。反过来,如果下跌家数很多,但下跌成交量很小,说明抛压不大,TRIN小于1,反而是买入机会。
我个人的经验阈值:
- TRIN < 0.8:强势上涨,资金集中涌入
- TRIN 0.8-1.2:正常波动,多空平衡
- TRIN > 1.2:弱势下跌,抛压沉重
- TRIN > 2.0:极度恐慌,短期超卖
注意:TRIN在极端行情下会失效。比如熔断期间,涨跌家数可能只有个位数,成交量也极度萎缩,这时候算出来的TRIN没有参考意义。我一般会加一个条件:当上涨家数或下跌家数少于50只时,暂停使用TRIN。
4.4 构建情绪综合指数
单一指标都有局限性。VIX可能被期权套利扭曲,Put/Call Ratio可能被散户情绪带偏,TRIN在震荡市里频繁发出假信号。所以,真正靠谱的做法是把它们融合成一个综合指数。
我常用的方法:等权标准化 + 滚动分位数。
import pandas as pd
import numpy as np
def build_sentiment_index(vix, pcr, trin, window=20):
"""
构建情绪综合指数
vix: VIX序列
pcr: Put/Call Ratio序列
trin: TRIN序列
window: 滚动窗口
"""
# 1. 标准化到0-1区间
def normalize(series):
min_val = series.rolling(window).min()
max_val = series.rolling(window).max()
return (series - min_val) / (max_val - min_val + 1e-10)
# 2. 注意方向:VIX和TRIN是反向指标
vix_norm = 1 - normalize(vix) # VIX越高,情绪越差
pcr_norm = 1 - normalize(pcr) # PCR越高,情绪越差
trin_norm = 1 - normalize(trin) # TRIN越高,情绪越差
# 3. 等权合成
sentiment_index = (vix_norm + pcr_norm + trin_norm) / 3
return sentiment_index
# 使用示例
sentiment = build_sentiment_index(vix_data, pcr_data, trin_data)
# sentiment > 0.7:情绪过热,警惕回调
# sentiment < 0.3:情绪过冷,可能反弹
核心思路:情绪综合指数不是预测工具,而是状态识别工具。它告诉你当前市场处于什么情绪区间,然后你根据这个区间去匹配相应的交易策略。比如情绪过热时做均值回归,情绪过冷时做趋势跟随。
我曾经在构建综合指数时踩过一个坑:不同指标的时间尺度不一样。VIX是30天预期,Put/Call Ratio是日度数据,TRIN是日内数据。直接等权合成会引入滞后问题。我的解决方案是:先对每个指标做EMA平滑,统一时间尺度,再合成。
下面这张图展示了情绪综合指数的核心逻辑:
最后说一句:情绪指标是辅助,不是主菜。我见过太多人把情绪指标当成交易信号,结果亏得裤衩都不剩。记住,情绪指标告诉你的是市场在干什么,而不是市场要干什么。真正赚钱的交易,永远是情绪 + 趋势 + 风控三者结合。
我的实战建议:把情绪综合指数当成一个过滤器。比如,当情绪指数显示「过热」时,我只做空不做多;当显示「过冷」时,我只做多不做空。这样至少能帮你避开大部分情绪极端行情下的反向操作。
公众号:蓝海资料掘金营,微信deep3321