问题描述
解决方案
在 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(),即返回前复权数据。
- 当设置为
注意事项
- 函数区别:常用的
get_price函数主要通过fq='pre'(前复权)或fq='post'(后复权)来控制,虽然简便,但不支持自定义具体的基准日期。因此,定点复权必须使用get_bars。 - 数据类型:
get_bars默认返回的是numpy.ndarray格式。如果需要pandas.DataFrame格式,请在调用时设置参数df=True。 - 适用范围:此参数对股票和基金的价格字段、成交量字段生效。
Q&A
Q: get_price 函数能否指定具体的复权日期?
A: 不能。get_price 的 fq 参数仅支持 'pre' (前复权)、'post' (后复权) 或 None (不复权)。如果需要指定具体日期进行定点复权,请使用 get_bars。
Q: fq_ref_date 设置为未来日期会怎样?
A: 如果设置为一个未来的日期,或者比当前数据更晚的日期,获取到的数据效果等同于后复权。通常建议设置为 datetime.date(2000, 1, 1) 这样的早期日期来获取纯粹的后复权数据。
Q: 为什么使用定点复权?
A: 定点复权常用于回测分析中需要固定某个时间点(如策略开始日)作为价格锚点的情况,或者在对比不同时间段的收益率时,消除分红配股对价格缺口的影响,使价格序列在特定时间点上保持连续和可比性。