其实tushare就是tushare pro的老版本,现在tushare pro还在调试更新迭代中,有些功能老版本才有,所以咯,使用新版的时候还是需要多注意一下。
首先必须非常感谢tushare后面的团队,本着免费开源的思想促进整个互联网的进步,数据时代的来临也就意味着数据本身的价值会在后续的分析和挖掘中体现出来。
个人觉得tushare是一个非常高质量的数据源,有的时候觉得更新不是很及时,但是要求不要太高,别人免费的你还想咋个,对数据要求高的可以花钱买接口嘛,如果作为学习的话tushare是非常好的
pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple
如果使用的是tushare pro的数据,需要进行注册,这也是为了更高质量的服务社区,数据依然是免费的
注册地址: https://tushare.pro/register?reg=261052
tushare pro的数据采用的是积分制度,注册就会送100个积分,积分不会像电子货币一样会减少
积分越高能够获取的数据就会越多,这样也是为了更好的服务整个免费开源的生态,就是鼓励大家都为整个平台做贡献,个人觉得这也是可以理解的
进入自己的账号里面获取对应的token
点开 眼睛之后可以看到,这个相当于就是一个秘钥,自己复制好
import tushare as ts
ts.set_token('你自己的token')
pro = ts.pro_api()
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
非常简单,直接获取对应的端口数据,data中就是返回的数据,数据是直接从网上下载的,内部使用的pandas的DataFram数据结构.
量化交易先要有数据,数据都没有交易个铲铲.
对于接口,直接在网上查就行了,写的非常详细.
点进去自己看
直接复制过来就行了
这里没有什么可以多讲的
本人选择的是下载当前所有当前在市场中交易的所有股票的日线数据
使用到了mysql
pandas包
datetime包
mysql用于存储网络延迟过程中丢失的股票代码,下次下载的时候直接从mysql中读取这些代码再下载就可以了
别人免费数据提供,大家瞎搞骚操作,大量频繁下载容易造成别人的服务器GG,玩崩了大家都没得玩了,别人扛不住了以后就收费,那大家又只有回家玩泥巴了.
pandas是做数据分析的包,这里会对一些数据进行有效的处理
datetime是时间处理包
自己去pip install这些吧
先使用下载接口把所有股票代码下载下来,再调用前复权的接口分别下载好单独的数据,所有的tushare上的数据都保存为excel到本地文件里面
import tushare as ts
import pandas as pd
from datetime import datetime
import pymysql
LINK_MYSQL = {
'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'passwd': 'root',
'charset': 'utf8',
'db': 'test', # 自己的mysql库
}
ts.set_token('你自己的token')
pro = ts.pro_api()
这里先准备好,接下来自己定义函数
# 定义写入所有正在交易的股票信息
def write_all_stock_info():
global pro
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
# 进行写入操作
data.to_excel('./股票数据/当前已经存在的股票.xlsx', index=False)
return data
# 定义获取当前正在交易的所有股票基本信息
def get_all_stock_info():
data = pd.read_excel('./股票数据/当前已经存在的股票.xlsx')
return data
# 定义获取并写入当前天的日线数据
def write_one_stock_day_info(stock_data):
# 获取当天的日期
now_time = datetime.now().strftime('%Y%m%d')
data = ts.pro_bar(ts_code=f'{stock_data["ts_code"]}', adj='qfq', start_date=f'{stock_data["list_date"]}',
end_date=now_time)
try:
# 进行永久化存储,保存所有的数据到指定的文件夹中
data.to_excel(f'./股票数据/股票日线数据/{stock_data["ts_code"]}.xlsx', index=False)
print(f'股票:{stock_data["ts_code"]} 写入完成')
except:
# 连接数据库进行写入
cnn = pymysql.connect(**LINK_MYSQL)
cusur = cnn.cursor(pymysql.cursors.DictCursor)
sql = 'insert into stock(my_stock) values (%s)'
cusur.execute(sql, [stock_data["ts_code"]])
cnn.commit()
cnn.close()
print(f'股票:{stock_data["ts_code"]}下载失败')
# 定义获取所有的股票日线信息并更新数据
def write_all_stock_day_info():
stock_list = get_all_stock_info() # 获取当前所有的股票信息
stock_list['list_date'] = stock_list['list_date'].apply(lambda x: str(x))
stock_list['symbol'] = stock_list['symbol'].apply(lambda x: str(x))
stock_list.apply(write_one_stock_day_info, axis=1)
我的目录结构
里面使用到了pandas的处理手段,这个我就没有必要在这里逼逼了吧,网上有很多啊
整个函数定义完成之后自己想调用哪个就调用哪个,根本不需
网络延迟或者传输过程中有可能造成获取回来的数据为空,这个很正常,只要自己判断一波,把为空的记录下来,我这里是记录到mysql中,后续我还会再定义一个从mysql中读取数据,把下载失败的股票数据再次下载下来,如果成功了则将msyql中对应的记录删除,如果失败了就再次请求。
这里非常暴力的将3000多股票数据撸下来了,其中也是涉及到了一定的丢失数据,不过没关系,反正这些数据已经够用了,后续想想办法怎么抽取特征进行建模吧
里面的数据的样子
之后这些数据使用pandas进行读取,爽的一匹,想怎么玩怎么玩,有兴趣的可以画一下这些股票的k线图