回归分析

回归分析

这里只是用SP500指数和VIX,指数波动率在隐含波动率的基础上计算得到一定程度上反映了,未来波动率的发展情况.
由于国内的波动率指数刚发布不到一年,tushrae现在不能获取它的数据,所以需要从雅虎财经获取标普500和标普波动率指数.
 

# 获取美国数据,需要倒入新的模块
import pandas_datareader.data as web
import fix_yahoo_finance as yf    # 配合pandas_datareader 获取雅虎财经数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
yf.pdr_override()
# 标普500
df_spy = web.get_data_yahoo('SPY',start='2010-01-01')
df_vix = web.get_data_yahoo('^VIX',start='2010-01-01')
[*********************100%***********************]  1 of 1 downloaded
df_spy.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1899 entries, 2010-01-04 to 2017-07-19
Data columns (total 6 columns):
Open         1899 non-null float64
High         1899 non-null float64
Low          1899 non-null float64
Close        1899 non-null float64
Adj Close    1899 non-null float64
Volume       1899 non-null int64
dtypes: float64(5), int64(1)
memory usage: 103.9 KB
# 提取两个数据中的收盘价格,组成一个新的数据列表
data = pd.DataFrame({'SPY':df_spy['Close']})
data = data.join(pd.DataFrame({'VIX':df_vix['Close']}))
print data.tail()
                   SPY   VIX
Date                        
2017-07-13  244.419998  9.90
2017-07-14  245.559998  9.51
2017-07-17  245.529999  9.82
2017-07-18  245.660004  9.89
2017-07-19  246.990005  9.79
%matplotlib inline
data.plot(subplots=True, figsize=(12,7), grid=True)

                    SPY和VIX
这里写图片描述

再次验证了杠杆效应,标普出现下跌的时候,波动率指数就会上升.
 

# 对两列时间序列计算对数收益率
d_res = np.log(data / data.shift(1))
print d_res.head()
                 SPY       VIX
Date                          
2010-01-04       NaN       NaN
2010-01-05  0.002644 -0.035038
2010-01-06  0.000704 -0.009868
2010-01-07  0.004212 -0.005233
2010-01-08  0.003322 -0.050024
%matplotlib inline
d_res.plot(subplots=True, grid=True, figsize=(12,7))

 
                    对数收益率
这里写图片描述

# 回归分析
# S&P500作为自变量,VIX作为因变量
x = d_res['SPY'][1:]
y = d_res['VIX'][1:]
# 用一次多项式去拟合数据
poly_1 = np.polyfit(x, y, 1)
print poly_1
[ -6.36571378e+00   2.23540666e-03]

斜率为-6.365,截距为2.235,表现出强烈的负相关(杠杆效应)

# 对数收益率的散点图和拟合直线
%matplotlib inline
plt.plot(x, y, '.')
ax = plt.axis()   #x轴的取值范围
lx = np.linspace(ax[0], ax[1] + 0.01)
plt.plot(lx, np.polyval(poly_1, lx),'r', lw=2.0)
plt.grid(True)
plt.xlabel('SPY')
plt.ylabel('VIX')

这里写图片描述

# 标普指数和指数波动率之间的相关性
print d_res.corr()
          SPY       VIX
SPY  1.000000 -0.810071
VIX -0.810071  1.000000 

也反映除了强烈的负相关,但是相关性会伴随时间周期发生变化

# 计算窗口期为一年的,滑动相关系数
# Series.rolling(window=252).corr(other=<Series>)
mov_corr = d_res['SPY'].rolling(window=252).corr(d_res['VIX'])
%matplotlib inline
mov_corr.plot(grid=True, figsize=(12,7))

这里写图片描述

尽管相关性随着时间变化,但是仍是呈现出强烈的负相关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值