返回列表 发布新帖

Day 02 XtData如何获取行情数据

4060 3
发表于 2023-12-25 22:28:46 | 显示全部楼层 阅读模式
本帖最后由 *******7699 于 2023-12-25 22:30 编辑

QMT 是目前接入门槛最低的量化实盘接口之一。它提供了本地部署的量化平台(可以回测和实盘),也提供了可独立于该平台运行的 SDK,即 XtQuant。

XtQuant 仅提供行情数据和交易接口,不提供回测功能。目前通过 XtQuant 获取普通行情数据是免费的,但有流速限制,据测试,低于 1 秒获取一次是没有问题的。

XtQuant 获取行情数据

XtQuant 中,数据获取一般分两个阶段,首先是缓存阶段,然后是读取阶段。

缓存阶段的 API 一般以 download_开头。

因此,我们要获取历史行情数据,首先要进行缓存。使用的 API 是:

def download_history_data(stock_code: str='',
                      period: str='',
                      start_time: str='',
                      end_time: str='',
                      incrementally: Optional[bool]=None
                      )

如果我们要一次下载多支证券的行情数据,还可以使用download_history_data2这个 API。

如果在 start_time 到 end_time 区间的数据被缓存后,我们就可以调用get_market_data来获取行情数据。


def get_market_data(field_list = [],
                    stock_list = [],
                    period = '1d',
                    start_time = '',
                    end_time = '',
                    count = -1,
                    dividend_type = 'none',
                    fill_data = True
)

该方法可以获取'1m', '5m', '15m', '30m', '1h', '1d'和分笔 (tick) 数据。不同的周期下,返回的字段有所不同。除分笔外,能返回的数据包括时间,OHLC,volume(成交手)和 amount(成交金额)。

图片.png

注意该方法不能返回复权因子。因此,如果我们不是为了直接使用返回的数据,而是要将其转存到其它数据库的话,我们还需要调用get_divid_factors来获得复权因子,与这里获得的未复权数据一起保存。直接转存任何已经复权的数据是没有意义的。即使是后复权,也存在出错的可能。

示例from xtquant import xtdata

stocks = ['000001.SZ', '600000.SH']
xtdata.download_history_data(stocks[0], '1d')
xtdata.download_history_data(stocks[1], '1d')

# 或者
# XTDATA.DOWNLOAD_HISTORY_DATA2(STOCKS, '1D')

end = "20231220"
bars = xtdata.get_market_data(stock_list=stocks,
                              period='1d',
                              end_time=end,
                              count=-1,
                              dividend_type="front_ratio")

end = "20231220"
bars = xtdata.get_market_data(stock_list=stocks, period='1d', end_time=end, count=-1, dividend_type="front_ratio")

display(bars['close'].T.tail())

get_market_data的返回结果是一个dict。它的key是行情字段,比如time, open, close等。其值则是以证券代码为索引,以时间为列的各个字段值。在上述示例的输出中,我们将其进行了转置,这也是我们正常情况下,使用它们的方式。

最终输出如下:

图片.png

注意 xtquant 使用的日期格式,如果周期为 1d,则是"YYYYMMDD"。如果周期为分钟级,则为"YYYYMMDDHHmmss"。如果我们使用的时间是 datatime.datetime 的话,可以用以下方式来格式化:

import datetime

now = datetime.datetime.now()
print(now.strftime("%Y%m%d%H%M%S"))

import arrow
arrow.get(now).format("YYYYMMDDHHmmss")

strftime的格式串不容易记忆, arrow 时间库在这点上进行了改进,周期由大到小,表示形式也实现了递进,比较容易记忆。在不涉及到性能的情况下,我们可以先将其转换为 Arrow 对象,再进行格式化。







评论3

*******5316
发表于 2023-12-26 15:21:01 | 显示全部楼层
请问,  请求北交所股票的Code是啥啊, 比如开特股份 832978, 我试了 832978.BJ ,  我用全推接口就不行, 上证深证的票是可以 ,下边是代码
  1. def on_data (datas):
  2.     print(datas)
  3. seq = xtdata.subscribe_whole_quote(code_list=['832978.BJ'], callback=on_data)
  4. xtdata.run()
复制代码
*******5316
发表于 2023-12-26 15:21:31 | 显示全部楼层
想找些同伴一起学习太难了,麻烦也帮试一下北交所的行情能拿到不
*******7699楼主
发表于 2023-12-26 17:45:19 | 显示全部楼层
北交所先看看你的账户开通了权限没?不过它的文档里确实没有给北交所代码,这点我也注意到了。
客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表