Skip to content

rmfish/tutake

Repository files navigation

Tutake

Take data from Tushare, respect Tushare!

  1. 支持定时自动化的下载tushare数据,保证数据的同步
  2. 支持本地的数据查询,性能和效率更高,使用duckdb的列式存储,存储空间优化和查询性能表现非常优异
  3. 支持原生的查询,分析的维度更灵活(sql还是很强大的)
  4. 支持接口的扩展,常用的数据组合接口可以通过扩展的方式统一调用(目前增加了雪球热榜的接口)

背景

最近发现量化是件有趣的事情,但相关数据的采集是件颇为棘手的事情,幸亏有Tushare, 可发现需要进行全市场的回测远程的接口性能还是有点弱,所以思考如何把数据存储到本地

实现

因为Tushare api及doc完整度非常高,就有了本项目的想法和实践--基于Tushare的api doc自动化的生成Tushare数据的全量同步及增量更新的代码,复用Tushare接口查询本地数据,同时支持定时执行数据同步。

使用

该项目主要针对的用户有两种情况:

  1. 如果你有tushare账号且账号积分超过5000,强烈建议你根据自己的需求下载并使用数据。具体的配置和使用指南可以参考我们的 详细使用说明
  2. 对于没有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有空间的限制,后续逐步更新上传

计划

目前距离生产可用性的距离还很远,但是希望能不断优化接近高可用,当然还有更多的功能也会不断增加

About

Local data from tushare,将Tushare的数据同步保存到本地,同时支持Tushare接口查询本地数据,且支持qlib直接使用数据

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages