问题描述
最近想看看一些转债的数据,但是无法读取历史数据。
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_price 的 fq 参数
在使用 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)
总结与建议
- 资产特性:在量化投研中,一定要注意不同资产的特性。股票和部分基金需要复权,而期货、期权、可转债等通常使用不复权的真实价格。
- API 选择:对于非股票类的资产行情获取,推荐优先使用
get_bars函数,它的兼容性和执行效率通常更好。