3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!get_current_tick 完全支持普通股票代码。您遇到返回 None 的情况,通常与 Tick 数据的特性有关。下面为您详细解答原因,并提供获取回测时当前价格的最佳方法。
get_current_tick 查询普通股票会返回 None?根据 JoinQuant API 文档,get_current_tick 获取的是指定时刻的最新 Tick 快照。返回 None 的常见原因包括:
dt 时刻(精确到秒),该股票没有产生成交或盘口变化,接口就会返回 None。大盘指数(如 000001.XSHG)因为包含众多成分股,几乎每秒都在变动,所以总能取到数据;而单只股票(如 601658.XSHG 邮储银行)在某些秒内可能没有交易,就会返回 None。context.current_dt 处于集合竞价未产生数据时、午休期间,或者该股票当天停牌,也会返回 None。如果您只是想获取股票当前的最新价格(而不是为了做高频的盘口 Tick 分析),不建议使用 get_current_tick。在天级别或分钟级别回测中,推荐使用以下两种方法:
get_current_data() (最推荐)get_current_data() 是专门用于获取当前单位时间(当天/当前分钟)最新状态的 API,包含了最新价、涨跌停价、是否停牌等信息。
def handle_data(context, data):
security = '601658.XSHG'
# 获取当前时间的数据字典
current_data = get_current_data()
# 获取最新价
current_price = current_data[security].last_price
log.info(f"{security} 的当前最新价为: {current_price}")
注:last_price 在 09:30 之前调用会返回昨日收盘价。
handle_data 传入的 data 对象在 handle_data(context, data) 函数中,data 对象存放了前一个单位时间(按天回测是前一天,按分钟回测是前一分钟)的数据。在分钟回测中,这通常被视为当前的有效价格。
def handle_data(context, data):
security = '601658.XSHG'
# 确保数据有效且未停牌
if not data[security].isnan() and not data[security].paused:
# 获取当前单位时间的收盘价(分钟回测即为当前分钟收盘价)
current_price = data[security].close
log.info(f"{security} 的当前价格为: {current_price}")
get_current_data()[security].last_price 来获取最新价。get_current_tick 返回 None 的情况(例如使用 if tick_data is not None: 进行判断,沿用上一个有效的 Tick 价格)。