问题描述
call_vba()函数,券商的 QMT 能正常调用?还是要迅投的付费会员才能用?
解决方案
券商版 QMT 与 call_vba() 权限说明
关于 call_vba() 函数在 QMT 中的调用权限,通常有以下几种情况:
- 券商版 QMT 权限差异:券商免费提供的 QMT 终端(通常称为普通版或极简版)在 API 权限上可能会有所阉割。部分券商的高级版本(如需要满足一定资金门槛开通的专业版)可能会开放更多的底层函数调用权限。具体是否支持
call_vba(),完全取决于您所在券商采购的 QMT 版本以及为您开通的权限级别。 - 迅投官方付费版本:迅投官方的专业版、机构版(通常需要付费或机构合作)拥有最完整的 API 权限,通常包含对底层指标和复杂函数的无限制调用。
建议:最直接的方法是在您的券商版 QMT 策略编辑器中编写一个简单的测试脚本调用该函数,如果报错提示无权限或找不到该函数,则说明当前版本不支持。此时您可以联系您的券商客户经理,询问是否可以申请开通更高级的 QMT 权限。
QMT 官方文档中的指标与扩展数据调用方法(替代方案)
在标准的 QMT Python API 官方文档中,并没有直接推荐使用 call_vba() 来获取指标数据。相反,QMT 提供了专门的引用函数来获取扩展数据和自定义指标数据。如果您在券商版中无法使用 call_vba(),可以尝试使用官方标准的 ext_data() 系列函数。
1. 获取扩展数据 ext_data()
用法:ext_data(extdataname, stockcode, deviation, ContextInfo)
释义:获取在 QMT 平台上定义好的扩展数据或指标数据。
示例代码:
def handlebar(ContextInfo):
# 获取 600000.SH 的自定义指标 'mycci' 的当前值,不偏移
cci_value = ext_data('mycci', '600000.SH', 0, ContextInfo)
print(cci_value)
2. 获取扩展数据在指定时间区间内的值 ext_data_range()
用法:ext_data_range(extdataname, stockcode, begintime, endtime, ContextInfo)
示例代码:
def handlebar(ContextInfo):
# 获取指定时间段内的指标数据
data_dict = ext_data_range('mycci', '600000.SH', '2023-01-01 09:30:00', '2023-12-31 15:00:00', ContextInfo)
print(data_dict)
总结
如果您希望在 Python 策略中复用已有的指标逻辑,建议先在 QMT 的公式编辑器中将指标写好并保存为扩展数据,然后在 Python 策略中通过 ext_data() 接口进行安全、合规的调用,这种方式在绝大多数券商版 QMT 中都是默认支持的。