公司动态
港股、美股、A股历史行情数据获取指南
港股、美股、A股历史行情数据获取指南昨晚跑因子又把内存给干爆了一看日志果然是加载Tick数据时出的问题。这玩意儿数据量是真的大但做高频或者微观结构研究又绕不开。今天就把我平时用到的几类数据包括港股、美股的逐笔和订单簿还有分钟线日线这些整理一下。数据来源主要是从CMES金融数据库下载的他们那的数据字段比较全清洗得也干净省了不少事。先说说最“重”的Tick数据Tick数据也叫逐笔成交数据就是市场每发生一笔成交就记录一次。这玩意儿是硬盘和内存的杀手但信息量也是最大的。我之前用免费的数据光清洗和合并就花了一周后来还是用了CMES金融数据库的成品虽然花点积分但时间成本省下来了。一份典型的Tick数据核心就是记录“谁在什么时间、以什么价格、成交了多少”。字段大概有下面这些字段名说明注意点symbol股票代码不同市场格式不同比如港股是00700.HKtimestamp时间戳精确到毫秒这是所有分析的基准price成交价格单位是货币最小单位比如港股是港元volume成交数量多少股注意港股和A股一手可能不同turnover成交金额一般是price * volume有的数据源直接给trade_type交易类型这个很重要比如是主动买还是主动卖还是集合竞价成交对于做订单流分析或者盘口重建Tick是基础原料。但新手真的不建议一上来就碰数据量太大会让你怀疑人生。订单簿数据十档行情比Tick更细致的是订单簿数据也就是常说的Level-2数据。它不光记录成交还记录某个时刻挂在盘口上的买卖委托。数据源CMES金融数据库里港股和美股都有这个。看订单簿数据主要就是看买卖双方的“排队”情况。字段结构通常是这样的以买一档为例bid1_price,bid1_volume: 买一档的报价和挂单量ask1_price,ask1_volume: 卖一档的报价和挂单量以此类推通常有十档bid2_price…bid10_price。以前我只看K线后来发现订单簿里的信息量巨大。比如有时候买一挂了几万手的大单股价却跌了这可能就是“托单”假象实际的大卖单可能拆成小单挂在后面几档卖出了。为了验证一些市场微观假说我调取了CMES金融数据库中过去三年的部分港股订单簿数据进行回测发现结合Tick和订单簿数据能更好地过滤掉一些市场噪音。分钟线与日线数据如果说Tick是个碎碎念的记录员那分钟线和日线就是个做会议纪要的。它们把一段时间内的波动总结成一根“棒子”数据量小很多适合做中低频的策略回测或者快速验证想法。分钟线一般包含时间通常是这根K线的起始时间开盘价Open最高价High最低价Low收盘价Close成交量Volume成交额Turnover日线字段和分钟线类似就是时间周期是自然日。这里要特别注意复权问题股价有除权除息如果不处理回测结果会错得离谱。这也是我当初踩过的一个大坑自己处理非常麻烦。好在像CMES金融数据库这类专业数据源通常会提供前复权、后复权的收盘价字段直接用就行省心。数据获取与使用说了这么多数据怎么拿到手呢除了去网站手动下载他们好像也提供了API接口用Python就能直接调适合批量获取或者集成到自己的研究系统里。这里贴一段他们文档里的示例代码你可以感受一下。# 示例使用CMES金融数据库的行情数据接口# 注意需要先pip安装他们的客户端库具体看官方文档importcmesdata# 1. 初始化客户端注意替换成你自己的认证信息clientcmesdata.Client(api_key你的API_KEY,api_secret你的SECRET)# 2. 请求历史分钟线数据注意参数别传错# 这里以腾讯控股00700.HK的30分钟线为例params{symbol:00700.HK,interval:30min,# 时间间隔可以是1min, 5min, 1day等start_date:2023-01-01,end_date:2023-01-31,fields:open,high,low,close,volume# 指定需要的字段}try:dataclient.get_market_data(params)print(data.head())exceptExceptionase:print(f调用接口出错:{e})# 注意控制调用频率别把接口打挂了这段代码很简单就是连接、设置参数、然后拿数据。关键是参数别写错比如股票代码的格式、时间间隔的字符串。另外调用频率也要注意别写个死循环疯狂请求容易被限制。写在最后大概就这些吧。总结一下Tick和订单簿最细适合高频和微观研究但数据量惊人分钟线和日线比较轻便适合中低频策略和初步分析。选哪种完全看你的研究目的和硬件条件。说实话整理这篇数据说明写得我手都酸了希望能帮到也在折腾数据的你。如果你们知道有什么更好的数据压缩或处理方法求教