🚀 AI 一键生成 joinquant 策略代码

JoinQuant 聚宽 get_price 函数中 skip_paused 与 fill_paused 参数深度解析

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

问题描述

get_price的参数有点迷

get_price的参数:skip_paused、fill_paused、count,有点迷,特别前两个,有没有关系?

如果股票上个交易日停牌,
skip_paused=True,fill_paused=False,count=1,就获取不到数据?
skip_paused=True,fill_paused=True,count=1,也获取不到数据?

解决方案

在 JoinQuant (聚宽) 平台中,get_price 是获取历史行情数据最常用的 API 之一。理解 skip_pausedfill_pausedcount 这三个参数对于正确处理停牌股票的数据至关重要。

参数基本含义

  1. count:表示你要获取的数据行数(即 K 线根数)。例如 count=1 表示获取距离 end_date 最近的 1 根 K 线数据。
  2. skip_paused:是否跳过不交易的日期(包括停牌、未上市、已退市)。
    • True:跳过停牌日,直接往前寻找最近的一个正常交易日的数据。
    • False(默认):不跳过停牌日,时间轴保持连续。
  3. fill_paused:当 skip_paused=False(即不跳过停牌日)时,如何填充停牌日的数据。
    • True(默认):使用停牌前最后一个正常交易日的收盘价(pre_close)来填充停牌日的开、高、低、收价格,成交量(volume)和成交额(money)为 0。
    • False:停牌日的所有价格和成交量数据都用 NaN(空值)填充。

参数之间的关系

skip_pausedfill_paused 的关系是先后的:

  • 如果 skip_paused=True:系统会直接把停牌的日期从结果中剔除。既然停牌日都不存在于返回的结果中了,那么 fill_paused 参数实际上就失效了(因为没有停牌日需要去填充)。
  • 如果 skip_paused=False:系统会保留停牌的日期,此时 fill_paused 才会起作用,决定这个保留下来的停牌日里填的是前收盘价还是 NaN

回答您的具体问题

假设股票上个交易日停牌,您设置了 count=1(获取最近 1 天的数据):

情况 1:skip_paused=Truefill_paused=Falsecount=1

  • 结果能获取到数据
  • 解析:因为 skip_paused=True,系统会跳过上个交易日(停牌日),继续往前找,直到找到停牌前最后一个正常交易的日子,并返回那一天的真实交易数据。此时 fill_paused=False 不起作用。

情况 2:skip_paused=Truefill_paused=Truecount=1

  • 结果能获取到数据
  • 解析:同上,系统跳过停牌日,返回停牌前最后一个正常交易日的数据。fill_paused=True 同样不起作用。

补充情况 3:skip_paused=Falsefill_paused=Falsecount=1

  • 结果:返回上个交易日(停牌日)的数据,但数据全是 NaN
  • 解析:不跳过停牌日,且不填充,所以返回空值。

补充情况 4:skip_paused=Falsefill_paused=Truecount=1

  • 结果:返回上个交易日(停牌日)的数据,价格数据为停牌前的收盘价,成交量为 0。
  • 解析:不跳过停牌日,且使用前收盘价填充。

总结建议

  • 如果您的策略需要计算均线等技术指标,通常建议使用 skip_paused=True,这样计算出的指标是基于真实交易日的,不会被停牌日的平直线干扰。
  • 如果您需要获取多只股票的数据,且要求时间轴严格对齐(例如截面数据分析),通常建议使用 skip_paused=False, fill_paused=True,这样所有股票在同一天都有数据,方便矩阵运算。