问题描述
使用get_price获取某只股票的数据时,发现返回的数据中缺少今天的K线,这是怎么回事?
解决方案
在 ptrade 量化交易平台中,使用 get_price 函数获取不到当天的行情数据是正常现象。根据 ptrade 官方 API 文档的说明,这与该接口的设计机制有关。
原因分析
根据 ptrade API 文档中关于 get_price 接口的注意事项:
数据返回内容不包括当天数据
get_price 主要被设计用于获取指定日期之前的历史 K 线数据,因此它在底层实现上过滤掉了当前交易日的数据。
解决方法
如果您在策略中需要获取包含当天的 K 线数据或实时的行情信息,可以使用以下替代方案:
方案一:使用 get_history 函数(推荐获取 K 线)
get_history 函数同样用于获取历史行情,但它提供了一个 include 参数,允许您控制是否包含当前周期的数据。
- 参数设置:将
include参数设置为True。
代码示例:
def handle_data(context, data):
# 获取过去5天(包含今天)的日K线收盘价
# include=True 表示包含当前周期(即今天)
his_data = get_history(5, '1d', 'close', security_list='600570.SS', include=True)
log.info(his_data)
方案二:使用 get_snapshot 函数(推荐获取实时切片)
如果您只需要获取当天的最新价格、开盘价、最高价、最低价或成交量等实时快照信息,而不需要完整的 K 线序列,使用 get_snapshot 是最高效的选择。
代码示例:
def handle_data(context, data):
# 获取当前股票的实时行情快照
snapshot = get_snapshot('600570.SS')
if snapshot:
# 获取最新成交价
last_price = snapshot['600570.SS']['last_px']
# 获取今开盘价
open_price = snapshot['600570.SS']['open_px']
log.info(f"最新价: {last_price}, 今开价: {open_price}")
总结
- 查历史(不含今天):使用
get_price。 - 查历史(包含今天):使用
get_history并设置include=True。 - 查当前最新盘口/价格:使用
get_snapshot或在handle_data中直接通过data[security]['close']获取。