🚀 AI 一键生成 joinquant 策略代码

JoinQuant 的 get_bars 函数如何指定 fq_ref_date 复权基准日?

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

问题描述

获取 K 线数据时,我想指定以 2020 年 1 月 1 日为基准进行复权,该怎么做?

解决方案

在 JoinQuant(聚宽)平台中,若需要指定特定日期(如 2020 年 1 月 1 日)作为复权基准日进行定点复权,应使用 get_bars 函数。

该函数提供了一个 fq_ref_date 参数,专门用于设置复权基准日期。

实现方法

使用 get_bars 函数,并将 fq_ref_date 参数设置为 datetime.date(2020, 1, 1) 或对应的字符串格式。

代码示例

# -*- coding: utf-8 -*-
from jqdata import *
import datetime

def initialize(context):
    # 设定要查询的标的
    security = '000001.XSHE'
    
    # 指定复权基准日为 2020年1月1日
    ref_date = datetime.date(2020, 1, 1)
    
    # 获取数据
    # count: 获取的条数
    # unit: 时间单位,'1d'表示天
    # fields: 获取的字段
    # fq_ref_date: 复权基准日期
    bars = get_bars(
        security, 
        count=10, 
        unit='1d',
        fields=['date', 'open', 'close', 'high', 'low', 'volume'],
        include_now=False,
        fq_ref_date=ref_date
    )
    
    # 打印结果
    print(f"以 {ref_date} 为基准复权的数据:")
    print(bars)

# 这是一个在回测或模拟交易中运行的示例结构
# 如果是在研究环境中,直接运行函数体内的代码即可

参数说明

  • fq_ref_date: 复权基准日期。
    • 当设置为 datetime.date(2020, 1, 1) 时,系统会以该日的收盘价为基准。
    • 该日期之前的价格会基于该日期进行前复权处理。
    • 该日期之后的价格会基于该日期进行后复权处理。
    • 如果该日期为 None,则返回不复权(Raw)数据。
    • 如果该日期设置为 datetime.datetime.now(),即返回前复权数据。

注意事项

  1. 函数区别:常用的 get_price 函数主要通过 fq='pre'(前复权)或 fq='post'(后复权)来控制,虽然简便,但不支持自定义具体的基准日期。因此,定点复权必须使用 get_bars
  2. 数据类型get_bars 默认返回的是 numpy.ndarray 格式。如果需要 pandas.DataFrame 格式,请在调用时设置参数 df=True
  3. 适用范围:此参数对股票和基金的价格字段、成交量字段生效。

Q&A

Q: get_price 函数能否指定具体的复权日期?
A: 不能。get_pricefq 参数仅支持 'pre' (前复权)、'post' (后复权) 或 None (不复权)。如果需要指定具体日期进行定点复权,请使用 get_bars

Q: fq_ref_date 设置为未来日期会怎样?
A: 如果设置为一个未来的日期,或者比当前数据更晚的日期,获取到的数据效果等同于后复权。通常建议设置为 datetime.date(2000, 1, 1) 这样的早期日期来获取纯粹的后复权数据。

Q: 为什么使用定点复权?
A: 定点复权常用于回测分析中需要固定某个时间点(如策略开始日)作为价格锚点的情况,或者在对比不同时间段的收益率时,消除分红配股对价格缺口的影响,使价格序列在特定时间点上保持连续和可比性。