问题描述
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-25 到 2023-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_date 和 end_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)
如果确认时间段在存续期内且代码无误,但依然获取不到数据,请检查您的账号是否具有期权数据的相关权限(部分高频或特定数据可能需要额外权限)。