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

JoinQuant量化平台:每天调用一次时current_price是哪个时刻的价格?如何判断日内价格变化?

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

问题描述

每天调用一次时,current_price是哪个时刻的价格?

每天调用一次时,current_price是哪个时刻的价格?
如果我想判断一天内,价格如果小于某个值,就再看看盘中价格有没有大于某个值,这时决定买卖。
也就是说,我希望看到一个时间段内的变化情况,是否可以实现?

解决方案

1. 每天调用一次时,current_price 是哪个时刻的价格?

在 JoinQuant 平台中,如果您的策略频率设置为**“天(日频)”**,或者您使用 run_daily 每天只在特定时间(如开盘 09:30)调用一次函数,那么获取到的价格含义如下:

  • 使用 attribute_historyhistory 获取日线数据时:获取到的是昨天的收盘价。因为在今天盘中(或开盘时),今天的日线还没有走完,为了避免未来函数,系统返回的最新一根完整日线是昨天的。
  • 使用 get_current_data()['股票代码'].last_price:获取到的是当前运行时刻的最新价。如果在 09:30 运行,获取到的通常是集合竞价产生的开盘价(09:30 之前获取则返回昨日收盘价)。

2. 如何判断一天内的价格变化情况(如先跌后涨)?

如果您希望在一天内“盯盘”,判断价格是否先小于某个值,然后再大于某个值并进行买卖,仅仅每天调用一次函数是无法实现的。因为每天调用一次意味着策略在一天中只“看”了一眼市场,无法捕捉盘中的连续波动。

要实现这种日内时间段内的变化监控,您必须将策略的运行频率设置为“分钟(minute)”。在分钟频下,您可以实现对日内价格轨迹的跟踪。

实现思路与代码示例

步骤 1:设置回测频率为“分钟”
在策略初始化时,或者在回测界面的右上角,确保频率选择为“分钟”。

步骤 2:使用全局变量记录日内状态
利用全局变量 g 来记录当天的最低价、是否已经触发过低于阈值的条件等。

步骤 3:在每分钟调用的函数中进行逻辑判断

import jqdata

def initialize(context):
    g.security = '000001.XSHE'
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 每天开盘前重置当天的状态变量
    run_daily(reset_daily_status, time='09:00')
    
    # 每分钟运行一次监控逻辑
    run_daily(intraday_monitor, time='every_bar')

def reset_daily_status(context):
    # 每天重置:是否已经跌破过目标值
    g.has_dropped_below_target = False
    # 每天重置:是否今天已经交易过(避免频繁交易)
    g.has_traded_today = False

def intraday_monitor(context):
    if g.has_traded_today:
        return
        
    # 获取当前时刻的最新价
    current_data = get_current_data()
    current_price = current_data[g.security].last_price
    
    # 假设我们的判断标准是:先跌破 10.0 元,然后再反弹突破 10.5 元就买入
    lower_threshold = 10.0
    upper_threshold = 10.5
    
    # 1. 检查是否跌破过低点
    if not g.has_dropped_below_target and current_price < lower_threshold:
        g.has_dropped_below_target = True
        log.info(f"时间 {context.current_dt}:价格 {current_price} 已跌破 {lower_threshold}")
        
    # 2. 如果已经跌破过低点,再检查是否反弹突破高点
    if g.has_dropped_below_target and current_price > upper_threshold:
        log.info(f"时间 {context.current_dt}:价格 {current_price} 反弹突破 {upper_threshold},执行买入!")
        order_value(g.security, context.portfolio.available_cash)
        g.has_traded_today = True # 标记今日已交易

总结

  • 日频策略只能看到前一天的历史或当天的开盘切片,无法做日内轨迹判断。
  • 分钟频策略结合全局变量(g.xxx)记录状态,是实现“先跌后涨”、“日内极值反转”等日内时间段变化监控的标准做法。