做基金的量化,最最重要的是要有数据,所以指数的数据是所有分析的源头。
Baostock就提供比较全面的指数数据,具体可以参考《基于Python的指数基金量化投资 - 股票数据源baostock》。
指数数据也提供了相应的接口可供调取,通过API接口获取指数(综合指数、规模指数、一级行业指数、二级行业指数、策略指数、成长指数、价值指数、主题指数)K线数据,用户可以指定起始日期和截至日期。
调用的参数包含5个参数,code, fields, start, end, frequency,分别表示股票代码、返回包含的数据列、开始日期、结束日期和k线更新频率。
code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
fields:指示简称,支持多指标输入,以半角逗号分隔,填写内容作为返回类型的列。详细指标列表见历史行情指标参数章节。此参数不可为空;
start:开始日期(包含),格式“YYYY-MM-DD”,为空时取2015-01-01;
end:结束日期(不包含),格式“YYYY-MM-DD”,为空时取最近一个交易日;
frequency:数据类型,默认为d,日k线;d=日k线、w=周、m=月、5=5分钟、15=15分钟、30=30分钟、60=60分钟k线数据,不区分大小写;指数没有分钟线数据;周线每周最后一个交易日才可以获取,月线第月最后一个交易日才可以获取。
调用的方式很简单:
rs=bs.query_history_k_data_plus("sh.000001","date,code,open,high,low,close,preclose,volume,amount,pctChg",start_date='2017-01-01',end_date='2017-06-30',frequency="d")
上面这段代码就是表示查看sh.000001指数的数据,开始日期为2017-01-01,结束日期为2017-06-30,k先数据按日进行输出,返回数据包含date, code, open, high, low, close, preclose, volume, amount, pctChg
返回数据分别表示:
返回的具体形式如下:
通过获得指数后画出来的指数走势如下:
下面是具体的代码实现过程:
import baostock as bs
import pandas as pd
import datetime
import matplotlib.pyplot as plt
time_end =(datetime.datetime.now()).strftime('%Y-%m-%d')
print(time_end)
# 登陆系统
lg = bs.login()
# 显示登陆返回信息
time_end = '2021-10-30'
name_index = 'sh.000933'
rs = bs.query_history_k_data_plus(name_index,
"date,code,open,high,low,close,preclose,volume,amount,pctChg",
start_date='2000-01-01', end_date=time_end, frequency="d")
# 打印结果集
data_list = []
while (rs.error_code == '0') &rs.next():
#获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list,columns=rs.fields)
# 结果集输出到csv文件
result.to_csv("./exportfile/indexDataAll/"+ name_index + ".csv", index=False)
# index_info =pd.read_csv('./exportfile/indexDataAll/' + view_name + '.csv')
all_data_index =pd.read_csv('./exportfile/indexDataAll/' + name_index + '.csv')
data_index_p =all_data_index['close'].values[0:len(all_data_index['close']):1]
plt.figure()
plt.rcParams["axes.grid"] = True
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams["grid.linestyle"] =(3, 5)
plt.plot(data_index_p, color='tomato',linewidth=3)
plt.show()
# 登出系统
bs.logout()
如需代码里面用到的指数估值数据或者有疑问,大家可以留言,欢迎拍砖^_^
课程参考:网易云课堂 基于Python的量化指数基金投资
网友评论