通达信软件及公式系统详解
一、通达信软件是什么?
1. 软件概述
通达信(TDX)是由深圳财富趋势科技股份有限公司开发的专业证券分析软件,是中国证券市场使用最广泛的股票分析软件之一。
2. 主要功能
| 功能模块 | 具体内容 |
|---|---|
| 行情展示 | A股、港股、期货、期权、外汇、全球指数实时行情 |
| 技术分析 | 200+种技术指标,多种画线工具,K线形态识别 |
| 交易功能 | 支持多家券商交易接口,闪电下单,条件单 |
| 资讯信息 | 财经新闻、公告、研报、F10资料深度分析 |
| 选股系统 | 条件选股、模式选股、基本面选股 |
| 公式平台 | 用户自定义指标、选股公式、预警公式 |
| 回测系统 | 交易策略历史回测,绩效分析 |
3. 软件版本
{ 主要版本分类 }
- 券商定制版:各券商定制版本(如华泰、中信、国泰君安等)
- 通达信金融终端:独立付费版本
- 通达信专业版:机构版,功能更强大
- 手机APP版:iOS和Android移动端
二、通达信公式系统详解
1. 什么是通达信公式?
通达信公式是一种专门用于技术分析的脚本语言,允许用户:
- 自定义技术指标
- 编写选股条件
- 创建交易系统
- 设计预警条件
- 绘制自定义图形
2. 公式语言特点
{ 语言特性 }
1. 类Pascal语法结构
2. 解释型语言,实时计算
3. 丰富的内置函数库(约300+个函数)
4. 序列数据处理(处理时间序列数据)
5. 图形绘制能力(线条、图标、文字等)
3. 公式类型
| 类型 | 文件扩展名 | 用途 | 示例 |
|---|---|---|---|
| 技术指标公式 | .tni | 在主图或副图显示指标 | MACD、KDJ、均线 |
| 条件选股公式 | .tne | 筛选符合条件的股票 | 突破选股、金叉选股 |
| 交易系统公式 | .tns | 买卖信号提示 | 买入卖出点标记 |
| 五彩K线公式 | .tnk | K线颜色模式 | 红绿K线、特殊形态 |
| 模式匹配公式 | .tnp | 形态识别 | 头肩顶、W底等 |
| 组合条件公式 | .tnc | 多条件组合 | 综合选股条件 |
三、公式语法基础
1. 基本结构
{=======================
公式基本结构示例
文件名: Example.tni
=======================}
{ 参数定义区 }
PARAM1:=5; { 参数1,默认值5 }
PARAM2:=10; { 参数2,默认值10 }
{ 变量定义区 }
VAR1:CLOSE>OPEN; { 布尔变量:收阳线 }
VAR2:=(HIGH-LOW)/CLOSE*100;{ 数值变量:振幅百分比 }
{ 输出显示区 }
OUTPUT1:MA(CLOSE,PARAM1); { 输出:移动平均线 }
OUTPUT2:MA(CLOSE,PARAM2),COLORRED; { 带颜色的输出 }
{ 绘图部分 }
DRAWICON(CROSS(OUTPUT1,OUTPUT2), OUTPUT1, 1); { 画图标 }
DRAWTEXT(VAR1, LOW*0.98, '阳线'); { 文字标注 }
2. 数据类型
{ 通达信公式中的数据类型 }
- 数值型:整数、小数 (如 5, 10.5)
- 布尔型:真(1)/假(0) (如 CLOSE>OPEN)
- 字符串型:文本数据 (如 '买入信号')
- 颜色型:颜色代码 (如 COLORRED, #FF0000)
- 序列型:时间序列数据 (如 CLOSE序列)
3. 运算符
{ 算术运算符 }
A+B { 加法 }
A-B { 减法 }
A*B { 乘法 }
A/B { 除法 }
A% { 取模 }
{ 比较运算符 }
A>B { 大于 }
A<B { 小于 }
A>=B { 大于等于 }
A<=B { 小于等于 }
A=B { 等于 }
A!=B 或 A<>B { 不等于 }
{ 逻辑运算符 }
A AND B { 逻辑与 }
A OR B { 逻辑或 }
NOT A { 逻辑非 }
{ 赋值运算符 }
:= { 赋值(不显示) }
: { 赋值并显示 }
四、核心函数分类
1. 行情数据函数
{ 基本行情数据 }
CLOSE { 收盘价 }
OPEN { 开盘价 }
HIGH { 最高价 }
LOW { 最低价 }
VOL { 成交量 }
AMOUNT { 成交额 }
VOLINSTK { 持仓量(期货) }
{ 引用数据 }
REF(X, N) { N周期前的X值 }
REFX(X, N) { N周期后的X值 }
REFV(X, N) { 引用任意股票的X值 }
{ 周期转换 }
DAYCLOSE { 日线收盘价 }
WEEKCLOSE { 周线收盘价 }
MONTHCLOSE { 月线收盘价 }
2. 统计函数
{ 移动平均 }
MA(X, N) { 简单移动平均 }
EMA(X, N) { 指数移动平均 }
SMA(X, N, M) { 平滑移动平均 }
{ 极值函数 }
HHV(X, N) { N周期内最高值 }
LLV(X, N) { N周期内最低值 }
HHVBARS(X, N) { 最高值到当前周期数 }
LLVBARS(X, N) { 最低值到当前周期数 }
{ 求和与计数 }
SUM(X, N) { N周期求和 }
COUNT(COND, N) { N周期内条件成立次数 }
3. 数学函数
ABS(X) { 绝对值 }
MAX(A, B) { 最大值 }
MIN(A, B) { 最小值 }
SQRT(X) { 平方根 }
POW(X, N) { X的N次方 }
LN(X) { 自然对数 }
LOG(X) { 常用对数 }
EXP(X) { 指数函数 }
ROUND(X) { 四舍五入 }
4. 逻辑函数
IF(COND, A, B) { 条件判断 }
CROSS(A, B) { A上穿B }
CROSSDOWN(A, B) { A下穿B }
BETWEEN(X, A, B) { X在A和B之间 }
EVERY(COND, N) { 连续N周期满足条件 }
EXIST(COND, N) { 过去N周期存在满足条件 }
LAST(COND, N, M) { 从M周期前开始连续N周期满足条件 }
5. 绘图函数
{ 绘制线条 }
DRAWLINE(COND1, PRICE1, COND2, PRICE2, WIDTH)
DRAWSECTION(COND, PRICE, WIDTH)
POLYLINE(COND, PRICE, COLOR)
{ 绘制图标 }
DRAWICON(COND, PRICE, ICONTYPE)
{ 图标类型:1-笑脸, 2-哭脸, 3-菱形, 4-箭头... }
{ 绘制文字 }
DRAWTEXT(COND, PRICE, 'TEXT')
DRAWTEXT_FIX(COND, X, Y, TYPE, 'TEXT')
{ 绘制K线和柱状图 }
STICKLINE(COND, PRICE1, PRICE2, WIDTH, EMPTY)
DRAWKLINE(HIGH, OPEN, LOW, CLOSE)
DRAWBAND(UPPER, COLOR1, LOWER, COLOR2)
{ 颜色设置 }
COLORRED { 红色 }
COLORGREEN { 绿色 }
COLORBLUE { 蓝色 }
COLORYELLOW { 黄色 }
COLORWHITE { 白色 }
COLORBLACK { 黑色 }
COLORCYAN { 青色 }
COLORMAGENTA { 洋红 }
COLORGRAY { 灰色 }
COLORBROWN { 棕色 }
{ 自定义颜色 }
COLORRGB(R, G, B) { RGB颜色 }
COLOR+进制数 { 如 COLOR+8421504 }
五、公式编写实例详解
实例1:完整的MACD指标
{=======================
MACD指标完整版
文件名: MACD_Full.tni
=======================}
{ 参数设置 }
DIFFSHORT:=12; { DIF短期参数 }
DIFFLONG:=26; { DIF长期参数 }
DEAPERIOD:=9; { DEA参数 }
MACDCOLOR:=2; { MACD柱状线颜色 }
{ 计算DIF、DEA、MACD }
DIF:EMA(CLOSE,DIFFSHORT)-EMA(CLOSE,DIFFLONG);
DEA:EMA(DIF,DEAPERIOD);
MACD:(DIF-DEA)*2,COLORSTICK;
{ 零轴线 }
ZERO:0,COLORGRAY,DOTLINE;
{ 金叉死叉信号 }
JC:=CROSS(DIF,DEA); { 金叉 }
SC:=CROSS(DEA,DIF); { 死叉 }
{ 买卖点标记 }
DRAWICON(JC AND DIF<0, DIF, 1); { 底部金叉买入 }
DRAWICON(SC AND DIF>0, DIF, 2); { 顶部死叉卖出 }
{ 背离检测 }
{ 顶背离:股价新高,MACD未新高 }
TOP_DIV:=C>=HHV(C,20) AND DIF<HHV(DIF,20);
{ 底背离:股价新低,MACD未新低 }
BOTTOM_DIV:=C<=LLV(C,20) AND DIF>LLV(DIF,20);
DRAWICON(TOP_DIV, HIGH*1.02, 15);
DRAWICON(BOTTOM_DIV, LOW*0.98, 16);
{ 文字提示 }
DRAWTEXT(JC, DIF*0.95, '←金叉'),COLORRED;
DRAWTEXT(SC, DEA*1.05, '←死叉'),COLORGREEN;
DRAWTEXT(TOP_DIV, HIGH*1.05, '顶背离'),COLORBLUE;
DRAWTEXT(BOTTOM_DIV, LOW*0.95, '底背离'),COLORMAGENTA;
{ 多周期MACD显示(副图叠加) }
MACD_DAY:DIF#DAY; { 日线DIF }
MACD_WEEK:DIF#WEEK; { 周线DIF }
MACD_MONTH:DIF#MONTH; { 月线DIF }
实例2:综合选股公式
{=======================
多条件综合选股公式
文件名: Multi_Condition_Select.tne
类型:条件选股
=======================}
{ 条件1:均线多头排列 }
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA20:=MA(CLOSE,20);
MA60:=MA(CLOSE,60);
COND1:=MA5>MA10 AND MA10>MA20 AND MA20>MA60;
{ 条件2:放量突破 }
VOL_RATIO:=VOL/MA(VOL,20); { 量比 }
COND2:=CLOSE>HHV(HIGH,20) AND VOL_RATIO>1.5;
{ 条件3:MACD金叉 }
DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:=EMA(DIF,9);
COND3:=CROSS(DIF,DEA);
{ 条件4:RSI强势 }
RSI6:=SMA(MAX(CLOSE-REF(CLOSE,1),0),6,1)/
SMA(ABS(CLOSE-REF(CLOSE,1)),6,1)*100;
COND4:=RSI6>50;
{ 条件5:资金流入 }
{ 简化的资金流向判断 }
MONEY_FLOW:=IF(CLOSE>OPEN,VOL*(CLOSE-OPEN),0);
COND5:=SUM(MONEY_FLOW,5)>0;
{ 综合选股条件 }
SELECT_COND:=COND1 AND COND2 AND COND3 AND COND4 AND COND5;
{ 输出结果 }
SELECT_COND;
实例3:交易系统公式
{=======================
均线交易系统
文件名: MA_Trading_System.tns
类型:交易系统
=======================}
{ 买入条件 }
ENTERLONG: CROSS(MA(CLOSE,5), MA(CLOSE,10)) AND CLOSE>MA(CLOSE,60);
{ 卖出条件 }
EXITLONG: CROSS(MA(CLOSE,10), MA(CLOSE,5)) OR CLOSE<MA(CLOSE,20);
{ 止损条件 }
STOPLOSS: CLOSE<REF(LOW,20)*0.95; { 跌破20日最低价的95% }
{ 止盈条件 }
TAKEPROFIT: CLOSE>ENTERPRICE*1.15; { 盈利15%止盈 }
{ 绘制交易信号 }
DRAWICON(ENTERLONG, LOW*0.98, 1); { 买入信号 }
DRAWICON(EXITLONG, HIGH*1.02, 2); { 卖出信号 }
{ 绘制止损止盈线 }
DRAWLINE(STOPLOSS, LOW, REF(STOPLOSS,1), REF(LOW,1), 0),COLORGREEN;
DRAWLINE(TAKEPROFIT, HIGH, REF(TAKEPROFIT,1), REF(HIGH,1), 0),COLORRED;
{ 绩效统计(需在交易系统测试平台使用) }
{ 交易次数、胜率、盈亏比等自动计算 }
六、公式编辑器使用
1. 打开公式编辑器
通达信菜单路径:
功能 → 公式系统 → 公式管理器 → 新建
或按快捷键:Ctrl+F
2. 公式编辑器界面
{ 主要区域 }
1. 公式名称:设置公式名称(英文或数字)
2. 公式描述:中文描述
3. 公式类型:选择指标/选股/交易系统等
4. 画线方法:主图叠加/主图/副图
5. 参数设置:定义可调参数
6. 编辑区:编写公式代码
7. 测试公式:检查语法错误
8. 插入函数:从函数库选择插入
3. 调试技巧
{ 调试方法 }
1. 使用DRAWTEXT输出中间值
DRAWTEXT_FIX(1,0,0,0,NUMTOSTR(VAR1,2));
2. 使用颜色区分不同状态
COND_COLOR:IF(VAR1>0,COLORRED,COLORGREEN);
3. 分步测试复杂公式
{ 先测试第一部分 }
PART1:MA(CLOSE,5);
{ 再添加第二部分 }
PART2:MA(CLOSE,10);
4. 使用SHOW函数在信息栏显示
{ 在公式中输出到信息窗口 }
七、高级应用技巧
1. 多周期引用
{ 引用其他周期数据 }
DAY_CLOSE:CLOSE#DAY; { 日线收盘价 }
WEEK_MA5:MA(CLOSE,5)#WEEK;{ 周线5日均线 }
MONTH_HIGH:HIGH#MONTH; { 月线最高价 }
{ 多周期共振策略 }
RESONANCE:=CROSS(MA(CLOSE,5), MA(CLOSE,10)) AND
CROSS(MA(CLOSE#WEEK,5), MA(CLOSE#WEEK,10));
2. 板块和指数函数
{ 板块相关函数 }
BKNAME { 板块名称 }
BKCODE { 板块代码 }
INBLOCK('板块名称') { 判断是否属于某板块 }
{ 指数函数 }
INDEXC { 大盘收盘价 }
INDEXV { 大盘成交量 }
INDEXADV { 上涨家数 }
INDEXDEC { 下跌家数 }
{ 相对强度 }
RELATIVE_STRENGTH:CLOSE/INDEXC*1000;
3. 动态参数
{ 自适应参数 }
{ 根据波动率调整均线周期 }
VOLATILITY:=STD(CLOSE,20)/MA(CLOSE,20)*100;
DYNAMIC_PERIOD:IF(VOLATILITY>5,10,20); { 高波动用短周期,低波动用长周期 }
DYNAMIC_MA:MA(CLOSE,DYNAMIC_PERIOD);
4. 资金管理函数
{ 仓位管理(需在交易系统中) }
POSITION:= (总资金*0.1)/CLOSE; { 10%资金买入股数 }
STOP_LOSS_PRICE:=ENTERPRICE*0.95; { 5%止损价 }
{ 金字塔加仓 }
ADD_POSITION: CLOSE>ENTERPRICE*1.05 AND
COUNT(ENTERLONG,10)=1; { 首次买入后上涨5%加仓 }
八、常见问题与解决方案
问题1:公式编译错误
{ 常见错误及解决方法 }
1. 括号不匹配:检查所有括号是否成对
2. 函数参数错误:检查函数参数个数和类型
3. 未定义变量:确保所有变量都先定义后使用
4. 语法错误:注意使用英文标点,分号结尾
5. 除零错误:添加判断 IF(X>0, A/B, 0)
问题2:公式运行缓慢
{ 性能优化技巧 }
1. 减少复杂计算:避免嵌套多层循环
2. 使用内置函数:优先使用MA、SUM等优化函数
3. 限制计算周期:如仅计算最近1000根K线
4. 缓存中间结果:重复计算的变量只计算一次
MA5:=MA(CLOSE,5); { 缓存MA5 }
COND1:=CLOSE>MA5; { 使用缓存的MA5 }
COND2:=VOL>REF(MA5,1);
问题3:信号闪烁
{ 防止信号闪烁的方法 }
1. 使用确认函数
CONFIRMED_SIGNAL:REF(CROSS(A,B),1) AND CROSS(A,B);
2. 收盘价确认
BUY_SIGNAL:=CROSS(MA(CLOSE,5), MA(CLOSE,10)) AND
REF(ISLASTBAR,0); { 仅最后一根K线确认 }
3. 价格过滤
FILTERED_SIGNAL:=SIGNAL AND ABS(CLOSE-OPEN)/CLOSE>0.01;
九、学习资源推荐
1. 官方资源
- 通达信帮助文档:按F1调出,最权威的参考资料
- 公式系统指南:内置的公式编写教程
- 函数手册:详细的所有函数说明
2. 学习路径
{ 建议的学习顺序 }
1. 基础语法 → 2. 常用函数 → 3. 简单指标编写
4. 选股公式 → 5. 交易系统 → 6. 高级技巧
7. 实战应用 → 8. 优化调试 → 9. 策略回测
3. 实践建议
{ 实战练习建议 }
1. 从修改现有指标开始
2. 编写简单的选股条件
3. 逐步增加复杂度
4. 实盘前充分回测
5. 建立自己的指标库
十、通达信公式的局限性
1. 技术限制
{ 需要注意的局限性 }
1. 无法访问外部数据源
2. 不能进行复杂的机器学习计算
3. 不支持自定义数据结构的创建
4. 实时数据访问有限制
5. 无法进行高频交易级别的计算
2. 与其他工具的对比
| 特性 | 通达信公式 | Python量化 | 专业量化平台 |
|---|---|---|---|
| 学习曲线 | 简单 | 中等 | 陡峭 |
| 灵活性 | 中等 | 高 | 高 |
| 计算能力 | 有限 | 强大 | 强大 |
| 实时性 | 实时 | 可实时 | 专业实时 |
| 成本 | 免费/低 | 免费 | 昂贵 |
| 适用范围 | 个人投资者 | 个人/机构 | 专业机构 |
总结
通达信公式是一个功能强大且易学的技术分析工具,特别适合:
- 个人投资者进行技术分析和选股
- 交易员快速验证交易想法
- 分析师开发简单量化策略
虽然它在复杂性和扩展性上不如Python等编程语言,但凭借其实时性、易用性和与行情软件的深度集成,仍然是中国证券市场最受欢迎的自定义分析工具。
掌握通达信公式编写,可以让你:
- 个性化自己的分析界面
- 快速实现交易想法
- 提高选股效率
- 建立系统化的交易方法
对于想要进入量化交易领域的新手来说,通达信公式是一个很好的起点,可以培养对市场数据的敏感度和技术分析的基本功。
4897

被折叠的 条评论
为什么被折叠?



