本篇仅介绍指定股票的数据拉取,批量拉取将在之后的教程中进行介绍,首先你需要安装BaoStock,参见往期教程:
如何使用Python安装BaoStock?
该数据是从2015年开始的,优点是可以用Python直接调用。如果你想获得更全的日线数据,请参照教程用通达信获取(这个会比较麻烦,需要每天手动维护):
如何免费轻松获得最完整可靠的股票期货等历史数据?
周K线数据分为不复权,前复权和后复权三种,你根据自己的需要复制以下代码,它们的区别只是把adjustflag改了一下,技术分析的时候一般会选择前复权的数据:
1.前复权版本【adjustflag="2",frequency="w"】(优先选择)
import baostock as bsimport pandas as pd#### 登陆系统 ####lg = bs.login()# 显示登陆返回信息print('login respond error_code:'+lg.error_code)print('login respond error_msg:'+lg.error_msg)#### 获取沪深A股历史K线数据 ##### 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChgrs = bs.query_history_k_data_plus("sh.600000", "date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg", start_date='', end_date='', frequency="w", adjustflag="2")print('query_history_k_data_plus respond error_code:'+rs.error_code)print('query_history_k_data_plus respond error_msg:'+rs.error_msg)#### 打印结果集 ####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("C:\\Py\\sh600000_week_3.csv", index=False)print(result)#### 登出系统 ####bs.logout()
2.不复权版本【adjustflag="3",frequency="w"】(备选代码)
import baostock as bsimport pandas as pd#### 登陆系统 ####lg = bs.login()# 显示登陆返回信息print('login respond error_code:'+lg.error_code)print('login respond error_msg:'+lg.error_msg)#### 获取沪深A股历史K线数据 ##### 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChgrs = bs.query_history_k_data_plus("sh.600000", "date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg", start_date='', end_date='', frequency="w", adjustflag="3")print('query_history_k_data_plus respond error_code:'+rs.error_code)print('query_history_k_data_plus respond error_msg:'+rs.error_msg)#### 打印结果集 ####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("C:\\Py\\sh600000_week_2.csv", index=False)print(result)#### 登出系统 ####bs.logout()
3.后复权版本【adjustflag="1",frequency="w"】(备选代码)
import baostock as bsimport pandas as pd#### 登陆系统 ####lg = bs.login()# 显示登陆返回信息print('login respond error_code:'+lg.error_code)print('login respond error_msg:'+lg.error_msg)#### 获取沪深A股历史K线数据 ##### 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChgrs = bs.query_history_k_data_plus("sh.600000", "date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg", start_date='', end_date='', frequency="w", adjustflag="1")print('query_history_k_data_plus respond error_code:'+rs.error_code)print('query_history_k_data_plus respond error_msg:'+rs.error_msg)#### 打印结果集 ####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("C:\\Py\\sh600000_week_1.csv", index=False)print(result)#### 登出系统 ####bs.logout()
新建一个文件,命名为WEEK.py,并将上述代码中的任意一份粘贴到你的文件中。
修改代码中的红色部分为你需要的股票代码和输出路径,上证股票就是sh.6XXXXX,深证股票是sz.00XXXX,创业板股票是:sz.30XXXX,科创板是688XXX,上证指数是sh.000001,深证成指是sz.399001,中小板指是sz.399005,创业板是sz.399006。
我们以浦发银行(sh.600000)的前复权数据为例,也就是上边的第一份代码,打开命令提示行,输入python C:\PY\WEEK.py:
输入回车运行脚本,得到如下结果,说明拉取是成功,否则请检查程序的安装问题,以及网络:
另外在指定目录中生成了CSV的文件,这个文件很容易被Python,Matlab和各种程序解析:
参数名称 | 参数描述 | 说明 | 算法说明 |
date | 交易所行情日期 | 格式:YYYY-MM-DD | |
code | 证券代码 | 格式:sh.600000。sh:上海,sz:深圳 | |
open | 开盘价格 | 精度:小数点后4位;单位:人民币元 | |
high | 最高价 | 精度:小数点后4位;单位:人民币元 | |
low | 最低价 | 精度:小数点后4位;单位:人民币元 | |
close | 收盘价 | 精度:小数点后4位;单位:人民币元 | |
volume | 成交数量 | 单位:股 | |
amount | 成交金额 | 精度:小数点后4位;单位:人民币元 | |
adjustflag | 复权状态 | 不复权、前复权、后复权 | |
turn | 换手率 | 精度:小数点后6位;单位:% | |
pctChg | 涨跌幅(百分比) | 精度:小数点后6位 | 涨跌幅=[(区间最后交易日收盘价-区间首个交易日前收盘价)/区间首个交易日前收盘价]*100% |