IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用Tushare获取北上资金

    SparkAndShine发表于 2021-02-08 10:22:05
    love 0

    本文介绍如何使用财经数据接口包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分。

    • 我的邀请链接,欢迎点击:https://tushare.pro/register?reg=421286

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

    在校学生和高校老师以及机构投资者,绑定个人手机号(用手机注册也算),加入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大数据社区



沪ICP备19023445号-2号
友情链接