🚀 AI 一键生成 qmt 策略代码

QMT调用模型报错 name 'call_formula' is not defined 的原因与解决办法

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

问题描述

大mqt,调用模型:call_formula 去用 `MA` 指标, 显示错误

大 mqt,调用模型:call_formula 去用 MA 指标, 显示错误:name 'call_formula' is not defined

请教下是什么原因导致的? 谢谢

解决方案

报错原因分析

在 QMT(大智慧/国信等券商定制版)量化平台中,出现 name 'call_formula' is not defined 错误的原因是:QMT 的官方 Python API 中并没有内置 call_formula 这个函数

call_formula 通常是其他量化平台(如 PTrade)中用来直接调用公式指标的函数。在 QMT 中,获取技术指标(如 MA 移动平均线)的逻辑与此不同。QMT 鼓励用户通过获取基础的 K 线数据(如收盘价),然后利用 Python 强大的第三方数据分析库(如 pandasTA-Lib)来自行计算指标。


QMT 中正确计算 MA(移动平均线)的方法

根据 QMT 官方文档,平台已经内置了 pandasTA_Lib 等第三方库。你可以通过 ContextInfo.get_market_data_exContextInfo.get_history_data 获取历史收盘价,然后计算 MA。

方法一:使用内置的 TA-Lib 库计算 MA(推荐)

TA-Lib 是专门用于技术分析的库,计算速度快,QMT 默认已内置。

#coding:gbk
import talib
import numpy as np

def init(ContextInfo):
    # 设置股票池,例如平安银行
    ContextInfo.set_universe(['000001.SZ'])

def handlebar(ContextInfo):
    # 获取当前股票池的收盘价数据,获取过去20根日线
    # 注意:get_market_data 返回的是 pandas.DataFrame 或 pandas.Series
    df = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), period='1d', count=20)
    
    if df.empty:
        return
        
    # 提取收盘价序列
    close_prices = df['close'].values
    
    # 确保数据长度足够计算 MA5
    if len(close_prices) >= 5:
        # 使用 talib 计算简单移动平均线 (SMA 即 MA)
        ma5 = talib.SMA(close_prices, timeperiod=5)
        
        # 打印最新的一根 MA5 的值
        print("最新 MA5 值为:", ma5[-1])

方法二:使用 pandas 计算 MA

如果你更习惯使用 pandas 的滚动窗口函数,也可以直接计算:

#coding:gbk
import pandas as pd

def init(ContextInfo):
    ContextInfo.set_universe(['000001.SZ'])

def handlebar(ContextInfo):
    # 获取历史收盘价
    df = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), period='1d', count=20)
    
    if df.empty:
        return
        
    # 使用 pandas 的 rolling 函数计算 MA5
    # df['close'] 是一个 Series
    ma5_series = df['close'].rolling(window=5).mean()
    
    # 获取最新的 MA5 值
    latest_ma5 = ma5_series.iloc[-1]
    print("最新 MA5 值为:", latest_ma5)

总结

在 QMT 中编写策略时,请摒弃其他平台“直接调用指标公式”的思维。QMT 的核心逻辑是:取数据 -> 用 Python 库算指标 -> 产生信号 -> 下单。熟练掌握 pandasTA-Lib 将极大提升你在 QMT 平台上的策略开发效率。