提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本人是在校物理专业大学生,在牛市的行情下接触了股市,看着股市当中各种各样数据顿时感觉头疼无比。适逢其时,量化投资便映入眼帘,在学习量化的过程中,苦于无法直接获得股市数据,在上网冲浪的过程发现了tushare这一利器。
Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、处理到数据存储的过程,数据多样易获取,在数据分析,机器学习,股票预测等领域都可以被广泛的应用。从tushare获取到的数据为dataframe格式,无需重新对数据进行处理,可以直接将数据存储至Oracle、MySQL,MongoDB、HDF5、CSV等中。
官网链接如下:https://tushare.pro/。其包括股票,基金,期权,债券,期货等多种数据。数据种类如下:https://tushare.pro/document/1?doc_id=108
笔者tushare ID:441542
提示:以下是本篇文章正文内容,下面案例可供参考
一、Python以及tushare安装
Python具体的安装流程可以参考tushare官网https://tushare.pro/document/1?doc_id=29,其中有详细的介绍,在此就不一一赘述。tushare可以作为一个第三方库安装到python环境中,可以通过pip进行安装,
pip install tushare
通过如下代码确认tushare安装成功。
import tushare as ts
二、数据获取代码介绍
1.股票日K获取
本人小白,所以就获取了一些沪市和深市的股票,下面就是我的获取代码:
import tushare as ts
ts.set_token('xxxxxxxxxxxxxxxxxxx') #此处需要自己注册tushare之后就可以拥有自己的token了
pro = ts.pro_api()
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
ts_all = data['ts_code'].values
name_all = data['symbol'].values
num0 = ts_all.shape[0]
ts_new = [ ]
name_new = [ ]
for i in range(num0):
if ts_all[i][0:2] == '00' or ts_all[i][0:2] == '60':
ts_new.append(ts_all[i])
name_new.append(name_all[i])
num1 = len(ts_new)
接下来,我把他们再存到本地,方便进一步的处理,我保存的格式为txt格式:
for j in range(num1):
df = pro.daily(ts_code=ts_new[j])
df.to_csv('data_daily\\' + name_new[j] + '.txt',sep='\t',index=False)
2.公司赢利状况获取
其次,股市当中我们关注的比较多的就是公司盈利的状况,数据的获取与上述内容大同小异,一定的记得加一个延时,不然会一直报错,如果积分不够权限,可以加群联系管理员,可以免费获取积分:
import tushare as ts
import time
ts.set_token('xxxxxxxxxxxxxxxxxxx')
pro = ts.pro_api()
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
ts_all = data['ts_code'].values
name_all = data['symbol'].values
num0 = ts_all.shape[0]
ts_new = [ ]
name_new = [ ]
for i in range(num0):
if ts_all[i][0:2] == '00' or ts_all[i][0:2] == '60':
ts_new.append(ts_all[i])
name_new.append(name_all[i])
num1 = len(ts_new)
for j in range(num1):
ep = pro.express(ts_code=ts_new[j])
ep.to_csv('data_express\\' + name_new[j] + '.txt',sep='\t',index=False)
time.sleep(1.5)
三、傅里叶变换检验
离散傅里叶变换检验,一般称为频谱检验,是随机数发生器最著名的检验之一。该检验由Donald Knuth 开发,该检验通过使用离散傅里叶变换将二进制序列从时间维度变换到频率维度来检查。完成此操作后,检验将查找变换后的序列是否存在周期性特征,若存在,则表明该序列与真实随机序列存在偏差。代码如下:
def spectral(self, bin_data: str):
"""
:param bin_data: a binary string
:return: the p-value from the test
"""
n = len(bin_data)
plus_minus_one = []
for char in bin_data:
if char == '0':
plus_minus_one.append(-1)
elif char == '1':
plus_minus_one.append(1)
# 计算离散傅里叶变换
s = sff.fft(plus_minus_one)
modules = numpy.abs(s[0:n /2])
tau = numpy.sqrt(numpy.log(1/0.05) * n)
# 理论峰值的个数
count_n0 = 0.95 * (n / 2)
# 实际峰值的个数(m > T)
count_n1 = len(numpy.where(moduls < tau)[0])
# 计算p值
d = (count_n1 - count_n0) /numpy.sqrt(n * 0.95 * 0.05 / 4)
p_val = spc.erfc(abs(d) / numpy.sqrt(2))
return p_val