问题描述
net_value=get_extras('unit_net_value', '160142.XSHE', start_date='2021-08-27', end_date='2021-09-07')
net_value
输出
160142.XSHE
2021-08-27 1.1817
2021-08-30 1.1825
2021-08-31 1.1799
2021-09-01 1.1837
2021-09-02 NaN
2021-09-03 NaN
2021-09-06 NaN
2021-09-07 NaN
今天已经7号了,为啥还取不到9-2号的净值?
解决方案
在使用 JoinQuant 的 get_extras 函数获取基金的单位净值(unit_net_value)时,如果遇到最近几天的返回值为 NaN,通常是由以下几个原因造成的:
1. 基金公司披露延迟
基金的净值数据是由基金公司计算并对外披露的。不同类型的基金披露净值的时效性不同:
- 普通开放式基金(股票型、混合型等):通常在 T 日收盘后计算,T+1 日公布。
- QDII 基金或部分 FOF 基金:由于涉及海外市场或底层基金的净值确认,通常会延迟 T+2 甚至 T+3 日才能公布净值。
如果该基金(如 160142.XSHE)在特定时间段内基金公司尚未披露净值,聚宽的数据源自然也无法获取到,从而显示为 NaN。
2. 节假日或非交易日影响
请检查缺失数据的日期是否包含周末或法定节假日。虽然您列出的 9-02 到 9-07 包含工作日,但如果遇到特殊情况(如海外市场节假日导致 QDII 暂停估值),也会导致净值缺失。
3. 平台数据同步延迟
聚宽的数据需要从各大交易所和数据供应商处同步。如果上游数据源出现短暂的延迟或异常,可能会导致最新几天的净值未能及时入库。通常聚宽会在发现问题后尽快修复并回填数据。
解决方法与排查建议
- 核实官方披露情况:您可以前往天天基金网、东方财富或该基金公司的官方网站,查询
160142在 9月2日至9月7日期间的净值是否已经实际公布。如果官方也未公布,说明是基金本身的问题。 - 使用前值填充(向前填充):在量化策略中,为了防止
NaN导致计算报错,通常会使用 Pandas 的fillna(method='ffill')方法,用最近一次的有效净值来填充缺失值。import pandas as pd net_value = get_extras('unit_net_value', '160142.XSHE', start_date='2021-08-27', end_date='2021-09-07') # 使用前一个有效值填充 NaN net_value = net_value.fillna(method='ffill') print(net_value) - 联系聚宽客服:如果您确认基金公司早已披露了该时间段的净值,但聚宽平台上依然是
NaN,这可能是数据遗漏。建议您在聚宽社区发帖或联系客服,提供具体的代码和日期,工作人员会核实并修复数据。