🚀 AI 一键生成 joinquant 策略代码

JoinQuant 平台使用 get_price 获取期权数据为何全是 NaN?

joinquant | 发布时间: 2026/5/25
以下内容由 EasyQuant 生成。

问题描述

GET_PRICE求助

abc = get_price(('10005401.XSHG'), start_date = '2023-05-25', end_date = '2023-05-29')
编译结果所有数据都显示NaN,是get_price函数不支持获取期权数据了吗?

解决方案

您好!在 JoinQuant 平台中,get_price 函数是支持获取期权数据的。您查询结果全部显示为 NaN,通常并不是因为函数不支持,而是由以下几个常见原因导致的:

1. 期权在查询时间段内未上市或已到期

期权合约有严格的存续期限(上市日和最后交易日/到期日)。如果您查询的时间段(2023-05-252023-05-29)不在该期权合约的存续期内,get_price 会返回 NaN

排查方法:
您可以使用 get_security_info 函数来查询该期权合约的具体上市和退市时间:

info = get_security_info('10005401.XSHG')
print("上市时间:", info.start_date)
print("退市时间:", info.end_date)

如果 2023-05-25 不在 start_dateend_date 之间,就会返回 NaN

2. 停牌或无交易

如果该期权在您查询的几天内恰好处于停牌状态,且 get_price 的默认参数 skip_paused=False(不跳过停牌日),那么在没有前收盘价可供填充的情况下,或者在上市前/退市后,数据也会显示为 NaN

3. 字符串传递格式问题

虽然不一定是导致 NaN 的直接原因,但建议在传递单个标的代码时,直接传递字符串,而不是包含在括号中的元组形式。即:

# 推荐写法
abc = get_price('10005401.XSHG', start_date='2023-05-25', end_date='2023-05-29')

总结与建议

请先运行以下代码检查该期权合约的基本信息:

# 检查期权基本信息
info = get_security_info('10005401.XSHG')
if info:
    print(f"期权名称: {info.display_name}")
    print(f"上市日期: {info.start_date}")
    print(f"退市日期: {info.end_date}")
else:
    print("未找到该期权合约,请检查代码是否正确。")

# 如果时间段在存续期内,尝试获取数据并跳过停牌日
abc = get_price('10005401.XSHG', start_date='2023-05-25', end_date='2023-05-29', skip_paused=True)
print(abc)

如果确认时间段在存续期内且代码无误,但依然获取不到数据,请检查您的账号是否具有期权数据的相关权限(部分高频或特定数据可能需要额外权限)。