- @[TOC](Tushare ID:500750)
- 前言
一、tushare是什么?
二、回报率的厚尾分布特性
- 1.引入库并读入数据
- 2.计算回报率 并画出回报率的分布函数
- 将分布函数画成双对数形式
三、回报率缺乏自相关
- 总结
21世纪是复杂性的世纪,复杂性的研究依赖于大数据。
经济系统作为复杂系统,虽然难以预测,但其中却不乏简单规律。
本文以股票为例,通过股票数据来发现经济系统中的简单规律。
股票数据的获取可能有很大种方法,其中最方便的就是使用tushare库。
一、tushare是什么?
Tushare是一个免费、开源的python财经数据接口包。
主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。
考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。
在Tushare 旧版 运行了3年后,Tushare Pro在大家的期待下,终于要跟大家见面了。
可以略显激动地说,Pro版数据更稳定质量更好了,我们提供的不再是直接从互联网抓取,而是通过社区的采集和整理存入数据库经过质量控制后再提供给用户。
但Pro依然是个开放的,免费的平台,不带任何商业性质和目的。
Tushare Pro对学生和科研人员很友好,大家科研加群联系管理人员,进行学生信息认证,定期完成季度任务,就能获取免费的积分啦。
二、回报率的厚尾分布特性 1.引入库并读入数据
代码如下(示例):
其中mytoken是要注册,获取免费学生积分后才有的。
import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
mytoken='****************************'
pro = ts.pro_api(mytoken)
# 获取交易日历信息
df = pro.daily(ts_code='000002.SZ', start_date='20000101', end_date='20210108')
2.计算回报率 并画出回报率的分布函数
代码如下(示例):
# average high and low
k5 = np.array(( df['high'] + df['low'] )/2 )
print(k5.shape)
# k5.hist( bins=80 )
r5 = np.log(k5[1::])-np.log(k5[0:-1])
# hist
divide_num=100
bins= np.linspace( -0.15 , 0.15 , divide_num )
n, bins, patches =plt.hist( r5 ,bins )
plt.xlabel('Normalized return')
plt.ylabel('Probability density')
plt.show()
将分布函数画成双对数形式
bins2=bins[0:-1]+(bins[1]-bins[0])/2
print(bins2[52])
# plt.plot( np.log(bins2[53::]) , np.log(n[53::]), 'o' )
plt.loglog( bins2[53::] , n[53::], 'o' )
plt.xlabel('Normalized return')
plt.ylabel('Probability density')
plt.show()
发现其在双对数坐标下为幂律分布(厚尾分布)
三、回报率缺乏自相关
import tushare as ts
import numpy as np
import matplotlib.pyplot as plt
mytoken='********************************'
pro = ts.pro_api(mytoken)
# 获取交易日历信息为例
# 茅台
df = pro.daily(ts_code='600519.SH', start_date='20000101', end_date='20210108')
df.shape
kday = np.array(( df['high'] + df['low'] )/2 )
rday = np.log(kday[1::])-np.log(kday[0:-1])
# -100~100
tauSet=list( range(-100,101,1) )
startPoint=300
window=1000
auto_corr=np.zeros([len(tauSet)],float)
def correlation(X, Y, sumX, sumY, L):
# 用于计算两个等长序列的相关系数
C1 = np.inner(X, Y) / L
C2 = sumX / L
C3 = sumY / L
sigmaX = np.sqrt(np.sum((X - C2) ** 2) / L)
sigmaY = np.sqrt(np.sum((Y - C3) ** 2) / L)
Cxy = (C1 - C2 * C3) / (sigmaX * sigmaY)
return Cxy
X = rday[startPoint : startPoint+window]
sumX=np.sum(X)
for i in range(len(tauSet)):
tau=tauSet[i]
if tau!=0:
Y = rday[startPoint+tau : startPoint+window+tau]
auto_corr[i]=correlation( X , Y ,sumX ,np.sum(Y) ,window)
else:
auto_corr[i]=1
plt.plot( tauSet ,auto_corr )
plt.xlabel('lag')
plt.ylabel('autocorrelation')
plt.show()
只有在time_lag=0时才相关.
本文简要介绍了tushare的使用,以及用tushare获取股票数据,来验证经济系统中的典型事实.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)