数据来源于 baostock(www.baostock.com),baostock提供了完整的数据接口,暂时不支持事实数据,但对于A股市场的量化分析是够用了。baostock的具体API使用,感兴趣的同学可以自行参考,处于统计需要,本分基于baostock的数据,实现了一段统计并列表一段年份周期内A股市场有过分红派息的股票。
def get_dividend_list(start_year, end_year):
# 获取截止前一天的所有股票代码
stk_code = get_all_stock()
#### baostock 登陆系统 ####
lg = bs.login(user_id="anonymous", password="123456")
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
dividend_list = []
dividend_compony_list = []
dividend_count_list = []
dividend_compony_count = 0
if start_year < 1990:
print('开始年份不能小于1990年')
return False
if start_year > end_year:
print('开始年份不能大于结束年份')
return False
for bk in stk_code:
stock_type = check_code_is_stock(bk)
if stock_type != 1:
print(bk+'不是股票类型额代码!')
continue
dividend_count = 0
for year in range(start_year, end_year+1):
year_str = str(year)
print(year_str)
rs_dividend = bs.query_dividend_data(code=bk, year=year_str, yearType="report")
while (rs_dividend.error_code == '0') & rs_dividend.next():
dividend_list.append(rs_dividend.get_row_data())
dividend_count += 1
if dividend_count > 0:
dividend_compony_count += 1
rs = bs.query_stock_basic(code=bk)
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
dividend_compony_list.append(rs.get_row_data())
dividend_count_list.append(dividend_count)
result_dividend = pd.DataFrame(dividend_list, columns=rs_dividend.fields)
result_dividend_compony = pd.DataFrame(dividend_compony_list, columns=rs.fields)
result_dividend_compony['dividend count'] = dividend_count_list
# 打印输出
print(result_dividend)
print(result_dividend_compony)
#### 结果集输出到csv文件 ####
result_dividend.to_csv("C:/history_Dividend_data.csv", encoding="gbk",index=False)
result_dividend_compony.to_csv("C:/history_Dividend_compony.csv", encoding="gbk",index=False)
#### 登出系统 ####
bs.logout()