1. 通达信公式编写入门指南
通达信作为国内主流证券分析软件,其公式系统是技术分析的核心工具。我第一次接触通达信公式是在2015年股灾期间,当时发现手动分析根本跟不上市场变化,从此踏上了公式编写的不归路。
公式编写本质上是一种技术分析的量化表达,通过数学语言将交易策略转化为计算机可执行的指令。与同花顺、大智慧等软件相比,通达信的公式系统更加开放灵活,支持从简单均线到复杂量化模型的各种实现。
1.1 基础语法结构
通达信公式采用类C语言的语法结构,主要由以下几部分组成:
code复制// 示例:5日均线上穿20日均线买入信号
MA5:=MA(CLOSE,5); // 定义5日均线
MA20:=MA(CLOSE,20); // 定义20日均线
CROSS(MA5,MA20),COLORRED; // 上穿信号标记红色
关键点:每行语句以分号结束,:=表示赋值,函数调用使用括号传参。注释用//表示,这对后期维护至关重要。
1.2 数据类型与运算符
通达信支持以下几种数据类型:
- 价格序列:OPEN/HIGH/LOW/CLOSE/VOL等
- 数值常量:如5、20等参数
- 布尔值:用于条件判断
- 字符串:主要用于显示文本
运算符优先级与常规编程一致:
- 括号()
- 乘除*/
- 加减+-
- 比较><=
- 逻辑AND/OR
1.3 开发环境配置
通达信公式编辑器快捷键备忘:
- Ctrl+N 新建公式
- Ctrl+S 保存公式
- F3 插入函数
- F4 插入变量
- F5 语法检查
建议将工作区分为三个部分:
- 参数输入区(顶部)
- 代码编辑区(中部)
- 调试输出区(底部)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中级公式开发技巧
2.1 条件组合策略
实战中经常需要组合多个条件,例如MACD金叉且成交量放大:
code复制DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA := EMA(DIFF,9);
MACD := 2*(DIFF-DEA);
COND1 := CROSS(DIFF,DEA); // MACD金叉
COND2 := VOL/MA(VOL,5) > 1.5; // 成交量超5日均量50%
BUY_SIGNAL := COND1 AND COND2;
经验:条件组合时建议每个子条件单独定义变量,便于后期调整。AND/OR逻辑要加括号明确优先级。
2.2 循环与递归处理
通达信不支持传统for/while循环,但可以通过REF函数实现递归计算。例如计算斐波那契数列:
code复制// N日斐波那契均线
FIB[1]:=1;
FIB[2]:=1;
FOR i:=3 TO 20 DO
FIB[i]:=FIB[i-1]+FIB[i-2];
FIB_MA:SUM(CLOSE*FIB,20)/SUM(FIB,20);
2.3 多周期数据引用
跨周期分析是进阶必备技能,常用#运算符指定周期:
code复制// 日线引用周线MACD
W_DIFF := "MACD.DIFF#WEEK";
W_DEA := "MACD.DEA#WEEK";
CROSS(W_DIFF,W_DEA),COLORGREEN;
周期标识符:
- MIN1 1分钟
- MIN5 5分钟
- DAY 日线
- WEEK 周线
- MONTH 月线
3. 高级量化策略实现
3.1 资金流模型构建
结合最新热词中的资金流指标,实现机构资金监控:
code复制// 大单净流入模型
VAR1:=IF(CLOSE>OPEN,VOL,0); // 阳线成交量
VAR2:=IF(CLOSE<OPEN,VOL,0); // 阴线成交量
MAIN_FUND:EMA(VAR1,5)-EMA(VAR2,5),COLORSTICK;
3.2 波动率量化策略
实现热词中的"一分钟做T"策略:
code复制// 波动率突破系统
ATR:=MA(TR,14); // 真实波幅
UPBAND:=EMA(CLOSE,20)+ATR;
DNBAND:=EMA(CLOSE,20)-ATR;
BUY:=CROSS(CLOSE,UPBAND);
SELL:=CROSS(DNBAND,CLOSE);
3.3 板块轮动监控
实现热词中的板块领涨股识别:
code复制// 板块相对强度指标
SECTOR_RSI:=RSI(CLOSE,14);
MARKET_RSI:=RSI("999999$CLOSE",14);
OUTPERFORM:=SECTOR_RSI>MARKET_RSI AND
CLOSE/HHV(CLOSE,20)>1.15;
4. 函数全表详解
4.1 行情函数速查
| 函数名 | 参数 | 说明 | 示例 |
|---|---|---|---|
| OPEN | N | N日前开盘价 | OPEN[1]昨日开盘 |
| HIGH | N | N日内最高价 | HIGH[3]三日最高 |
| LOW | N | N日内最低价 | LOW[0]当日最低 |
| CLOSE | N | N日前收盘价 | CLOSE周线收盘价 |
| VOL | N | N日成交量 | VOL/MA(VOL,5)>1.2 |
4.2 数学函数精要
统计类函数使用要点:
- SUM(X,N) 需要警惕未来函数问题
- MA(X,N) 简单移动平均有滞后性
- EMA(X,N) 指数平滑反应更快但噪声多
- HHV/LLV 取极值时建议结合条件过滤
4.3 逻辑函数实战
跨指标条件判断典型模式:
code复制// KD金叉且RSI超卖
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
RSI1:=RSI(CLOSE,6);
BUY:=CROSS(K,D) AND RSI1<30;
5. 常见问题排查手册
5.1 语法错误TOP5
- 缺少分号:行末必须加分号
- 中文符号:所有符号必须英文状态输入
- 变量未定义:使用前必须先赋值
- 括号不匹配:检查所有括号成对出现
- 函数参数错误:检查参数类型和数量
5.2 逻辑错误调试
典型错误案例:
code复制// 错误写法:每次满足条件都触发
IF CLOSE>OPEN THEN BUY=1;
// 正确写法:仅首次满足触发
BUY:=CROSS(CLOSE,MA(CLOSE,20));
5.3 性能优化建议
- 减少REF嵌套层级
- 避免在循环中使用复杂计算
- 使用EMA代替MA提升速度
- 压缩不必要的中间变量
- 分步调试复杂公式
6. 实战案例解析
6.1 高胜率选股公式
根据热词中"胜率98%"的需求,构建多因子模型:
code复制// 三因子共振系统
FACTOR1:=CLOSE>MA(CLOSE,60); // 站上年线
FACTOR2:=MACD.DIFF>0; // MACD多头
FACTOR3:=RSI(CLOSE,14)>50; // 动量向上
SELECT:FACTOR1 AND FACTOR2 AND FACTOR3;
6.2 主力追踪指标
实现热词中的主力监控:
code复制// 主力资金异动模型
VAR1:=VOL/CAPITAL*100; // 换手率
VAR2:=CLOSE/REF(CLOSE,20)-1; // 20日涨幅
MAIN_POWER:IF(VAR1>5 AND VAR2>0.15,1,0);
6.3 智能交易系统
整合多个热词需求的综合策略:
code复制// 量化交易系统
ENTRY1:=CROSS(MACD.DIFF,MACD.DEA); // MACD信号
ENTRY2:=VOL>MA(VOL,20)*1.5; // 放量
STOP_LOSS:=LOW<REF(LOW,1); // 止损条件
POSITION_SIZE:=CROSS(EMA(CLOSE,5),EMA(CLOSE,10)); // 仓位控制
