问题描述
默认
close当然是前复权
money没有复权的意义。
那么,volume是前复权?
解决方案
是的,默认情况下 get_price 返回的 volume(成交量)也是前复权后的数据。
详细解释
在 JoinQuant 平台中,get_price 函数有一个 fq(复权)参数,其默认值为 'pre'(前复权)。根据官方 API 文档的说明:
fq: 复权选项(对股票/基金的价格字段、成交量字段及factor字段生效) :
'pre', 前复权,默认是前复权None, 不复权, 返回实际价格'post', 后复权
此外,文档在数据获取的小提示中也明确指出:
“天、分钟、tick行情里成交量单位是股,复权数据中成交量也是复权后的成交量;”
为什么成交量也需要复权?
当股票发生送股、转增股等情况时,股票的总股本会增加,股价会相应降低。为了保持历史数据在图表和策略计算中的连续性,不仅价格需要复权,成交量也需要进行相应的复权处理(通常是按比例放大),这样才能真实反映历史交易的活跃程度,避免因为股本变动导致成交量在图表上出现突兀的断层。
正如您所说,money(成交额)是实际发生的交易金额,不受拆分合并的影响,因此不需要复权。
如何获取真实的(不复权)成交量?
如果您在策略或研究中需要获取历史上真实的、未经过复权处理的成交量(即当时实际成交的股数),您只需要在调用 get_price 时,将 fq 参数显式设置为 None 即可:
# 获取不复权的真实成交量和价格
df_real = get_price('000001.XSHE', start_date='2023-01-01', end_date='2023-12-31', fq=None, fields=['close', 'volume', 'money'])
总结:
close,open,high,low:默认前复权。volume:默认前复权。money:实际成交额,无复权概念。