问题描述
解决方案
在 JoinQuant(聚宽)平台中,获取不同频率(如 5 分钟、30 分钟、周线)K 线数据的最推荐方式是使用 get_bars 函数。该函数支持多种标准时间单位,并且可以在回测、模拟交易和研究环境中使用。
以下是具体的代码实现示例:
获取 K 线数据代码示例
# -*- coding: utf-8 -*-
from jqdata import *
# 设定要查询的股票代码,例如平安银行
security = '000001.XSHE'
# 1. 获取 5 分钟 K 线数据 (获取最近 10 根)
# unit='5m' 代表 5 分钟频率
df_5m = get_bars(security, count=10, unit='5m',
fields=['date', 'open', 'high', 'low', 'close', 'volume'],
include_now=False, df=True)
print("--- 5分钟 K线数据 ---")
print(df_5m)
# 2. 获取 30 分钟 K 线数据 (获取最近 10 根)
# unit='30m' 代表 30 分钟频率
df_30m = get_bars(security, count=10, unit='30m',
fields=['date', 'open', 'high', 'low', 'close', 'volume'],
include_now=False, df=True)
print("\n--- 30分钟 K线数据 ---")
print(df_30m)
# 3. 获取周线 K 线数据 (获取最近 10 周)
# unit='1w' 代表周线频率
df_weekly = get_bars(security, count=10, unit='1w',
fields=['date', 'open', 'high', 'low', 'close', 'volume'],
include_now=False, df=True)
print("\n--- 周线 K线数据 ---")
print(df_weekly)
关键参数说明 (get_bars)
- security: 标的代码(如
'000001.XSHE')。 - count: 获取 K 线的数量(整数)。
- unit: 关键参数,用于指定频率:
'1m','5m','15m','30m','60m','120m': 分钟级数据。'1d': 日线。'1w': 周线。'1M': 月线。
- fields: 需要获取的字段列表,通常包含
'date','open','high','low','close','volume','money'等。 - include_now: 是否包含当前正在进行的这根 Bar(尚未结束的时间段)。在回测中通常设为
False以避免未来函数,在实盘或研究中根据需求设定。 - df: 是否返回
pandas.DataFrame格式。设为True返回 DataFrame,设为False返回numpy.ndarray。
Q&A
Q: get_bars 和 get_price 有什么区别?
A: get_bars 是较新的 API,支持更丰富的频率设置(如直接支持 '1w' 周线和 '1M' 月线),且数据分割方式与主流看盘软件更一致。get_price 主要用于获取天和分钟数据,对于周线等长周期数据支持不如 get_bars 直接。
Q: 如何获取复权后的 K 线数据?
A: 在 get_bars 中可以通过 fq_ref_date 参数设置复权基准日。例如,在回测中默认是前复权。如果需要不复权数据,可以设置 fq_ref_date=None。
Q: 在回测策略中(handle_data)可以使用 attribute_history 获取 5 分钟数据吗?
A: 可以。attribute_history(security, count, unit='5m', ...) 也可以获取 5 分钟数据,但它主要用于回测场景中获取相对于“当前回测时间”的历史数据,且返回格式固定为 DataFrame 或 Dict,不如 get_bars 通用。对于周线数据,attribute_history 不直接支持 '1w' 参数(通常需要获取日线后自行合成),因此获取周线建议使用 get_bars。