3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!在 JoinQuant 聚宽平台中遇到 current_data[stock].last_price 价格与实际不符的情况,主要原因与获取时间以及复权设置有关。以下是详细的解答和处理方法:
last_price 与实际不符?根据聚宽 API 文档规定,通过 get_current_data() 获取的 last_price 属性:
last_price,拿到的并不是当天的最新撮合价,而是昨天的收盘价,所以会感觉与实际不符。默认情况下,聚宽平台提供的数据是前复权价格(或者在未开启真实价格的模拟盘中,是基于模拟交易创建日期的调整价格),不是后复权价。
如果您想在开盘前获取当天的集合竞价开盘价,应该使用 day_open 属性,而不是 last_price。
current_data[stock].day_open为了在模拟交易和回测中获取真实的、不复权的价格,强烈建议您在初始化函数中开启动态复权(真实价格)模式。开启后,您通过订单详情和持仓看到的都是真实价格。
设置方法:
在 initialize(context) 函数中添加以下代码:
set_option('use_real_price', True)
def initialize(context):
# 1. 开启真实价格模式,确保交易和获取的现价是不复权的真实价格
set_option('use_real_price', True)
# 设定在 9:30 运行(模拟盘实际会在 9:27~9:30 之间运行)
run_daily(market_open, time='09:30')
def market_open(context):
stock = '000001.XSHE'
current_data = get_current_data()
# 2. 获取当天的开盘价(9:27之后有效)
today_open = current_data[stock].day_open
# 3. 获取最新价(9:30之前是昨收,9:30之后是最新价)
last_price = current_data[stock].last_price
log.info(f"股票 {stock} 当天开盘价: {today_open}, 最新价/昨收价: {last_price}")
总结:
current_data[stock].day_open。initialize 中调用 set_option('use_real_price', True)。