3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投量化交易平台)中,Python 策略不仅可以直接读取市场行情与财务数据,还能与平台的传统技术指标/VBA自定义计算公式进行交互。对于习惯使用公式或 VBA 计算特色指标(如自定义 CCI、MACD 变体等)的开发者,QMT 提供了**扩展数据(ext_data)和因子数据(factor_value)**接口,实现 Python 对 VBA/技术指标计算结果的直接调用。
QMT 通过“扩展数据”功能将图形界面或 VBA 计算出的特色指标提前计算并保存到本地数据库。在 Python 策略中,使用 ext_data() 或 ContextInfo.get_ext_all_data() 等 API 接口,即可直接提取这些指标数值或全市场排名。
ext_data()ext_data(extdataname, stockcode, deviation, ContextInfo)extdataname (str): 扩展数据/自定义指标名称(如 'mycci')。stockcode (str): 合约代码,格式为 '代码.市场'(如 '600000.SH')。deviation (int): K线偏移量,0 表示不偏移,N 表示向右偏移 N 根 K 线,-N 表示向左偏移。ContextInfo: 全局策略上下文对象。number(指标对应数值)。ext_data_rank()ext_data_rank(extdataname, stockcode, deviation, ContextInfo)ContextInfo.get_ext_all_data()ContextInfo.get_ext_all_data(extdataname, start_time='19720101', end_time='22010101')pandas.Panel 或结构化数据,建议在 init() 函数中初始化加载。以下示例展示了如何在 QMT Python 策略中初始化并逐 K 线读取自定义指标 mycci 的数值及全市场排名:
#coding:gbk
def init(ContextInfo):
# 设定交易股票池
stock_list = ['600000.SH', '000001.SZ']
ContextInfo.set_universe(stock_list)
# 预加载扩展数据(建议在 init 中一次性提取)
# ext_data_panel = ContextInfo.get_ext_all_data('mycci')
print("策略初始化完成,准备提取扩展数据")
def handlebar(ContextInfo):
# 获取当前主图股票代码
symbol = ContextInfo.stockcode + '.' + ContextInfo.market
# 1. 获取自定义 VBA/指标 'mycci' 的当前 Bar 数值
cci_value = ext_data('mycci', symbol, 0, ContextInfo)
# 2. 获取该指标数值在全市场中的排名
cci_rank = ext_data_rank('mycci', symbol, 0, ContextInfo)
# 打印结果
print(f"当前K线位置: {ContextInfo.barpos} | 标的: {symbol} | 自定义CCI值: {cci_value} | 排名: {cci_rank}")
# 3. 基于自定义指标构建交易逻辑
if cci_value > 100:
# 触发买入信号(以买一价下单 100 股)
order_shares(symbol, 100, 'BUY1', 0, ContextInfo)
数据管理 -> 补充数据)。#coding:gbk,防止中文指标名称解析乱码。init() 中使用 ContextInfo.get_ext_all_data() 批量载入内存,避免在 handlebar() 中频繁调用单点查询。