【量化】实战恒有数获取指数定投的数据源

本文主要基于恒有数平台获取指数定投所需数据源的过程实践 。
原文:【量化】用数据验证巴菲特推荐的指数定投的收益真相
恒有数简介
恒有数金融数据社区() , 源自恒生的金融数据开放和可视化社区 , 旨在为量化投资爱好者、金融从业人员、高校师生、政府机构和财经媒体等人群提供专业的金融数据服务 , 满足不同用户丰富多样的数据分析和投资研究需求 。
恒有数提供涵盖股票、基金、债券、期权期货、港股等金融数据(数据目录见附录1) 。提供在线预览、在线下载和在线调试等功能 , 简单高效的API接口(接口语言包括HTTP、、、Java) , 丰富的接口文档与帮助文档 , 使得用户可以方便快捷地获取数据 。
未来 , 恒有数还会继续扩充专业数据 , 完善产品功能 , 不断提升服务能力 。
指数定投简介

【量化】实战恒有数获取指数定投的数据源

文章插图
指数定投是定期投资指数基金的简称 , 指的是在固定的时间 , 以固定的金额 , 投资到指定的开放式基金中 , 这是懒人投资理财的最佳方法 。这种方式通过积少成多 , 聚沙成塔 , 分散和平摊风险 , 不会因股票市场的一时波动影响正常的生活和情绪 。在交易市场中 , 由于指数编制的方式 , 指数上涨是大概率事件 , 这也符合投资是追求确定性的要义 。
采集数据源过程注册恒有数平台
注册并登录恒有数平台 , 获取数据接口请求Token , 地址:。
获取所需数据源
根据需求 , 需要获取以下数据字段:
需要获取数据的接口如下:
【量化】实战恒有数获取指数定投的数据源

文章插图
1.2.1 股票日行情()
数据部分程序代码如下:
import pandas as pdimport numpy as npimport config.sys_config as configimport hs_udata as hsimport time"""获取 沪深证券交易所 指定范围的交易日期集合"""def get_trade_dates(start_date, end_date=' '):# 开始时间if not start_date or not start_date.rfind('-'):start_date = ' 'start_year = int(start_date.split('-')[0], base=10)# 结束时间end_year = int(time.strftime("%Y", time.localtime()), base=10)if end_date == ' ' or not start_date.rfind('-'):end_date = ' 'else:end_year = int(end_date.split('-')[0], base=10)# 获取交易日期集合trade_date_df = pd.DataFrame()while True:if start_year > end_year:breakif trade_date_df.size <= 0:trade_date_df = hs.trading_calendar(secu_market='83',if_trading_day='1',start_date=start_date)else:trade_date_df = trade_date_df.append(hs.trading_calendar(secu_market='83',if_trading_day='1',start_date=start_date), ignore_index=True)start_year = start_year + 1start_date = str(start_year) + start_date[4:]# 去除重复交易日trade_date_df = trade_date_df.drop_duplicates()print(trade_date_df.head())return trade_date_df# 获取股票日数据: 交易日期 股票行情 , 公司等信息def get_stock_day_data(secu_code, trade_date):# 获取数据:产品代码,交易日期,开盘价,最高价,最低价,收盘价,成交数量,成交额,涨跌幅,换手率,涨跌停状态,交易状态stock_fields = "prod_code,trading_date,open_price,high_price,low_price,close_price,business_amount,business_balance,px_change_rate,turnover_ratio,up_down_status,turnover_status"stock_data = http://www.kingceram.com/post/hs.stock_quote_daily(en_prod_code=secu_code,trading_date=trade_date,adjust_way=2,fields=stock_fields)print(stock_data.head())return stock_data# 执行程序def execute_procedure(stock_code_list, trade_date, mode='new'):for stock_code in stock_code_list:res_data = get_stock_day_data(stock_code, trade_date)res_data['close_price'].replace('', np.nan, inplace=True)res_data.dropna(subset=['close_price'], inplace=True)if mode == 'new':res_data.to_csv("temp/" + stock_code + ".csv", mode='w', index=False, encoding="utf-8")else:res_data.to_csv("temp/" + stock_code + ".csv", mode='a', index=False, header=False, encoding="utf-8")"""程序执行入口"""if __name__ == '__main__':# 需要查询的产品code信息 , 000001.SH 上证指数prod_code_list = ['000001.SH']hs.set_token(config.HsData().get_token())trade_dates_df = get_trade_dates(start_date='2010-01-01')# 获取交易时间集合# 执行程序采集数据mode = 'new'count = 0for trade_date in trade_dates_df['trading_date']:print("执行日期:", trade_date)if count > 0:mode = 'add'execute_procedure(prod_code_list, trade_date, mode)count = count + 1
执行程序获取到的结果如图所示:
【量化】实战恒有数获取指数定投的数据源

文章插图
总结
【【量化】实战恒有数获取指数定投的数据源】通过恒有数获取股票基金等金融数据 , 即使初级小白也能快速上手 , 大大提升了金融数据分析等应用的效率 。