3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中使用 get_full_tick 获取非主图合约(特别是期权合约)的数据时,如果返回空字典 {},通常是因为没有订阅该合约的实时行情或本地缺乏该合约的基础数据。此外,您测试的时间是早上 08:50,此时集合竞价尚未产生有效的 tick 数据,也可能导致获取不到最新行情。
以下是解决该问题的几种方法:
get_market_data_ex 替代(强烈推荐)get_market_data_ex 是 QMT 官方推荐的获取行情数据的接口。它内置了数据订阅功能(subscribe=True),在获取数据的同时会自动向服务器订阅该合约的行情,非常适合获取期权等非主图合约的 tick 数据。
修改后的代码示例:
#coding:gbk
def init(ContextInfo):
pass
def handlebar(ContextInfo):
# 使用 get_market_data_ex 获取 tick 数据,subscribe=True 会自动订阅
data_etf = ContextInfo.get_market_data_ex(
[], ['510050.SH'], period='tick', count=1, subscribe=True
)
print('510050.SH:', data_etf)
data_opt = ContextInfo.get_market_data_ex(
[], ['10007891.SHO'], period='tick', count=1, subscribe=True
)
print('10007891.SHO:', data_opt)
subscribe_quote 显式订阅行情如果您坚持使用 get_full_tick,需要先在 init 函数中通过 subscribe_quote 显式订阅该期权合约的 tick 行情,否则底层 C++ 接口不会主动推送该合约的数据。
修改后的代码示例:
#coding:gbk
def init(ContextInfo):
# 显式订阅期权合约的 tick 行情
ContextInfo.subscribe_quote('10007891.SHO', period='tick', dividend_type='none')
ContextInfo.subscribe_quote('510050.SH', period='tick', dividend_type='none')
def handlebar(ContextInfo):
# 订阅后,get_full_tick 才能正常获取到推送的数据
data_etf = ContextInfo.get_full_tick(['510050.SH'])
print('510050.SH:', data_etf)
data_opt = ContextInfo.get_full_tick(['10007891.SHO'])
print("10007891.SHO:", data_opt)
期权合约数量庞大,QMT 客户端默认可能不会下载所有期权的基础信息。请确保您已经补充了期权数据:
在实盘或模拟盘中,为了保证数据获取的稳定性和代码的简洁性,建议全面转向使用 ContextInfo.get_market_data_ex 接口来获取各类行情数据。