使用Tushare获取北上资金

本文介绍如何使用财经数据接口包tushare获取北上资金。

1. Tushare模块

最近需要一组北上资金的数据,在找的过程中了解到财经数据接口包Tushare,Tushare提供丰富的金融数据,现在还提供新冠疫情数据,详情见这里

沪深股票
指数
公募基金
期货
期权
债券
外汇
港股
美股
行业经济
宏观经济
另类数据
    新闻快讯
    新闻通讯(长篇)
    新闻联播文字稿
    上市公司公告原文
    新冠状肺炎感染人数
    全球新冠疫情数据

Tushare有沪深港通资金流向

2. 获取北上资金

获取北上资金的接口是moneyflow_hsgt,参数如下(end_date包含当天):

名称         类型   必选  描述
trade_date  str     N   交易日期 (二选一)
start_date  str     N   开始日期 (二选一)
end_date    str     N   结束日期

注册tushare,登录在个人主页 --> 接口TOKEN获取token,代码如下:

import tushare as ts

ts.set_token('a40c51af07653518cdb****47bb562e55428ef967549ca546a')

def main():
    # get the data
    pro = ts.pro_api()

    str_start_date ='20110114'
    str_end_date = '20200207'

    # scrapy data, and save to csv
    df = pro.moneyflow_hsgt(start_date=str_start_date, end_date=str_end_date )
    df.to_csv('north_bund.dat') # header=False

if __name__ == '__main__':
    main()

返回部分结果如下:

,trade_date,ggt_ss,ggt_sz,hgt,sgt,north_money,south_money
0,20210129,6059.12,6402.31,485.43,2047.4,2532.83,12461.43
1,20210128,3385.09,6833.47,-3660.4,-2744.17,-6404.57,10218.56
2,20210127,8485.39,15044.59,-1231.26,-23.47,-1254.73,23529.98
3,20210126,5764.63,8182.72,-2916.14,-625.06,-3541.2,13947.35
4,20210125,7332.62,11922.72,1626.93,304.07,1931.0,19255.34
5,20210122,3391.84,5974.49,-797.49,-1222.29,-2019.78,9366.33
6,20210121,7327.87,8935.58,2826.57,2851.34,5677.91,16263.45
7,20210120,6787.23,13500.6,-1357.36,4751.61,3394.25,20287.83
8,20210119,13121.37,13471.38,1139.06,-220.6,918.46,26592.75
9,20210118,9452.67,13517.97,-665.5,2302.09,1636.59,22970.64
10,20210115,6694.79,6738.44,-339.36,1140.7,801.34,13433.23
...

尽管Tushare沪深港通资金流向有给出各项数据的含义,但还不够清晰。结合沪深港通资金流向 | 东方财富网上的数据:

日期     当日成交净买额   买入成交额     卖出成交额

# 沪股通
2021-01-29  4.85亿元  272.71亿元    267.85亿元 
# 深股通
2021-01-29  20.47亿元 375.10亿元    354.62亿元
# 北上资金
2021-01-29  25.33亿元

moneyflow_hsgt返回的每项数据含义如下:

  • trade_date交易日期,类型str,格式为YYYYMMDD%Y%m%d
  • ggt_ss港股通(上海)
  • ggt_sz港股通(深圳)
  • hgt沪股通(百万元):即净买额, 买入成交额 – 卖出成交额
  • sgt深股通(百万元):即净买额, 买入成交额 – 卖出成交额
  • north_money北向资金(百万元):买入成交额 – 卖出成交额
  • south_money南向资金(百万元)

还有一点,每次最多返回300条记录。这是因为tushare的限制,采用积分制,获取不同的全部数据要求积分值不同,详情见关于权限。有多种方式获取积分,详情见平台积分。比如,每邀请一个用户获50分。

如果是在校学生和高校老师,那有福了。

在校学生和高校老师以及机构投资者,绑定个人手机号(用手机注册也算),加入Tushare专门的QQ群(Tushare高校和机构用户群 849918679),登录Pro个人主页提交个人和单位信息可获得免费支持,同时提供专业人才招聘供需交流场地

3. 获取全部历史数据

沪股通于2014-11-17正式生效,从2014-11-17到2021-01-29共1469个交易日,tushare每次最多返回300条,分多次获取,再拼在一起。代码如下:

import tushare as ts
import os
import datetime

ts.set_token('a40c51af07653518cdb****47bb562e55428ef967549ca546a')

def scrap_data():
    pro = ts.pro_api()

    str_start_date='20140101'

    #str_end_date = '20210131'
    today = datetime.date.today()
    str_end_date = today.strftime('%Y%m%d') 

    dt_start_date = datetime.datetime.strptime(str_start_date, '%Y%m%d')
    dt_end_date = datetime.datetime.strptime(str_end_date, '%Y%m%d')

    while dt_start_date <= dt_end_date:
        print(str_start_date, str_end_date)

        # scrapy data, and save to csv
        df = pro.moneyflow_hsgt(start_date=str_start_date, end_date=str_end_date)

        if df.empty:
            return

        out_filename = 'north_bund_v2.dat'
        df.to_csv(out_filename, mode='a', header = not os.path.exists(out_filename))

        # Update the last date from the last row 
        str_end_date =  df.loc[df.index[-1], 'trade_date']
        dt_end_date = datetime.datetime.strptime(str_end_date, '%Y%m%d') - datetime.timedelta(days=1)
        str_end_date = dt_end_date.strftime('%Y%m%d') 

搞定,得到沪港通自开闸以来的数据。

参考资料:

[1] 沪深港通资金流向 | Tushare大数据社区

[2] 平台积分 | Tushare大数据社区

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注