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

JoinQuant量化平台获取可转债历史行情数据指南

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

问题描述

如何获取一直转债的历史价格数据

最近想看看一些转债的数据,但是无法读取历史数据。

security='000761.XSHE'
out=get_price(security, start_date='2022-01-01', end_date='2022-01-31',
frequency='daily', fields=None, skip_paused=False, fq='pre', panel=True)
print(out)
#上面这段正常获取价格数据。

security2='127018.XSHE'
out2=get_price(security2, start_date='2022-01-01', end_date='2022-01-31',
frequency='daily', fields=None, skip_paused=False, fq='pre', panel=True)
print(out2)
#上面这段报错,应该是无法通过get_price获得转债数据
求有什么方法可以获得转债的数据呢?

解决方案

在 JoinQuant (聚宽) 平台上获取可转债的历史价格数据时,使用 get_price 函数报错,通常是因为复权参数设置不当引起的。

报错原因分析

在您的代码中,获取可转债数据时设置了 fq='pre'(前复权)。可转债与股票不同,它没有拆分、分红等导致价格不连续的除权除息行为,因此不存在复权因子的概念。 当系统尝试去寻找可转债的复权因子进行前复权计算时,就会因为找不到数据而报错。

解决方法

方法一:修改 get_pricefq 参数

在使用 get_price 获取可转债数据时,必须将复权参数 fq 设置为 None(不复权)。

修改后的代码示例:

import jqdata

security2 = '127018.XSHE' # 本钢转债
out2 = get_price(security2, 
                 start_date='2022-01-01', 
                 end_date='2022-01-31',
                 frequency='daily', 
                 fields=['open', 'close', 'high', 'low', 'volume', 'money'], 
                 skip_paused=False, 
                 fq=None,  # 关键修改:可转债必须设置为不复权
                 panel=False) # 建议 panel 设置为 False,返回 DataFrame
print(out2)

方法二:使用更通用的 get_bars 函数(推荐)

get_bars 是 JoinQuant 推荐的用于获取各类资产(股票、期货、基金、债券等)K线数据的通用函数。它默认获取不复权数据,非常适合用来获取可转债行情。

使用 get_bars 的代码示例:

import jqdata

security2 = '127018.XSHE'
# 获取指定截止日期前的多个交易日数据
out3 = get_bars(security2, 
                count=20, # 获取20个交易日的数据
                unit='1d', 
                fields=['date', 'open', 'high', 'low', 'close', 'volume', 'money'],
                include_now=False, 
                end_dt='2022-01-31', 
                fq_ref_date=None, # 不复权
                df=True) # 返回 DataFrame 格式
print(out3)

总结与建议

  1. 资产特性:在量化投研中,一定要注意不同资产的特性。股票和部分基金需要复权,而期货、期权、可转债等通常使用不复权的真实价格。
  2. API 选择:对于非股票类的资产行情获取,推荐优先使用 get_bars 函数,它的兼容性和执行效率通常更好。