🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant聚宽量化平台获取当前Bar日期的完整指南

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

问题描述

请问如何在回测中获取当前bar的日期?

请问如何获取当前bar的日期?
在回测中,程序里写的 run_daily(trade, 'every_bar')
那么在trade函数中获取当前bar的日期?
求指教!!

解决方案

在 JoinQuant(聚宽)量化平台的回测或模拟交易中,无论你是使用 run_daily 还是 handle_data,都可以通过全局上下文对象 context 来获取当前 Bar 的日期和时间。

具体来说,你需要使用 context.current_dt 属性。

核心解答

context.current_dt 返回的是一个 Python 的 datetime.datetime 对象,代表当前策略运行的逻辑时间。

在你的 trade 函数中,你可以这样获取日期:

def trade(context):
    # 获取完整的 datetime 对象 (例如: 2023-10-25 09:30:00)
    current_time = context.current_dt
    
    # 仅获取日期部分 (返回 datetime.date 对象,例如: 2023-10-25)
    current_date = context.current_dt.date()
    
    # 如果你需要字符串格式的日期 (例如: '2023-10-25')
    date_str = context.current_dt.strftime("%Y-%m-%d")
    
    # 打印输出查看
    log.info("当前Bar的完整时间是: %s" % current_time)
    log.info("当前Bar的日期是: %s" % current_date)

完整策略示例

结合你提到的 run_daily(trade, 'every_bar'),完整的代码结构如下:

import jqdata

def initialize(context):
    # 设定基准和复权模式
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 注册定时运行函数,'every_bar' 表示按设定的频率(天或分钟)运行
    run_daily(trade, time='every_bar')

def trade(context):
    # 1. 获取当前 datetime 对象
    dt = context.current_dt
    
    # 2. 提取具体的年、月、日、时、分
    year = dt.year
    month = dt.month
    day = dt.day
    
    # 3. 获取纯日期对象
    current_date = dt.date()
    
    # 打印日志
    log.info(f"当前运行的日期是: {current_date}, 年份: {year}, 月份: {month}")
    
    # 在这里编写你的交易逻辑...
    # order('000001.XSHE', 100)

补充说明

  1. 时间精度
    • 如果你的回测频率是按天(日线)context.current_dt 的时间部分通常是 09:30:00
    • 如果你的回测频率是按分钟(分钟线)context.current_dt 会精确到当前运行的那一分钟(例如 09:31:00, 14:59:00 等)。
  2. 前一个交易日:如果你需要获取上一个交易日的日期,可以直接使用 context.previous_date,它返回的是一个 datetime.date 对象。