DoguWiki

Doghole's Personal Wiki

标签 Tushare 下的 Wiki

轮询

tushare 按照查询参数的不同,一般可以分为按时间轮询和按股票轮询的方式。为了尽可能减少请求次数、缩短请求时间、减轻 tushare 服务器查询压力,我们可以按照这两种方式对数据进行初始化和更新。

按时间轮询

按时间轮询主要用于刚建立数据库后,批量下载历史数据的情况,以及每日的更新。按时间轮询的前提,需要先调用 交易日历 接口,将交易日历数据保存在本地。假设已经将数据保存在本地,再进行以下步骤。

以更新 日线行情 为例,当提供trade_date参数而不指定ts_code参数时,会将trade_date日的所有股票日线全部获取。单次请求条数限制为 5000 条,对单日内数据获取绰绰有余。

我们根据获取的交易日历,轮询需要的时间范围的所有开市日,将其循环传给trade_date参数,按日获取当日的所有股票日线,存入数据库中即可。

按股票轮询

当需要更新的股票属于个别大范围缺失日线行情的股票时,或需要初始化个股分钟数据时,可以采用该方式对股票行情进行更新。

日线

当行情接口提供了ts_codestart_dateend_date以后,则可以查询单支股票在指定交易日范围内的所有行情。

按范围轮询的前提是已经将交易日历数据和 股票列表 保存在本地,而后获取当前股票的上市日期list_date和退市日期delist_date,作为start_dateend_date。若delist_date为 null 则说明该股票还未退市,end_date取最新一个交易日。

得到初始的start_dateend_date以后,需要计算两者之间交易日个数。因为日线行情接口单次请求条数为 5000 条,若范围内交易日个数大于 5000 的,需要进行交易日范围的切割,进行单次请求后,再将请求参数调整至下一个 5000 条范围,直至更新到end_date为止。

分钟线

tushare 高级版提供了分钟线接口(参考 通用行情接口分钟权限说明 )。当调用分钟线数据时,上述的按股票轮询方式要进行一定的修改。

沪深 A 股分钟线请求限制为单次 8000 条数据,对于可能的freq为 1、5、15、30、60分钟,单股单日内最大数据量分别为max = 240/freq + 1,则切割范围时,需要保证指定范围内的条数小于 8000 条,并将end_date向下取整。

如对于freq为 1 分钟的情况,8000 / 241 ≈ 33.195,向下取整即为 33 个交易日,即单股单次 1 分钟行情最大可请求 33 个交易日,而非上文日线数据中的 5000 个交易日。再按照上文的逻辑进行轮询即可。

其他

呃,没有考虑到每次查询时has_more字段(见 返回结构 ),因为按照目前上面提到的方式,已经确保了每次请求的数据总量不会超过单次请求的最大数据量,所以has_more应该不会为true,除非哪天 A 股上市超过 5000 家了,不过到时候 tushare 接口的单次请求权限应该也会超过 5000 吧(逃)。

119 0 880 2 m 12 s Read All

Tushare Request & Response

请求和返回

请求结构

基本的请求结构如下:

{
    "api_name": "apiName",
    "params"  : {Object of params},             // 请求参数
    "fields"  : [List of fields(can be null)],  // 请求的字段
    "token"   : "Your tushare token"
}

基本上所有请求都按照这个结构。

返回结构

{
    "data": {
        "fields": [List of fields],
        "items" : [List of item's list], // 每个独立 item 长度和位置与 fields 一致
        "has_more": Boolean // 是否还有更多数据
    },
    "msg": null
}

相当于item是动态长度,可以通过遍历fields赋 key 的方式,将每个item转化为一个 JSONObject。

data为 null 时,意味着发生了错误,可以取msg查看失败原因。

265 0 138 20 s Read All