🚀 AI 一键生成 joinquant 策略代码

JoinQuant 平台中 context.portfolio.positions[code].price 在不同时段获取的价格是什么?

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

问题描述

请教一个context对象的问题

price = context.portfolio.positions[code].price

一、请问这个函数在开盘前竞价时段运行,会取到最新的竞价吗?还是只能取到昨天的开盘价?

或者取到当天的开盘价?如果取到当天的开盘价就是未来函数了。

二、请问在模拟和回测时,这个函数会自动调整成回测时数据bar当天的日期吗?

谢谢!!!

解决方案

您好!关于 context.portfolio.positions[code].price 的获取机制,以下是详细的解答:

一、在开盘前竞价时段运行,取到的是什么价格?

context.portfolio.positions[code].price 代表的是该持仓标的的最新行情价格

  1. 在开盘前(如 before_trading_start,通常在 9:00 运行)
    此时当天的交易尚未开始,也没有产生当天的开盘价,因此该属性获取到的是昨天的收盘价。它不会取到当天的开盘价,所以不存在未来函数的问题。

  2. 如何获取集合竞价数据?
    如果您想获取 9:25 集合竞价产生的数据,可以使用专门的 API:get_call_auction()。该函数可以获取指定时间区间内交易日 09:25 的集合竞价数据(当日的集合竞价数据最晚于 9:28 分返回)。

  3. 如何获取当天的开盘价?
    如果您在 9:30 开盘后(如 handle_datarun_daily 设定的盘中时间)运行,可以通过 get_current_data()[code].day_open 获取当天的开盘价。注意,当天的开盘价至少在 09:27 分之后才可获取。

二、在模拟和回测时,时间会自动调整吗?

是的,会自动调整。

在 JoinQuant 的回测和模拟交易引擎中,context 对象是与当前的逻辑时间(即 context.current_dt)严格绑定的。

  • 回测时:引擎会根据您设定的回测频率(按天或按分钟),逐个 Bar 推进时间。当代码运行到某一个特定的 Bar 时,context.portfolio.positions[code].price 获取的就是那个特定时间点(逻辑时间)的最新价格。引擎在底层已经处理好了时间对齐,绝不会让您在历史回测中取到未来的价格。
  • 模拟交易时:逻辑时间与真实时间基本同步,获取的也是当前真实时间点能获取到的最新价格。

总结:

  • 开盘前调用 price 得到的是昨日收盘价。
  • 回测和模拟中,context 里的数据会自动与当前运行的逻辑时间对齐,无需手动调整日期,也不会产生未来函数。