🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

解决JoinQuant中获取LOF基金复权净值报错的问题

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

问题描述

如何获得LOF基金的复权净值?

调用get_extras函数查lof基金的复权净值报错:

Exception: adj_net_value现在仅支持场外基金

可是LOF基金也有场外啊。该如何获取LOF基金的复权净值呢?

解决方案

在 JoinQuant 聚宽平台上,遇到调用 get_extras 获取 LOF 基金复权净值报错 Exception: adj_net_value现在仅支持场外基金,通常是因为传入的基金代码后缀不正确或混淆了场内/场外基金的获取方式。

以下是详细的报错原因及解决方案:

报错原因分析

LOF 基金(上市型开放式基金)确实既有场内份额也有场外份额。在聚宽的数据体系中,它们通过代码后缀来进行区分:

  • 场内基金代码:后缀通常为 .XSHG(上交所)或 .XSHE(深交所),例如 162411.XSHE
  • 场外基金代码:后缀统一为 .OF,例如 162411.OF

get_extras 函数中的 adj_net_value(复权净值)字段,系统底层设定仅针对场外基金代码(.OF)开放。如果您传入了场内代码(如 .XSHE),系统就会抛出该异常。

解决方案

根据您的实际需求,可以通过以下几种方式获取所需数据:

方案一:获取场外 LOF 的复权净值(修改代码后缀)

如果您确实需要该 LOF 基金的场外复权净值,只需将查询代码的后缀改为 .OF 即可。

from jqdata import *

# 使用 .OF 后缀查询场外复权净值
lof_code_otc = '162411.OF' 
df = get_extras('adj_net_value', [lof_code_otc], start_date='2023-01-01', end_date='2023-10-01')
print(df)

方案二:获取场内 LOF 的复权价格(用于回测交易)

如果您是在编写交易策略,需要获取场内 LOF 的历史行情来进行买卖信号判断,您应该使用 get_price 函数,并设置复权参数 fq。场内基金的交易基于价格而非净值(存在折溢价)。

from jqdata import *

# 获取场内 LOF 的前复权收盘价
lof_code_exchange = '162411.XSHE'
df_price = get_price(lof_code_exchange, start_date='2023-01-01', end_date='2023-10-01', frequency='daily', fields=['close'], fq='pre')
print(df_price)

方案三:获取场内 LOF 的单位净值和累计净值

如果您需要分析场内 LOF 的实际净值表现,可以使用 get_extras 获取 unit_net_value(单位净值)和 acc_net_value(累计净值)。累计净值在不考虑分红再投资的情况下,可以作为衡量基金长期表现的参考。

from jqdata import *

lof_code_exchange = '162411.XSHE'
# 获取累计净值
df_acc = get_extras('acc_net_value', [lof_code_exchange], start_date='2023-01-01', end_date='2023-10-01')
# 获取单位净值
df_unit = get_extras('unit_net_value', [lof_code_exchange], start_date='2023-01-01', end_date='2023-10-01')

print("累计净值:\n", df_acc)
print("单位净值:\n", df_unit)

总结

  • 场外复权净值:用 get_extras + adj_net_value + .OF 代码。
  • 场内复权行情:用 get_price + fq='pre' + .XSHG/.XSHE 代码。
  • 场内累计/单位净值:用 get_extras + acc_net_value/unit_net_value + .XSHG/.XSHE 代码。