🚀 AI 一键生成 qmt 策略代码
立即体验

QMT 进阶教程:如何通过 Python 调用 VBA 自定义指标?

qmt | 发布时间: 2026/8/2
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 进阶教程:如何通过 Python 调用 VBA 自定义指标?

Question: 请教一下,如何在 QMT 中用 Python 代码调用 VBA 编写的自定义指标?

解决方案

在 QMT (迅投量化平台) 中,通常所说的“VBA 指标”或“公式指标”是指在客户端图形界面或公式编辑器中编写的技术指标/扩展指标。Python 策略本身无法直接运行 VBA 语言逻辑,但可以通过 QMT 提供的扩展数据 API(ext_data因子数据接口来引用这些在图形系统中计算好的自定义指标。自由引用这些指标的完整步骤如下:

一、 原理解析

  1. 公式/指标生成扩展数据:在 QMT 客户端中,将由公式或 VBA 计算出的技术指标(如自定义 CCI、RSI 或图形指标)保存或映射为扩展数据(ExtData)
  2. Python 获取数据:在 Python 策略的 handlebar(ContextInfo) 函数中,使用 ext_data()ContextInfo.get_ext_all_data() 接口按指标名称和标的代码提取其对应数值。

二、 Python 调用自定义指标 API 说明

1. ext_data(extdataname, stockcode, deviation, ContextInfo)

  • 释义:获取指定的扩展数据/自定义指标数值。
  • 参数
    • extdataname (string):扩展数据/自定义指标的名称(例如 'mycci')。
    • stockcode (string):合约代码,格式如 '600000.SH'
    • deviation (number):K 线偏移量(0 表示当前 Bar,N 表示向右偏移 N 根,-N 表示向左偏移 N 根)。
    • ContextInfo:全局上下文对象。
  • 返回值number(对应的指标数值)。

三、 Python 策略代码示例

#coding:gbk

def init(ContextInfo):
    # 设置交易标的
    ContextInfo.set_universe(['600000.SH'])
    print("策略初始化完成,准备获取自定义指标...")

def handlebar(ContextInfo):
    # 获取当前主图股票代码
    stock_code = ContextInfo.stockcode
    
    # 调用名为 'mycci' 的扩展数据/VBA自定义指标,不偏移(0)
    vba_indicator_value = ext_data('mycci', stock_code, 0, ContextInfo)
    
    # 打印当前 K 线的指标结果
    print(f"当前Bar索引: {ContextInfo.barpos}, 股票代码: {stock_code}, 自定义指标值: {vba_indicator_value}")
    
    # 根据自定义指标制定交易逻辑示例
    if vba_indicator_value > 100:
        print("自定义指标触发上穿条件,可执行买入逻辑")

四、 批量获取历史扩展数据(可选)

如果需要在策略初始化 init() 时一次性加载所有品种的自定义扩展指标历史数据,可以使用:

def init(ContextInfo):
    # 引用扩展数据在指定时间区域内的所有值和排名,返回 pandas.Panel 或 DataFrame 结构
    all_ext_data = ContextInfo.get_ext_all_data('mycci', start_time='20230101', end_time='20231231')
    print(all_ext_data)

五、 注意事项

  1. 数据补充与下载:使用扩展数据前,请确保在 QMT 客户端的【数据管理】中已经补充并计算了对应的指标/扩展数据。
  2. 编码格式:QMT Python 脚本首行请写 #coding:gbk,防止日志或代码注释出现乱码。