栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

金融时间序列分析实验心得_金融时间序列数据举例?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

金融时间序列分析实验心得_金融时间序列数据举例?

一、金融数据的获取与处理

导入包,通过pandas_datareader模块来从yahoo获取金融数据信息,应该是网站的问题,显示超时,获取不到数据,所以本文数据可以直接从文末尾的百度网盘中提取。

import datetime
import pandas as pd
import pandas_datareader.data as web
import numpy as np
import math
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt

# start_date=datetime.datetime(2000,1,1)
# end_date=datetime.datetime(2014,9,2s6)
# dax_data=web.DataReader('^GDAXI',data_source='yahoo',start=start_date,end=end_date)
# dax_data.to_csv('dax_data.csv',index=True)

接下来直接读取数据csv文件进行实验

# 导入数据
dax_data=pd.read_csv(r'C:UsershpDesktop数据dax_data.csv')
# 查看数据的基本信息
print(dax_data.info())

# 绘制收盘价图形
dax_data=dax_data.set_index('Date',drop=True)
dax_data['Close'].plot(subplots=True,style='b',figsize=(10,5))

# 计算收益率
dax_data['Ret_Loop']=0.0
for i in range(1,len(dax_data)):
    dax_data['Ret_Loop'][i]=np.log(dax_data['Close'][i]/dax_data['Close'][i-1])
dax_data#输出数据查看

# 使用向量化的方法,用shift来获得滞后一期的数据
dax_data['Return']=np.log(dax_data['Close']/dax_data['Close'].shift(1))
print(dax_data[['Close','Ret_Loop','Return']].head(10))

注:Dataframe.shift(periods=1, freq=None, axis=0);periods:类型为int,表示移动的幅度,可以是正数,也可以是负数,默认值是1,1就表示移动一次,注意这里移动的都是数据,而索引是不移动的,移动之后没有对应值的,就赋值为NaN。计算结果一致,但是效率提高

# 绘制图形
dax_data.drop('Ret_Loop',inplace=True,axis=1)
dax_data[['Close','Return']].plot(subplots=True,style='b',figsize=(10,5))

计算42天和252天移动平均收盘价;Pandas:Dataframe.rolling(window=3).mean()滑动窗口值设为多少就是将相邻的几个数做均值处理。

# 移动平均可以用rolling函数
dax_data['42d']=dax_data['Close'].rolling(42).mean().values
dax_data['252d']=dax_data['Close'].rolling(252).mean().values
print(dax_data[['42d','252d']].tail())

# 绘图
dax_data[['Close','42d','252d']].plot(figsize=(10,5)) 

接下来计算移动平均历史波动率并绘制图形

# 移动平均历史波动率
dax_data['MOV_vol']=dax_data['Return'].rolling(252).std()*math.sqrt(252)
dax_data[['Close','MOV_vol','Return']].plot(subplots=True,style='b',figsize=(10,5))

三个图分别为收盘价、移动平均率的收益率的波动率和收益率

二、回归分析 

使用ts_data.xlsx数据集
EURO STOXX : 欧洲蓝筹股票历史日度收盘价
VSTOXX:VSTOXX波动率指数的历史日度收盘价
计算的基础是蓝筹指数的隐含波动率

# 回归分析
es=pd.read_excel(r'C:UsershpDesktop数据ts_data.xlsx',sheet_name=0)
print(es.info())

# 将date作为索引
es=es.set_index('Date',drop=True)
# 读取另一个sheet
vs=pd.read_excel(r'C:UsershpDesktop数据ts_data.xlsx',sheet_name=1)
print(vs.info())

# 将date作为行索引
vs=vs.set_index('Date',drop=True)

# 通过日期合并股票数据和波动率数据
data1=es[['SX5E']][(es.index>datetime.datetime(1999,1,1))&(es.index data2=vs[['V2TX']][(vs.index>datetime.datetime(1999,1,1))&(vs.index data=data1.join(data2)
data.columns=['EUROSTOXX','VSTOXX']
print(data.tail())

# 处理缺失值,使用前一个数字填充
data=data.fillna(method='ffill')
print(data.info())

print(data.tail())

# 绘图
data.plot(subplots=True,grid=True,style='b',figsize=(10,5)) # 取出对数收益率
rets=np.log(data/data.shift(1))
print(rets.head())

# 绘图
rets.plot(subplots=True,grid=True,style='b',figsize=(10,5))

#  查看两个指标的相关性
print(rets.corr())

从相关系数矩阵可以看到,股票指数和波动率指数具有非常高的负相关性

# 建立模型
myfit=ols('VSTOXX~EUROSTOXX',data=rets).fit()
print(myfit.summary())

调整后的R^2为0.54,有一定的准确率,模型表达式y=-2.8358x

# 绘制拟合图形
plt.figure()
plt.scatter(rets['EUROSTOXX'][1:],rets['VSTOXX'][1:],color='r')
plt.plot(rets['EUROSTOXX'][1:],myfit.fittedvalues,color='b')
plt.grid()
plt.show()

csv数据链接:https://pan.baidu.com/s/1PhVQtvHjnnVwprBjtAeQEQ 
提取码:1234 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号