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

JoinQuant 聚宽平台如何获取前 N 日历史价格并与当天价格进行对比?

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

问题描述

如何获取前n日的价格?

若当天获取current_price,对比两日前的价格?

解决方案

在 JoinQuant (聚宽) 平台上,获取前 N 日的历史价格以及当前价格是非常常见的操作。你可以通过 attribute_history 函数来获取历史价格,并通过 data 对象或 get_current_data() 获取当前价格。

1. 获取前 N 日的价格

在策略运行中(如 handle_data 或定时运行函数中),最常用的获取单只股票历史数据的 API 是 attribute_history。需要特别注意的是:attribute_history 获取的天级别数据是不包含当天的

例如,如果你想获取两日前(T-2日)的收盘价,你可以获取过去 2 天的数据,返回的 DataFrame 中第一行即为两日前的数据,最后一行即为昨日的数据。

2. 获取当天的当前价格 (current_price)

  • handle_data(context, data):可以直接使用 data[security].closedata[security].price 获取当前单位时间的价格。
  • 在任何地方:可以使用 get_current_data()[security].last_price 获取最新价。

3. 完整代码示例:对比当前价格与两日前的价格

下面是一个完整的策略代码片段,展示了如何在每天开盘时获取当前价格,并与两日前的收盘价进行对比:

# 导入聚宽函数库
import jqdata

def initialize(context):
    # 设定要操作的股票:平安银行
    g.security = '000001.XSHE'
    # 设定基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 每天 09:30 运行策略逻辑
    run_daily(market_open, time='09:30')

def market_open(context):
    security = g.security
    
    # 1. 获取当前价格 (current_price)
    # 使用 get_current_data() 获取最新价
    current_data = get_current_data()
    current_price = current_data[security].last_price
    
    # 2. 获取前 N 日的价格
    # 获取过去 2 天的收盘价数据 (不包含当天)
    # 返回的 DataFrame 中:
    # index 0 是 T-2 日 (两日前)
    # index 1 是 T-1 日 (昨日)
    hist_data = attribute_history(security, 2, '1d', ['close'])
    
    # 提取两日前的收盘价
    price_2_days_ago = hist_data['close'][0]
    
    # 打印日志查看价格
    log.info(f"当前价格: {current_price}, 两日前价格: {price_2_days_ago}")
    
    # 3. 对比价格并执行交易逻辑
    if current_price > price_2_days_ago:
        log.info("当前价格高于两日前价格,执行买入逻辑...")
        # order_value(security, 10000)
    elif current_price < price_2_days_ago:
        log.info("当前价格低于两日前价格,执行卖出逻辑...")
        # order_target(security, 0)

核心逻辑解析:

  • attribute_history(security, 2, '1d', ['close']):获取过去 2 个交易日的日线收盘价。假设今天是周三,那么它返回的是周一和周二的数据。
  • hist_data['close'][0]:取返回结果的第一条数据,即周一(两日前)的收盘价。
  • get_current_data()[security].last_price:获取策略运行到当前时刻的最新价格,用于与历史价格进行实时对比。