使用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分。
- 我的邀请链接,欢迎点击: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')
搞定,得到沪港通自开闸以来的数据。
参考资料: