VBA公式模型

QMT 的 VBA 公式系统是其量化交易版里的公式编写系统,用类 VB 的公式语言写指标、选股、图表化和程序化交易策略。从通达信、文华麦语言、同花顺等公式平台迁移过来的交易者最容易上手——它的「数据引用」「跨周期调用」思路和那些平台一脉相承。本章讲清编写规则、数据引用和两种运行原理。

本篇需要读者对 VB 类语言的写法有基本了解。

模型的编写规则

在系统面板左侧模型树右键,可对模型策略 新建/编辑/导入。新建模型时,编辑器主界面定义以下内容:

设定说明
名称中文/字母/数字组成,同类公式中必须唯一
描述一段文字,简述公式含义,列表显示用,不宜过长
位置主图叠加(如 MA、BOLL)还是副图
参数计算参数:参数名、最小值、最大值、缺省值、步长——替代公式里的常数,方便调参不改代码
其他加密、快速计算、刷新间隔等(支持凭密码导出加密公式)
用法注释详细说明如何使用、注意事项、计算方法
交易参数单股模型通过接口直接下单的交易参数设置

所有公式系统遵守统一的运算法则和格式。例如:

A:=X+Y;
B:=A/Z;
C:=B*0.618;

数据类型:变量与常量

公式中的基本数据来源于接收的行情数据,按是否随时间变化分两类:

  • 变量:随时间变化的数据,如成交量、收盘价。
  • 常量:永远不变的数据,如数字 5。

函数对参数类型有要求,不能乱用。例如均线 MA(CLOSE, 5):

  • MA 第一个参数要求是变量,CLOSE 返回的正是变量——正确。
  • MA 第二个参数要求是常量,5 是常量——正确。
  • 所以不能写成 MA(5, CLOSE)——参数顺序和类型都错了。

函数计算的结果一般是一个变量(序列)。

赋值与输出

符号含义
:=赋值,中间变量,不画线
:输出,画一条指标线
MA5:=MA(CLOSE,5);     // 中间变量,不画
MA20:MA(CLOSE,20);    // 输出,画一条线

特殊数据引用

1. 引用其它指标

调用别的指标公式,格式 "指标.指标线"(参数):

写法含义
"MACD.DEA"(26,12,9)MACD 的 DEA 线,参数 26/12/9
"MACD"(26,12,9)MACD 的最后一条线
"MACD"MACD 最后一条线,用默认参数

指标和指标线之间用顿号分开,参数在末尾用括号括起、逗号分隔,整个表达式用引号引住。

2. 跨周期引用指标

引用不同分析周期上的指标,基本格式 "指标.指标线#周期"(参数):

周期代码含义周期代码含义
MIN11 分钟DAY日线
MIN55 分钟WEEK周线
MONTH/YEAR月线/年线
  • "MACD.DEA#WEEK"(26,12,9):当天所在本周的 MACD DEA。
  • "MACD.DEA##WEEK"(26,12,9):扩展格式,上一周的数据(## 比 # 多回退一个周期)。

⚠️ 系统翻看品种时可以自动补数据,但无法自动补被引用品种或不同周期的数据。首次使用或不确定数据齐全时,务必手工补充数据。

3. 跨品种引用

引用其它个股或大盘数据,格式 "品种代码$数据":

"SZ000002$VOL"      // 000002 本周期成交量
"SH000001$CLOSE"    // 上证指数本周期收盘(大盘当个股处理)

更灵活的跨品种/周期引用用函数:

  • CALLSTOCK:引用其它证券或合约的部分基础数据。
  • STKINDI:引用任意品种、任意周期、任意指标的输出(模型编辑器函数列表里有详细说明)。

两种运行模式

这是 VBA 公式系统的核心区别——同一个公式可以按两种原理运行:

序列模式

整个序列(所有 K 线)一次性参与计算,公式像对数组做运算。适合纯技术指标计算,速度快,但不能写复杂的逐根逻辑(如循环、依赖前一根状态的递推)。

逐 K 线模式

自左向右逐根 K 线驱动,每根 K 线触发一次公式计算。可以使用循环、条件判断、引用历史 K 线的状态,表达力强,适合写交易策略(需要根据持仓和历史信号做判断)。

写程序化交易策略大多用逐 K 线模式,因为它能逐根判断信号、记录状态;纯画指标用序列模式更快。

一个简单的公式示例

双均线金叉死叉的公式雏形:

{参数:FAST(5,1,100,5), SLOW(20,1,100,20)}
MA_FAST:=MA(CLOSE,FAST);
MA_SLOW:=MA(CLOSE,SLOW);
GOLD:CROSS(MA_FAST,MA_SLOW);   // 金叉:快线上穿慢线,输出信号
DEAD:CROSS(MA_SLOW,MA_FAST);   // 死叉:慢线上穿快线
  • CROSS(A,B) 是上穿判断函数(A 上穿 B 返回 1)。
  • 在模型编辑器里把它设为「条件选股」或「程序化交易」,配合交易参数即可用于选股和下单。

何时选 VBA,何时选 Python

情况推荐
从通达信/文华/同花顺公式迁移,逻辑已用公式表达VBA 公式
跨周期、多指标叠加的技术分析VBA(跨周期引用方便)
选股、条件预警、图表化指标VBA
复杂的资金管理、动态仓位、多品种组合内置 Python
需要丰富第三方库(统计/机器学习)内置 Python / XtQuant

VBA 公式和内置 Python 可以分工:公式做信号和指标,Python 做下单和组合管理。

下一步

公式和 Python 都会了。要查具体品种的字段、代码格式、因子,看 数据字典与品种数据。