问题描述
如题。
Img
API说明里,这个是可以转换基金代码的。
但是,实际转换时,默认为股票:
Img
请问,如何才能转换为基金代码(扩展名“OF”)呢?
另外,010135已经确认是基金代码,如下图。
解决方案
在 JoinQuant 聚宽平台中,关于 normalize_code 函数转换基金代码的问题,具体原因和解决方法如下:
1. 为什么会被默认转换为股票后缀?
根据 JoinQuant API 文档的说明,normalize_code 函数仅适用于 A 股市场股票代码、期货以及场内基金代码(如 ETF、LOF 等,后缀通常为 .XSHG 或 .XSHE)。
您提到的 010135 是一只场外基金(开放式基金)。由于它不在 normalize_code 的默认支持范围内,系统在解析纯数字 010135 时,会按照默认的股票代码规则,将其误判为深市代码,从而自动加上了 .XSHE 的后缀。
2. 如何正确转换为场外基金代码(.OF)?
由于 normalize_code 并不支持自动识别并追加场外基金的 .OF 后缀,对于场外基金,最简单且最稳妥的方法是直接使用 Python 的字符串拼接。
您可以自定义一个简单的转换函数来处理场外基金代码:
def normalize_fund_code(code):
# 确保输入是字符串格式
code_str = str(code)
# 补齐 6 位数字(如果需要)
code_str = code_str.zfill(6)
# 拼接 .OF 后缀
if not code_str.endswith('.OF'):
return code_str + '.OF'
return code_str
# 测试
fund_code = '010135'
normalized_fund = normalize_fund_code(fund_code)
print(normalized_fund) # 输出: 010135.OF
3. 批量处理混合代码
如果您有一个包含股票、场内基金和场外基金的混合列表,并且您明确知道哪些是场外基金,可以结合使用:
from jqdata import normalize_code
def process_codes(code_list, is_otc_fund=False):
result = []
for code in code_list:
if is_otc_fund:
# 场外基金手动拼接
result.append(str(code).zfill(6) + '.OF')
else:
# 股票、期货、场内基金使用官方 API
result.append(normalize_code(code))
return result
总结:normalize_code 无法自动识别场外基金并添加 .OF 后缀,请直接使用字符串拼接 code + '.OF' 的方式来处理场外基金代码。