Python量化交易08——利用Tushare获取日K数据
总有同学问我要数据...很多第三方接口都能直接获取数据的,本次介绍怎么用Tushare库获取A股日k线行情的数据。
Tushare有两个版本,老版现在快弃用了。
新版的官网链接在这:Tushare数据
需要注册一个账号,然后改一下资料,就可以免费试用获取日K线接口的权限了。
具体官网上都教得很清楚了,多看看教程先自学一下...
代码实现
导入包,设置token:,还有开始和结束的时间
import tushare as ts
import pandas as pd
import numpy as np
ts.set_token('*********************************')
start_date='20220701'
end_date='20230301'
token就是在官网注册账户得到的,表示你的账户的编号。
需要获取的股票:
dict1 = {'中国平安':'000001.SZ', '招商银行':'001696.SZ', '万科A':'000002.SZ', '中兴通讯':'000063.SZ', '海康威视':'002415.SZ', '平安银行':'000001.SZ', '中国国旅':'601888.SH','兴业银行':'601166.SH', '中国建筑':'601668.SH'}
dict2 = {'中国人寿':'601628.SH', '山东黄金':'600547.SH', '华泰证券':'601688.SH', '中信证券':'600030.SH', '药明康德':'603259.SH', '海螺水泥':'600585.SH', '国泰君安':'601211.SH', '中国平安':'601318.SH'}
# 将两个字典合并为一个字典
merged_dict = {**dict1, **dict2}
print(len(dict1),len(dict2),len(merged_dict))
merged_dict
我这随便整了两个股票名称和编号的字典,然后合并。
将股票代码合并:
stocks=list(merged_dict.values())
stocks=','.join(stocks)
stocks
获取多个股票的日K行情:
pro = ts.pro_api()
#多个股票
df = pro.daily(ts_code=stocks, start_date=start_date, end_date=end_date)
查看:
df
可以看到 总共有2592条记录。
有同学又会问 每个变量是什么意思呢,可以查看官网的指引:
筛选
有的同学又要说了,上面的结果是所有股票混在一起了,我不方便看怎么办?
那就筛选一下呀........就是很简单很基础的pandas语法:
例如我只想要000002.SZ这个股票的行情数据
两种方法:
# 方法一:使用布尔索引
df[df['ts_code'] == '000002.SZ']
# 方法二:使用 query 函数
df.query('ts_code == "000002.SZ"')
一样的效果。
由于上面的数据中的trade_date不是标准的日期,pct_chg涨跌幅是百分比,我们处理一下:
df['trade_date']=pd.to_datetime(df['trade_date']) #转为时间
df['pct_chg']=df['pct_chg']/100 #转为小数
然后如果还有很多想其他筛选的条件,可以像下面这个格式一样写:
例如我要筛选trade_date在2023-01-01之后,并且pct_chg在2%以上,vol大于300000的记录,而且只取股票代码,日期,收盘价,成交量四个变量,其他变量不要
df.loc[(df['trade_date'] > '20230101') & (df['pct_chg'] > 0.02) & (df['vol'] > 300000),['ts_code','trade_date','close','vol']]
获取周行情或者月行情
Tushare库要用这个功能可能需要一定的积分才能用,不是免费白嫖的。
其实很简单就是前面获取日k的时候是pro.daily,现在改成pro.weekly就行,官网例子:
df = pro.weekly(ts_code='000001.SZ', start_date='20180101', end_date='20181101', fields='ts_code,trade_date,open,high,low,close,vol,amount')
月份就是:
pro.monthly
Tushare这个包做的是很好的,功能数据种类都很全,但是其他什么指数数据,基金数据,期货数据,外汇数据都不免费....对于学生来说就很昂贵。