3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台中,若需要获取包含当前正在进行且尚未结束的分钟 Bar 数据(即包含当前时刻的快照数据),最直接且推荐的方法是使用 get_bars 函数,并设置参数 include_now=True。
以下是具体的实现方法和代码示例。
get_barsget_bars 是聚宽获取行情数据的核心函数,通过设置 include_now=True,它会将当前时刻的 Tick 数据合成到最后一根 Bar 中返回。
# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 设置我们要操作的股票
g.security = '000001.XSHE'
# 设置基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 每天盘中运行
run_daily(handle_trade, 'every_bar')
def handle_trade(context):
# 获取过去5分钟的数据,并且包含当前这一分钟(尚未走完)的数据
# unit='1m' 表示1分钟线
# include_now=True 是关键,表示包含当前正在进行的Bar
bars = get_bars(g.security, count=5, unit='1m',
fields=['date', 'open', 'high', 'low', 'close', 'volume'],
include_now=True, df=True)
# 打印数据查看
# 最后一行的 'close' 即为当前的最新价
# 最后一行的 'high'/'low' 为当前这一分钟截至目前的最高/最低价
log.info("\n" + str(bars))
# 获取当前最新价格(即最后一根Bar的收盘价)
current_price = bars['close'].iloc[-1]
log.info("当前分钟(含未结束)最新价: " + str(current_price))
在 get_bars(security, count, unit, fields, include_now, ...) 函数中:
include_now=True:
True 时,返回的数据最后一条是当前时刻所在的 Bar。unit='1m'。
include_now=False(默认):返回的最后一条数据时间是 09:33(代表 09:32:00-09:33:00 的完整数据)。include_now=True:返回的最后一条数据时间是 09:34(代表 09:33:00-09:33:20 的合成数据),其 close 为最新价,volume 为这20秒的累积成交量。unit:
'1m' 获取 1 分钟线。也可以设置为 '5m', '15m' 等。如果设置为 '5m' 且 include_now=True,最后一根 Bar 将包含当前 5 分钟周期内截至目前的合成数据。df=True (可选):
True,返回 pandas.DataFrame 格式,便于后续的数据处理和计算。get_bars 获取分钟数据通常不会引入未来函数(除非你显式指定了未来的 end_dt)。但在编写策略逻辑时请注意,包含 include_now=True 的 Bar 是变动的。在这一分钟结束前,High、Low、Close、Volume 都会随着新的 Tick 到来而改变。history() / attribute_history():通常只返回已完成的时间单位数据,不包含当前正在进行的 Bar。get_price():虽然也可以获取数据,但在处理“当前分钟”的逻辑上不如 get_bars 的 include_now 参数直观和可控。include_now=True 时,系统实际上是利用当前的 Tick 数据与已有的分钟数据进行实时合成。Q: get_bars 和 get_current_data 有什么区别?
A: get_current_data() 获取的是当前时刻的快照(如涨跌停价、最新价、是否停牌等),它返回的是一个对象,不包含历史序列。而 get_bars(include_now=True) 返回的是时间序列数据(K线),既包含历史 K 线,也包含当前这一根正在形成的 K 线,适合用于计算技术指标(如计算包含当前价格的 MA5)。
Q: 如果我在 09:30:05 调用 get_bars(unit='1m', include_now=True) 会返回什么?
A: 会返回包含 09:31 (标签时间) 的 Bar。虽然这一分钟才过了5秒,但系统会根据这5秒的 Tick 生成一根 K 线,其 Open、High、Low、Close 可能相同(如果只有一笔成交),Volume 为这5秒的成交量。
Q: include_now=True 可以用于日线 (unit='1d') 吗?
A: 可以。如果在盘中调用 get_bars(unit='1d', include_now=True),返回的最后一条数据就是当天的日 K 线(截至调用时刻),其 Close 为最新价,High/Low 为当天的最高/最低价。这在盘中判断日线形态时非常有用。