🚀 AI 一键生成 joinquant 策略代码

如何使用 JoinQuant API 获取历史 K 线数据?(get_price vs history)

joinquant | 发布时间: 2025/11/25
以下内容由 EasyQuant 生成。

问题描述

如何获取一只股票过去一年的日K线数据?

解决方案

在聚宽(JoinQuant)平台中,获取一只股票过去一年的日K线数据,根据使用场景(研究环境回测策略)不同,主要有两种常用的方法。

以下是具体的代码实现和说明:

方法一:在研究环境(Research)中使用 get_price

如果您是在研究环境(Notebook)中进行数据分析,推荐使用 get_price 函数。它可以指定具体的开始和结束日期。

# -*- coding: utf-8 -*-
import datetime
from jqdata import *

# 设定股票代码
security = '000001.XSHE'  # 平安银行

# 获取当前日期
end_date = datetime.date.today()
# 获取一年前的日期
start_date = end_date - datetime.timedelta(days=365)

# 获取日K线数据
# frequency='daily' 表示日线
# fields=None 默认包含 open, close, high, low, volume, money
df = get_price(security, 
               start_date=start_date, 
               end_date=end_date, 
               frequency='daily', 
               fields=['open', 'close', 'high', 'low', 'volume'])

# 打印前5行查看
print(df.head())

方法二:在回测/策略代码中使用 attribute_history

如果您是在编写策略(如 initialize, handle_data 中),通常关注的是相对于“当前回测时间点”过去的数据。此时推荐使用 attribute_history,它通过 count(数量)来获取数据。

由于一年大约有 250 个交易日,通常将 count 设为 250。

# -*- coding: utf-8 -*-
def initialize(context):
    # 设置要操作的股票
    g.security = '000001.XSHE'
    # 每天运行一次
    run_daily(market_open, time='every_bar')

def market_open(context):
    # 获取过去一年的日K线数据(按250个交易日计算)
    # unit='1d' 表示日线频率
    # skip_paused=True 表示跳过停牌日期
    history_data = attribute_history(g.security, 
                                     count=250, 
                                     unit='1d', 
                                     fields=['open', 'close', 'high', 'low', 'volume'],
                                     skip_paused=True)
    
    # 打印最后一天的数据(即昨天的收盘数据,因为attribute_history不包含当天未收盘的数据)
    log.info(history_data.tail())

关键参数说明

  1. security: 股票代码,例如 '000001.XSHE'(平安银行)。
  2. frequency / unit: 数据频率,'daily''1d' 代表日线。
  3. fields: 需要获取的字段,常见的有:
    • open: 开盘价
    • close: 收盘价
    • high: 最高价
    • low: 最低价
    • volume: 成交量
  4. fq (复权): get_priceattribute_history 默认通常是前复权(pre),这对于策略回测是最合理的,因为它消除了分红配股对价格的干扰。如果需要真实价格,可以设置 fq=None