之前在学校用WRDS,可以接python,直接筛选导入数据,但是每次都需要验证码,
没有WRDS账户以后,换了好几个python的交易数据接口都不好用。
最近发现迅投xtdata 挺好用的,同时做策略回测也方便。
xtdata是xtquant库中提供行情相关数据的模块,本模块旨在提供精简直接的数据满足量化交易者的数据需求,作为python库的形式可以被灵活添加到各种策略脚本中。
今天继续分享一些使用过程的感受。
- 其他依赖库 numpy、pandas会在数据返回的过程中使用本模块会尽可能减少对numpy和pandas库的直接依赖,以允许使用者在不同版本的库之间自由切换pandas库中旧的三维数据结构Panel没有被使用,而是以dict嵌套DataFrame代替(后续可能会考虑使用xarray等的方案,也欢迎使用者提供改进建议)后文中会按常用规则分别简写为np、pd,如np.ndarray、pd.DataFrame
- 全推数据是市场全部合约的切面数据,是高订阅数场景下的有效解决方案。持续订阅全推数据可以获取到每个合约最新分笔数据的推送,且流量和处理效率都优于单股订阅
- 单股订阅行情是仅返回单股数据的接口,建议单股订阅数量不超过50。如果订阅数较多,建议直接使用全推数据
- 板块分类信息等静态信息更新频率低,无需频繁下载,按周或按日定期下载更新即可
接口说明
行情接口
订阅单股行情
subscribe_quote(stock_code, period='1d', start_time='', end_time='', count=0, callback=None)
- 释义
- 订阅单股的行情数据,返回订阅号
- 数据推送从callback返回,数据类型和period指定的周期对应
- 数据范围代表请求的历史部分的数据范围,数据返回后会进入缓存,用于保证数据连续,通常情况仅订阅数据时传count = 0即可
- 参数
- stock_code – string 合约代码
- period – string 周期
- start_time – string 起始时间
- end_time – string 结束时间
- count – int 数据个数
- callback – 数据推送回调
- 回调定义形式为on_data(datas),回调参数datas格式为 { stock_code : [data1, data2, …] }
def on_data(datas):
for stock_code in datas:
print(stock_code, datas[stock_code])
- 返回
- 订阅号,订阅成功返回大于0,失败返回-1
- 备注
- 单股订阅数量不宜过多,详见 接口概述-请求限制
订阅全推行情
subscribe_whole_quote(code_list, callback=None)
- 释义
- 订阅全推行情数据,返回订阅号
- 数据推送从callback返回,数据类型为分笔数据
- 参数
- code_list – 代码列表,支持传入市场代码或合约代码两种方式
- 传入市场代码代表订阅全市场,示例:[‘SH’, ‘SZ’]
- 传入合约代码代表订阅指定的合约,示例:[‘600000.SH’, ‘000001.SZ’]
- callback – 数据推送回调
- 回调定义形式为on_data(datas),回调参数datas格式为 { stock1 : data1, stock2 : data2, … }
- 订阅全推行情
- code_list – 代码列表,支持传入市场代码或合约代码两种方式
def on_data(datas): for stock_code in datas: print(stock_code, datas[stock_code])
- 返回
- 订阅号,订阅成功返回大于0,失败返回-1
- 备注
- 订阅后会首先返回当前最新的全推数据
反订阅行情数据
unsubscribe_quote(seq)
- 释义反订阅行情数据
- 参数seq – 订阅时返回的订阅号
- 备注无
阻塞线程接收行情回调
run()
- 释义阻塞当前线程来维持运行状态,一般用于订阅数据后维持运行状态持续处理回调
- 参数seq – 订阅时返回的订阅号
- 返回无
- 备注实现方式为持续循环sleep,并在唤醒时检查连接状态,若连接断开则抛出异常结束循环
获取行情数据
get_market_data(field_list=[], stock_list=[], period='1d', start_time='', end_time='', count=-1, dividend_type='none', fill_data=True)
释义
从缓存获取行情数据,是主动获取行情的主要接口
参数
field_list – list 数据字段列表,传空则为全部字段
stock_list – list 合约代码列表
period – string 周期
start_time – string 起始时间
end_time – string 结束时间
count – int 数据个数
默认参数,大于等于0时,若指定了start_time,end_time,此时以end_time为基准向前取count条;若start_time,end_time缺省,默认取本地数据最新的count条数据;若start_time,end_time,count都缺省时,默认取本地全部数据
dividend_type – string 除权方式
fill_data – bool 是否向后填充空缺数据
返回
period为1m 5m 1d等K线周期时
返回dict { field1 : value1, field2 : value2, … }
field1, field2, … :数据字段
value1, value2, … :pd.DataFrame 数据集,index为stock_list,columns为time_list
各字段对应的DataFrame维度相同、索引相同
period为tick分笔周期时
返回dict { stock1 : value1, stock2 : value2, … }
stock1, stock2, … :合约代码
value1, value2, … :np.ndarray 数据集,按数据时间戳time增序排列
备注
获取lv2数据时需要数据终端有lv2数据权限
时间范围为闭区间
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/78172
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!