🚀 AI 一键生成 joinquant 策略代码

JoinQuant get_price 函数同时传入 count 和 start_date 会怎样?

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

问题描述

在使用 get_price 获取数据时,如果我同时指定了 count 数量和 start_date 开始日期,哪个会生效?

解决方案

根据 JoinQuant API 的文档说明和实际运行机制,如果在 get_price 函数中同时指定了 countstart_date

count 参数会生效,start_date 会被忽略。

详细解析

  1. 优先级逻辑
    在 API 的内部处理逻辑中,通常会优先检查 count 参数。如果 count 不为 None,系统会直接根据 end_date(结束日期)向前推算 count 个单位时间(frequency)来截取数据,此时传入的 start_date 参数将不会被使用。

  2. 文档规范
    尽管 count 会覆盖 start_date,但 JoinQuant API 文档中明确指出:

    count: 与 start_date 二选一,不可同时使用。

最佳实践建议

为了保证代码的可读性和逻辑的严谨性,建议严格遵守文档规范,根据需求只选择一种方式:

  • 场景 A:获取固定长度的数据(推荐用于计算移动平均等指标)
    使用 count + end_date

    # 获取平安银行截止到 2023-01-01 的过去 10 天数据
    df = get_price('000001.XSHE', end_date='2023-01-01', count=10)
    
  • 场景 B:获取特定日期范围内的数据(推荐用于分析特定历史区间)
    使用 start_date + end_date

    # 获取平安银行 2022年1月1日 到 2023年1月1日 的数据
    df = get_price('000001.XSHE', start_date='2022-01-01', end_date='2023-01-01')
    

Q&A

Q: 如果 countstart_date 都没有指定,会发生什么?
A: 如果两个参数都没有指定,start_date 会默认生效,其默认值为 '2015-01-01'。即系统会返回从 2015-01-01 到 end_date 的数据。

Q: get_price 中的 end_date 如果不填,默认是什么?
A: 默认是 '2015-12-31'。但在回测环境中,通常建议显式指定 end_datecontext.current_dt 以避免引入未来函数。

Q: count 参数可以是负数吗?
A: 不可以。count 必须是一个正整数,表示获取数据的行数(Bar 的数量)。