问题描述
解决方案
在JoinQuant(聚宽)量化平台中,get_price 是获取历史行情数据最常用的 API 之一。要获取多只股票的最新价,可以通过传入股票代码列表,并设置 count=1 来实现。
核心代码示例
# 假设我们要获取平安银行和万科A的最新收盘价
stock_list = ['000001.XSHE', '000002.XSHE']
# 获取最新价(前复权)
df = get_price(stock_list, count=1, end_date=context.current_dt, frequency='1m', fields=['close'], panel=False)
# 打印结果
print(df)
关键参数解析
- security: 传入一个包含多只股票代码的列表(如
['000001.XSHE', '000002.XSHE'])。 - count=1: 表示获取截止
end_date前的最后 1 个单位时间的数据,即最新数据。 - frequency='1m': 使用分钟线(
1m)可以获取到日内最新的价格。如果使用daily(或1d),在盘中获取的可能是昨日的收盘价。 - fields=['close']: 指定只获取收盘价字段,减少数据传输量,提升运行速度。
- panel=False: 非常重要! 在 pandas 0.25 版之后,Panel 结构已被移除。获取多标的数据时,强烈建议设置
panel=False,此时函数将返回一个等效的 DataFrame,行索引为时间,列索引为股票代码,方便直接按列名读取对应股票的价格。
进阶技巧:使用 get_current_data()
虽然 get_price 可以获取最新价,但在回测或模拟交易的 handle_data 或定时运行函数中,如果仅仅是为了获取当前时刻的最新价、涨跌停价或停牌状态,更推荐使用专用的 get_current_data() 函数,它的执行效率更高,且专为获取当前截面数据设计:
def handle_data(context, data):
current_data = get_current_data()
price_pingan = current_data['000001.XSHE'].last_price
price_wanke = current_data['000002.XSHE'].last_price
print(f"平安银行最新价: {price_pingan}, 万科A最新价: {price_wanke}")
总结:在研究环境中或需要获取历史切片时,使用 get_price(..., count=1, panel=False) 是最佳选择;而在策略交易盘中实时获取最新价时,优先使用 get_current_data()。