Take data from Tushare, respect Tushare!
- 支持定时自动化的下载tushare数据,保证数据的同步
- 支持本地的数据查询,性能和效率更高,使用duckdb的列式存储,存储空间优化和查询性能表现非常优异
- 支持原生的查询,分析的维度更灵活(sql还是很强大的)
- 支持接口的扩展,常用的数据组合接口可以通过扩展的方式统一调用(目前增加了雪球热榜的接口)
最近发现量化是件有趣的事情,但相关数据的采集是件颇为棘手的事情,幸亏有Tushare, 可发现需要进行全市场的回测远程的接口性能还是有点弱,所以思考如何把数据存储到本地
因为Tushare api及doc完整度非常高,就有了本项目的想法和实践--基于Tushare的api doc自动化的生成Tushare数据的全量同步及增量更新的代码,复用Tushare接口查询本地数据,同时支持定时执行数据同步。
该项目主要针对的用户有两种情况:
- 如果你有tushare账号且账号积分超过5000,强烈建议你根据自己的需求下载并使用数据。具体的配置和使用指南可以参考我们的 详细使用说明
- 对于没有tushare账号或者账号积分较低的用户,你可以选择下载我们提供的数据并进行使用。
我们的数据保存在 git lfs中,可以通过 git lfs clone 获取。由于Github LFS的配额限制,目前我们只上传了截止到2023年12月14日的daily/stock_basic/adj_factor等数据,这些数据主要包含股票的日数据处理分析。 数据文件在项目的 database 目录中,下载后你可以按照以下的指南进行下载和使用。 首先,运行 main.py,代码如下:
def quick_start():
tushare = tt.Tutake().tushare_api()
print("========查询股票列表========")
print(tushare.stock_basic())
print("========查询股票日K数据========")
print(tushare.daily())
print("========查询股票复权因子========")
print(tushare.adj_factor())
print("========查询股票000002.SZ后复权日K数据=========")
print(tushare.pro_bar(ts_code='000002.SZ', adj='hfq'))
print("========使用sql自定义查询:20221230日收盘价大于开盘价的5个股票日K数据=========")
print(tushare._daily.sql("select * from {table} where trade_date='20221230' and close>open limit 5"))
if __name__ == '__main__':
# 加载数据,这个会将database中的数据生成数据库文件,执行一次即可,或者database中的数据有更新的再执行即可
load_data()
quick_start()
在执行 main.py 之前,需要通过调用 load_data() 函数来加载 database 目录中的数据生成数据库文件,一般只需要执行一次,除非 database 中的数据有更新再执行即可。 运行 quick_start() 函数后,就可以进行数据查询了,例如查询股票列表、查询股票日K数据、查询股票复权因子等等。还可以根据需要构建SQL查询语句来进行定制化查询
显示日志如下,完成了数据库的加载和本地查询:
Create tushare_adj_factor with tushare_adj_factor.parquet
Create tushare_daily with tushare_daily-1990~1999.parquet
COPY tushare_daily with tushare_daily-2000~2009.parquet
COPY tushare_daily with tushare_daily-2010~2019.parquet
COPY tushare_daily with tushare_daily-2020~2022.parquet
COPY tushare_daily with tushare_daily-2023~.parquet
Create tushare_stock_basic with tushare_stock_basic.parquet
Tutake config file [None] is not exists. use the default configfile. /mnt/d/Develop/projects/Github/tutake/config.yml
========查询股票列表========
ts_code symbol name area ... list_status list_date delist_date is_hs
0 000001.SZ 000001 平安银行 深圳 ... L 19910403 None S
1 000002.SZ 000002 万科A 深圳 ... L 19910129 None S
2 000004.SZ 000004 国华网安 深圳 ... L 19910114 None N
3 000005.SZ 000005 ST星源 深圳 ... L 19901210 None N
4 000006.SZ 000006 深振业A 深圳 ... L 19920427 None S
... ... ... ... ... ... ... ... ... ...
5319 873679.BJ 873679 前进科技 浙江 ... L 20231110 None N
5320 873693.BJ 873693 阿为特 上海 ... L 20231027 None N
5321 873703.BJ 873703 广厦环能 北京 ... L 20231205 None N
5322 873726.BJ 873726 卓兆点胶 江苏 ... L 20231019 None N
5323 873833.BJ 873833 美心翼申 重庆 ... L 20231108 None N
[5324 rows x 15 columns]
========查询股票日K数据========
ts_code trade_date open high ... change pct_chg vol amount
0 873833.BJ 20231214 14.64 15.31 ... 0.76 5.2270 44108.90 65738.804
1 873726.BJ 20231214 30.37 31.49 ... 0.14 0.4608 17083.15 52606.482
2 873703.BJ 20231214 36.16 39.24 ... 2.21 6.0218 49075.05 183247.591
3 873693.BJ 20231214 42.76 44.89 ... 1.57 3.6242 27040.43 118985.113
4 873679.BJ 20231214 23.35 24.99 ... 1.74 7.4968 37798.62 91294.840
... ... ... ... ... ... ... ... ... ...
5995 688126.SH 20231213 17.28 17.39 ... -0.16 -0.9243 58752.67 101511.013
5996 688125.SH 20231213 37.43 37.65 ... 0.10 0.2684 8628.23 32227.196
5997 688123.SH 20231213 64.50 66.00 ... -0.50 -0.7702 18186.91 118470.362
5998 688122.SH 20231213 50.23 52.12 ... 0.65 1.2940 61407.39 315703.394
5999 688121.SH 20231213 23.48 23.57 ... -0.28 -1.1900 6609.85 15454.148
[6000 rows x 11 columns]
========查询股票复权因子========
ts_code trade_date adj_factor
0 873833.BJ 20231215 1.000
1 873726.BJ 20231215 1.000
2 873703.BJ 20231215 1.000
3 873693.BJ 20231215 1.000
4 873679.BJ 20231215 1.000
... ... ... ...
5995 688155.SH 20231214 1.006
5996 688153.SH 20231214 1.000
5997 688152.SH 20231214 1.494
5998 688151.SH 20231214 1.018
5999 688150.SH 20231214 1.008
[6000 rows x 3 columns]
========查询股票000002.SZ后复权日K数据=========
ts_code trade_date open ... pct_chg vol amount
0 000002.SZ 20231214 1938.7817 ... -1.3158 611202.34 6.477785e+05
1 000002.SZ 20231213 1971.4884 ... -3.3606 865832.43 9.275875e+05
2 000002.SZ 20231212 1964.2202 ... 3.5748 1140691.18 1.243910e+06
3 000002.SZ 20231211 1940.5987 ... -1.3915 819722.43 8.636450e+05
4 000002.SZ 20231208 1975.1225 ... -1.1009 493010.50 5.324591e+05
... ... ... ... ... ... ... ...
5995 000002.SZ 19980508 NaN ... NaN 23335.00 3.228586e+04
5996 000002.SZ 19980507 NaN ... NaN 29088.00 4.084066e+04
5997 000002.SZ 19980506 NaN ... NaN 26451.00 3.734224e+04
5998 000002.SZ 19980505 NaN ... NaN 24847.00 3.581335e+04
5999 000002.SZ 19980504 NaN ... NaN 60605.00 8.786420e+04
[6000 rows x 11 columns]
========使用sql自定义查询:20221230日收盘价大于开盘价的5个股票日K数据=========
ts_code trade_date open high ... change pct_chg vol amount
0 002198.SZ 20221230 6.39 6.57 ... 0.12 1.8750 101579.12 65646.164
1 002199.SZ 20221230 6.36 6.43 ... 0.10 1.5898 38684.00 24640.014
2 002194.SZ 20221230 9.13 9.26 ... 0.11 1.2088 101101.41 92895.425
3 002181.SZ 20221230 5.28 5.52 ... 0.15 2.8249 547665.70 297495.407
4 002195.SZ 20221230 1.99 2.02 ... 0.03 1.5152 444728.72 89088.620
[5 rows x 11 columns]
因为还有很多接口我暂时用不上,所以就没有实现,感兴趣的可以参考文件自行扩展,成本非常低,参考文档 https://github.com/rmfish/tutake/wiki/%E5%A2%9E%E5%8A%A0%E6%88%96%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8E%A5%E5%8F%A3
欢迎提交PR
因为数据量比较大,全量的数据超过数GB,但是tushare有限速限量的各种约束,所以建议使用多个高等级的账号(5000积分以上的账号),工程支持配置多个账号,然后自动适配限流下载,全量数据下载完后,每天的增量数据量很小,通常10分钟内下载完毕, 目前调试的接口是按照个人需要生成的,还有很多接口没有生成,如果有需要的可以留言,或者阅读代码自行添加。目前的接口基本覆盖了股票、基金、指数、期货相关的接口
由于之前的数据存储使用了sqlite,如果使用了之前的版本代码,可以自行查询将sqlite升级为duckdb的存储,sqlite的版本后续也不会继续维护
完整的数据文件会比较大,github的lfs有空间的限制,后续逐步更新上传
目前距离生产可用性的距离还很远,但是希望能不断优化接近高可用,当然还有更多的功能也会不断增加