最近,在一门涉及python
的课上,老师讲解了Tushare
这款股票数据接口。经过数据猿进一步探索之后发现,Tushare
不但包含包含齐全的股票数据,还包含了其他领域的有用数据。除此之外,Baostock
也是一个非常优秀的开源股票借口,使用起来更加稳定快速。
今天,数据猿就来尝试获取一下这两个接口的股票数据吧。
目录如下:
文章目录
Baostock VS Tushare
首先展示一下二者对比表,本来打算这个表作为文末的总结,但是由于数据猿毕竟门外汉,想写那么专业心有余而力不足,就先这个总结将放在这里的,文中不再赘述具体指标了。
指标 | Baostock | Tushare |
---|---|---|
收费状况 | 免费 | 部分免费 |
数据字段 | 分钟K线;提供复权 | 领域齐全丰富 |
社区 | 仅针对股票市场 | 涉及多个投资领域;社区历史久、积累丰富 |
学习成本 | 门槛低,文档详尽,可快速上手 | 文档详细,社区内容丰富 |
代码鲁棒性 | 速度快 | 简洁 |
Baostock
案例一:上证指数日交易量、振幅、换手率
第一步:导入baostock库,并登录
import baostock as bs
import pandas as pd
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
第二步:接口配置
rs = bs.query_history_k_data("000001.SH", "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
start_date='2010-01-01', end_date='2019-12-31', frequency="d", adjustflag="3")
print('query_history_k_data respond error_code:'+rs.error_code)
print('query_history_k_data respond error_msg:'+rs.error_msg)
补一个日线指标参数(包含停牌证券)
参数名称 | 参数描述 | 说明 |
---|---|---|
date | 交易所行情日期 | 格式:YYYY-MM-DD |
code | 证券代码 | 格式:sh.600000。sh:上海,sz:深圳 |
open | 今开盘价格 | 精度:小数点后4位;单位:人民币元 |
high | 最高价 | 精度:小数点后4位;单位:人民币元 |
low | 最低价 | 精度:小数点后4位;单位:人民币元 |
close | 今收盘价 | 精度:小数点后4位;单位:人民币元 |
preclose | 昨日收盘价 | 精度:小数点后4位;单位:人民币元 |
volume | 成交数量 | 单位:股 |
amount | 成交金额 | 精度:小数点后4位;单位:人民币元 |
adjustflag | 复权状态 | 不复权、前复权、后复权 |
turn | 换手率 | 精度:小数点后6位;单位:% |
tradestatus | 交易状态 | 1:正常交易 0:停牌 |
pctChg | 涨跌幅(百分比) | 精度:小数点后6位 |
peTTM | 滚动市盈率 | 精度:小数点后6位 |
psTTM | 滚动市销率 | 精度:小数点后6位 |
pcfNcfTTM | 滚动市现率 | 精度:小数点后6位 |
pbMRQ | 市净率 | 精度:小数点后6位 |
isST | 是否ST | 1是,0否 |
第三步:打印结果为pandas
的Dataframe
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
result
示例
date | code | open | high | low | close | preclose | volume | amount | adjustflag | turn | tradestatus | pctChg |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2010/1/4 | sh.000001 | 3289.75 | 3295.279 | 3243.319 | 3243.76 | 3277.139 | 1.094E+10 | 1.338E+11 | 3 | 0.009476 | 1 | -1.018538 |
2010/1/5 | sh.000001 | 3254.468 | 3290.512 | 3221.462 | 3282.179 | 3243.76 | 1.261E+10 | 1.619E+11 | 3 | 0.010918 | 1 | 1.184395 |
2010/1/6 | sh.000001 | 3277.517 | 3295.868 | 3253.044 | 3254.215 | 3282.179 | 1.237E+10 | 1.58E+11 | 3 | 0.010705 | 1 | -0.851991 |
2010/1/7 | sh.000001 | 3253.991 | 3268.819 | 3176.707 | 3192.776 | 3254.215 | 1.287E+10 | 1.572E+11 | 3 | 0.011138 | 1 | -1.887988 |
2010/1/8 | sh.000001 | 3177.259 | 3198.92 | 3149.017 | 3195.997 | 3192.776 | 9.838E+09 | 1.217E+11 | 3 | 0.008516 | 1 | 0.10089 |
2010/1/11 | sh.000001 | 3301.611 | 3306.751 | 3197.328 | 3212.75 | 3195.997 | 1.363E+10 | 1.776E+11 | 3 | 0.011601 | 1 | 0.524185 |
2010/1/12 | sh.000001 | 3205.705 | 3275.202 | 3180.085 | 3273.966 | 3212.75 | 1.407E+10 | 1.739E+11 | 3 | 0.011969 | 1 | 1.90541 |
2010/1/14 | sh.000001 | 3183.381 | 3219.016 | 3165.596 | 3215.55 | 3172.658 | 1.36E+10 | 1.68E+11 | 3 | 0.011552 | 1 | 1.351929 |
2010/1/15 | sh.000001 | 3217.19 | 3241.815 | 3197.221 | 3224.152 | 3215.55 | 1.205E+10 | 1.514E+11 | 3 | 0.010239 | 1 | 0.267514 |
第四步:结果输出并存入CSV
#### 结果集输出到csv文件 ####
result.to_csv("D:\\history_A_stock_k_data.csv", index=False)
print(result)
#### 登出系统 ####
bs.logout()
Tushare
案例二:南方传媒和浙江传媒股票对比
第一步,导入Tushare等相关库
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
import warnings
warnings.filterwarnings("ignore")
第二步,接口配置
#股票代码、起止日期可替换
caixin = ts.get_hist_data('600633', start='2017-07-01', end='2020-05-08')
caixin
nanfang = ts.get_hist_data('601900',start='2017-07-01', end='2020-05-08')
nanfang
第三步,二者收盘价
收盘价形成新的Dataframe
#收盘价close
data = {'浙江传媒财新': caixin.close, '南方传媒':nanfang.close}
df = pd.DataFrame(data)
df
排序
#排序
df.sort_values(by='date',ascending=True,inplace=True)
df
第四步,可视化
收盘价可视化
#pandas支持matplotlib的,直接使用df.plot(kind='line')画折线图
import matplotlib.pyplot as plt
%matplotlib inline
df.plot(kind='line')
plt.xticks(rotation = '45')
plt.show()
单支股票股价集中度可视化
# 股价集中趋势可视化
import seaborn as sns
df.round(0)
plt.style.use('ggplot')
df['浙江传媒财新'].plot(kind='hist',bins=30,normed = True)
df['浙江传媒财新'].plot(kind='kde')
plt.show()
单只股票股价拟合可视化
df_pre_caixin = df['浙江传媒财新']
pre_caixin = pd.DataFrame(df_pre_caixin)
pre_caixin['MA5'] = df_pre_caixin.rolling(5).mean()
pre_caixin['MA20'] = df_pre_caixin.rolling(20).mean()
pre_caixin['MA60'] = df_pre_caixin.rolling(60).mean()
pre_caixin.plot()
小结:
二者各有千秋,适合自己需求的才是最好的;
数据猿是门外汉,可能表述上多有错误,还请经管类的朋友多多指导!
BTW,有意交流的,可以在公众号后台回复0,数据猿拉你进群!
参考资料:
Tushare官方文档:https://tushare.pro/document/2
Baostock官方文档:http://baostock.com/baostock/index.php
往期精品:
个人博客「源来是这样」
https://www.cnblogs.com/readiay/p/12846944.html
文字编辑:数据猿Riggle
本文首发于vx公众号:文科数据员