🚀 AI 一键生成 joinquant 策略代码

get_price 函数中 fill_paused 参数的正确使用方法

joinquant | 发布时间: 2025/12/23
以下内容由 EasyQuant 生成。

问题描述

get_price 获取的数据中停牌日期的价格是如何处理的?

解决方案

在 JoinQuant 聚宽 API 中,get_price 函数对停牌日期数据的处理主要由 skip_pausedfill_paused 两个参数控制。

以下是具体的处理逻辑:

1. 默认行为

默认设置skip_paused=Falsefill_paused=True

  • 处理方式不跳过停牌日期,使用前值填充
  • 具体数据
    • 价格字段(open, close, high, low):使用停牌前最后一个交易日的收盘价(即 pre_close)进行填充。
    • 成交量/额(volume, money):填充为 0
  • 目的:为了保持时间轴的连续性,特别是在同时获取多只股票数据时,保证索引(日期)对齐。

2. 跳过停牌日期

设置skip_paused=True

  • 处理方式:直接剔除停牌日期的行。
  • 结果:返回的 DataFrame 中将不包含该股票停牌的日期。
  • 注意:如果同时获取多只股票(security 为列表),设置此选项可能会导致不同股票返回的数据行数不一致(如果返回的是 Panel 结构或需要索引对齐的 DataFrame,可能会有限制或报错,建议配合 panel=False 使用)。

3. 使用 NaN 填充

设置skip_paused=Falsefill_paused=False

  • 处理方式:保留停牌日期的行,但数据填充为 NaN(空值)。
  • 结果:日期索引是连续的,但停牌日的 open/close/high/low 等字段均为 NaN

代码示例

# 1. 默认情况:使用前值填充 (价格为前一日收盘价, volume为0)
df_default = get_price('000001.XSHE', start_date='2015-01-01', end_date='2015-02-01')

# 2. 跳过停牌:结果中不包含停牌日
df_skip = get_price('000001.XSHE', start_date='2015-01-01', end_date='2015-02-01', skip_paused=True)

# 3. 使用 NaN 填充:保留日期,但数据为 NaN
df_nan = get_price('000001.XSHE', start_date='2015-01-01', end_date='2015-02-01', fill_paused=False)

Q&A

Q: 为什么 get_price 默认不跳过停牌日期?
A: 主要是为了在获取多只股票数据时保持时间轴(Index)的一致性。如果跳过停牌,不同股票的行数可能不同,导致数据对齐困难。

Q: 停牌期间的 volume 和 money 字段是多少?
A: 在默认模式(前值填充)下,停牌期间的 volume(成交量)和 money(成交额)通常为 0。

Q: 如果我想计算收益率,停牌填充的数据会有影响吗?
A: 会有影响。如果使用前值填充,停牌期间的价格不变,计算出的日收益率为 0。如果使用 skip_paused=True,则计算的是复牌日相对于停牌前一日的收益率。

Q: fill_paused 参数对哪些字段生效?
A: fill_paused 主要影响价格字段(open, close, high, low)。如果设置为 True(默认),则用 pre_close 填充;如果为 False,则用 NaN 填充。