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

JoinQuant 平台 get_bars 的 include_now 参数用法详解与盘中实时 K 线获取指南

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant K线获取进阶:get_bars 的 include_now 参数在盘中的用法

Question: 在 joinquant 中使用 get_bars 获取分钟或日线 Bar 时,如何获取包含当前未走完时刻的实时快照数据?

解决方案

JoinQuant 平台 get_bars 的 include_now 参数用法详解

在 JoinQuant(聚宽)量化交易平台中,get_bars 是获取历史及实时 K 线数据最核心的 API 之一。在盘中运行策略时,默认情况下获取的历史 Bar 均已收盘(即不包含当前正在形成的这根 K 线)。如果策略需要在盘中获取当前尚未走完的实时快照数据,则需要使用 include_now 参数。


一、核心参数 include_now 的作用

include_now 是一个布尔值参数(TrueFalse),用于控制返回的数据集中是否包含当前正在形成、尚未完结的 Bar

  • include_now=False(默认值):只返回已经完结的历史 K 线。例如在 09:33 时获取 5 分钟线,返回的是上一交易日末尾至今日 09:30 的历史完整 K 线。
  • include_now=True:返回包含当前时刻在内的未走完 Bar。例如在 09:33 时获取 5 分钟线,返回的数据中将包含 09:30-09:33 这 3 分钟内合成的实时快照 K 线(其高开低收与成交量为截至当前时刻的实时值)。

二、get_bars 函数语法与参数说明

get_bars(security, count, unit='1d', fields=['date', 'open', 'high', 'low', 'close'], include_now=False, end_dt=None, fq_ref_date=None, df=False)

参数解析:

  1. security:标的代码,支持单个标的(如 '000001.XSHE')或标的代码列表。
  2. count:获取 Bar 的数量(大于 0 的整数)。
  3. unit:K 线周期。标准周期支持 '1m', '5m', '15m', '30m', '60m', '120m', '1d', '1w', '1M';非标准周期支持 'Xm'(如 '3m')。
  4. fields:数据字段,支持 'date', 'open', 'high', 'low', 'close', 'volume', 'money', 'open_interest', 'factor'
  5. include_now:是否包含当前 Bar。取值为 TrueFalse
  6. end_dt:查询截止时间,回测/模拟盘中默认是 context.current_dt
  7. df:是否返回 pandas.DataFrame 格式,默认为 False(返回 numpy.ndarray)。

三、代码示例:盘中获取实时 K 线

以下是在 JoinQuant 策略中通过 get_bars 设置 include_now=True 获取实时数据的完整示例:

import datetime
from jqdata import *

def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    # 设为每分钟运行
    run_daily(market_open, time='every_bar')

def market_open(context):
    security = '000001.XSHE'
    
    # 1. 获取包含当前未走完 Bar 的最新 5 根 5分钟 K线
    bars_now = get_bars(security, count=5, unit='5m', 
                        fields=['date', 'open', 'high', 'low', 'close', 'volume'], 
                        include_now=True, df=True)
    
    # 2. 获取不包含当前未走完 Bar 的前 5 根已完结 5分钟 K线
    bars_history = get_bars(security, count=5, unit='5m', 
                            fields=['date', 'open', 'high', 'low', 'close', 'volume'], 
                            include_now=False, df=True)
    
    log.info("--- 当前时刻包含未完结Bar的K线数据 ---")
    log.info(bars_now.tail(1))

四、注意事项与最佳实践

  1. 开盘极早期数据表现:如果在开盘(如 09:30)时刻设置 include_now=True 获取当日日线 Bar,此时该 Bar 的高开低收均等于开盘价,成交量和成交额均为 0。
  2. 复权问题:使用 include_now=True 时,请确保 fq_ref_date 设置符合需求(默认在回测与模拟盘中会使用当前逻辑时间 context.current_dt.date() 进行动态复权,保证价格真实准确)。
  3. 停牌处理get_bars 不会自动填充停牌数据。如果标的在所查时间内停牌,返回的 Bar 数量可能会少于 count,开发策略时请注意检查返回数据的实际长度。