问题描述
1、查持仓股实时最新价用 get_full_tick 即可吗?盘中(10:30、14:45)调用有限制吗?
2、查”今日开盘价”也用 get_full_tick 的 open 字段吗?
解决方案
针对您在 QMT 平台中查询价格的问题,解答如下:
1. 查持仓股实时最新价用 get_full_tick 即可吗?盘中调用有限制吗?
是的,查持仓股实时最新价使用 ContextInfo.get_full_tick() 是非常合适且常用的方法。
- 获取最新价:调用该函数后,会返回一个字典,您可以通过提取字典中的
lastPrice字段来获取实时最新价。 - 盘中调用限制:在盘中(如 10:30、14:45 等交易时段)调用
get_full_tick没有严格的次数限制。但是,为了保证策略运行的效率和平台的稳定性,建议:- 在
handlebar函数中由行情 tick 驱动调用。 - 或者使用
ContextInfo.run_time设置定时器(例如每 3 秒或 5 秒查询一次)。 - 避免在
while True死循环中无休止地高频调用,这可能会导致界面卡顿或 CPU 占用过高。
- 在
2. 查“今日开盘价”也用 get_full_tick 的 open 字段吗?
是的,完全可以。
get_full_tick 返回的字典中包含了丰富的盘口和快照数据,其中的 open 字段即代表该股票当日的开盘价。此外,它还包含 high(最高价)、low(最低价)、lastClose(昨收价)等实用字段。
代码示例
以下是一个在 handlebar 中获取实时最新价和今日开盘价的示例代码:
#coding:gbk
def init(ContextInfo):
# 设置需要查询的股票池,例如平安银行和万科A
ContextInfo.stock_list = ['000001.SZ', '000002.SZ']
def handlebar(ContextInfo):
# 确保只在最新的一根K线上执行,避免在历史回测阶段频繁打印
if not ContextInfo.is_last_bar():
return
# 获取全量 tick 数据
tick_data = ContextInfo.get_full_tick(ContextInfo.stock_list)
for stock in ContextInfo.stock_list:
if stock in tick_data:
# 获取最新价
last_price = tick_data[stock]['lastPrice']
# 获取今日开盘价
open_price = tick_data[stock]['open']
print(f"股票代码: {stock}, 实时最新价: {last_price}, 今日开盘价: {open_price}")
补充说明:
如果您只需要历史或当天的 K 线级别数据(如日线的开盘价),您也可以使用 ContextInfo.get_market_data_ex 函数获取 1d 周期的 open 字段,但在实盘中获取瞬时快照,get_full_tick 是最高效的选择。