Code Monkey home page Code Monkey logo

tutake's Introduction

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有空间的限制,后续逐步更新上传

计划

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

tutake's People

Contributors

rmfish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

tutake's Issues

支持qlib直接使用数据

qlib中支持脚本的数据导入和更新,但是操作成本非常高,直接两种场景:

  1. 通过api直接使用tutake的数据
  2. 架设qlib-server 支持远程调用

支持接口的数据稽核

数据的准确性和完整性非常重要,所以需要支持每个接口的数据稽核比对能力,发现异常或是错误的数据

支持测试模式

支持测试模式,可以创建测试数据库,每个任务只下载小量数据,但是完成整个执行过程,可以快速验证整个环节的正确

写入性能提升

目前是单次tushare查询后,同步写入,在大任务时会出现写入耗时的问题,调整为支持合并多次查询后的批量写入

支持单次的任务的patch

支持记录每次任务的结果记录为patch,这样可以更利于回放,也便于后续的增量同步更新

扩展支持其他的存储引擎

目前使用sqlite,满足基本的功能,但是在部分查询场景下会出现查询的瓶颈,扩展支持不同的存储引擎,比如CK,Mysql等

项目相关问题

大佬,正好目前有这方面的需求,想向你学习一下,能不能加个微信交流
一是也想出一份力,看看说明文档能不能写的清楚点,或者哪个地方功能完善一下
二是没有tushare的账号,想跟大佬出点钱买一下api更新下数据
也希望和大佬学习一下
我的微信是chengkai__zhang,谢谢

支持定时任务自动合并或者处理数据

目前tushare的部分数据存在问题,比如monthly的前复权和后复权的 high,low等数据是错误的,单接口很难实现实现,最好的方式是通过定时任务,周期性生成对应的数据,所以需要添加定时任务,生成或者处理新的数据。

支持定时任务运行

接口配置定时任务,支持定时任务的管理,生成报告,支持错误记录和任务补偿

迁移到DuckDB,并提供数据下载及更新能力

目前适用sqlite作为存储,但是由于sqlite是个OLTP数据库,在存储和索引设计上是偏向事务性场景的,但是tutake的场景是分析性场景,且在列上有明显的数据压缩的优势,所以适合一个OLAP的数据库,所以将sqlite存储迁移到duckdb上,能实现几个需求:

  1. 使用更小的存储空间
  2. 可以直接在数据库上做数据分析,避免加载后再分析
  3. 可以支持定制的数据导出

基于以上的特性,可以按照年份进行数据导入导出的管理,方便下载使用

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.