问题描述
我得中金 QMT 客户端 ,PY 策略编写里面 没有 get_market_data_ex 这个函数 请问 怎么才能弄出来?
解决方案
在 QMT 平台中,get_market_data_ex 是官方后来推出的一个非常强大且推荐使用的行情获取函数(用于替代老版的 get_market_data)。如果您在中金 QMT 客户端的 Python 策略编写中找不到这个函数,通常是因为客户端版本过旧导致的。
券商定制版的 QMT(如中金版)更新频率有时会滞后于迅投官方的最新版本。以下是解决该问题的几种方法:
方法一:升级 QMT 客户端版本(推荐)
要“弄出来”这个函数,最直接的方法就是升级您的中金 QMT 客户端:
- 检查更新:在 QMT 客户端的菜单栏中寻找“检查更新”或“关于”选项,尝试在线升级到最新版本。
- 联系客户经理:如果客户端内无法直接升级,建议直接联系您的中金证券客户经理或专属客服,向他们索要最新版本的中金 QMT 安装包。明确告知他们您需要使用
get_market_data_ex接口,需要支持该接口的较新版本。
方法二:使用替代函数(临时过渡)
在您成功升级客户端之前,可以使用 QMT 提供的老版行情获取函数作为替代方案。官方文档中虽然提示老版接口不建议使用,但在旧版本客户端中它们是完全有效的。
替代方案 1:使用 get_market_data
老版的 get_market_data 同样可以获取历史和实时行情数据,只是参数结构和返回的数据格式(如 Panel)与 ex 版本略有不同。
示例代码:
def init(ContextInfo):
# 设置股票池
ContextInfo.set_universe(['000300.SH'])
def handlebar(ContextInfo):
# 获取当前股票池中股票最近两天的收盘价和开盘价
df = ContextInfo.get_market_data(
['close', 'open'],
stock_code=ContextInfo.get_universe(),
skip_paused=True,
period='1d',
dividend_type='front',
count=2
)
print(df)
替代方案 2:使用 get_history_data
如果您只需要获取基础的 K 线数据(如开、高、低、收),可以使用 get_history_data,它返回的是一个字典结构,非常轻量。
示例代码:
def init(ContextInfo):
ContextInfo.set_universe(['000300.SH'])
def handlebar(ContextInfo):
# 获取最近2天的日线收盘价
hisdict = ContextInfo.get_history_data(2, '1d', 'close')
for k, v in hisdict.items():
if len(v) > 1:
print(f"{k} 今日涨幅: {v[1] - v[0]}")
总结
get_market_data_ex 是 QMT 较新版本引入的接口,强烈建议您联系中金证券更新客户端以获得最佳的开发体验和更完善的数据结构(如直接返回 pandas.DataFrame)。在更新前,请先使用 get_market_data 或 get_history_data 进行策略开发。