写点什么

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

  • 2021 年 12 月 17 日
  • 本文字数:2583 字

    阅读完需:约 8 分钟

作者:幻好

来源:恒生LIGHT云社区


本文主要基于恒有数平台获取指数定投所需数据源的过程实践。

原文:【量化】用数据验证巴菲特推荐的指数定投的收益真相

恒有数简介

恒有数金融数据社区https://udata.hs.net),源自恒生的金融数据开放和可视化社区,旨在为量化投资爱好者、金融从业人员、高校师生、政府机构和财经媒体等人群提供专业的金融数据服务,满足不同用户丰富多样的数据分析和投资研究需求。


恒有数提供涵盖股票、基金、债券、期权期货、港股等金融数据(数据目录见附录 1)。提供在线预览、在线下载和在线调试等功能,简单高效的 API 接口(接口语言包括 HTTP、Python、MATLAB、Java),丰富的接口文档与帮助文档,使得用户可以方便快捷地获取数据。


未来,恒有数还会继续扩充专业数据,完善产品功能,不断提升服务能力。

指数定投简介

指数定投是定期投资指数基金的简称,指的是在固定的时间,以固定的金额,投资到指定的开放式基金中,这是懒人投资理财的最佳方法。这种方式通过积少成多,聚沙成塔,分散和平摊风险,不会因股票市场的一时波动影响正常的生活和情绪。在交易市场中,由于指数编制的方式,指数上涨是大概率事件,这也符合投资是追求确定性的要义。

采集数据源过程

注册恒有数平台

注册并登录恒有数平台,获取数据接口请求 Token,地址:https://udata.hs.net/console/overAllView

获取所需数据源

根据需求,需要获取以下数据字段:


  • 交易日期:交易日期

  • 股票代码:股票的代码,上证股票以 sh 结尾,深证股票以 sz 结尾

  • 开盘价:当日股票股票开盘价格

  • 最高价:当日股票交易最高价格

  • 最低价:当日股票交易最低价格

  • 收盘价:股票收盘价格

  • 成交量:当日股票成交量

  • 成交额:当日股票成交额

  • 涨跌幅:复权之后的真实准确涨跌幅

  • 总市值:当日股票总股价

  • 换手率:当日股票换手比例

  • 涨跌停状态:本月股票最后一个交易日收盘是否涨停

  • 交易状态:本月股票最后一个交易日是否交易


需要获取数据的接口如下:


  • 1.1.2 交易日历 (https://udata.hs.net/datas/200/)

  • 获取交易日时间

  • 1.2.1 股票日行情(https://udata.hs.net/datas/332/)

  • 获取沪深日行情,包含昨收价、开盘价、最高价、最低价、收盘价、成交量、成交金额等数据;


数据部分程序代码如下:


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: break if 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 + 1 start_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 = 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 = 0 for 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
复制代码


执行程序获取到的结果如图所示:


4054

总结

通过恒有数获取股票基金等金融数据,即使初级小白也能快速上手,大大提升了金融数据分析等应用的效率。

发布于: 1 小时前阅读数: 3
用户头像

还未添加个人签名 2018.11.07 加入

还未添加个人简介

评论

发布
暂无评论
【量化】实战恒有数获取指数定投的数据源