简介:面向股票技术分析爱好者与通达信软件用户的通达信指标公式编辑教程PDF文档,系统讲解TDX公式系统的四大类公式编辑器——技术指标、条件选股、五彩K线、交易系统,并介绍公式管理器、公式编辑器的各项功能与操作要点。资源为单个PDF文件,大小约1.23MB,内容精炼,便于随时查阅。目前已有1795人学习下载。文档从公式系统基础概念讲起,详细说明每类公式的用途、编写方法及相互转换关系,例如指标公式附加买卖逻辑可生成交易系统公式,附加选股条件可生成条件选股公式,附加色彩逻辑可生成五彩K线公式;同时涵盖参数精灵、动态提示、画线方法等实用编辑技巧,适合希望自主编写和优化指标的投资者系统学习。
通达信指标公式编写,从入门到能写自己的选股器
这些年折腾通达信公式的人不少,但真正能写出一套顺手指标的人真不多。原因倒不是这玩意有多难,而是大部分教程都在堆函数列表,看完也不知道怎么串起来用。我最早接触通达信公式系统的时候也走了不少弯路,对着函数参考啃了半天,写出来的东西不是信号乱跳,就是加载直接报错。今天这篇不讲虚的,从公式编辑器怎么打开、函数怎么调,到完整写一个自定义指标的思路,再到选股公式怎么改成预警条件,一次聊透。适合刚接触公式编辑、想自己动手写指标的朋友,也适合已经会写简单均线、但想搞懂背后逻辑的老手。
通达信的公式系统说白了就是一套内嵌的脚本语言,语法上类似C语言和Excel函数的混合体。它的核心价值在于,你可以不依赖任何外部程序,直接在行情软件里定义自己的买卖规则、画线逻辑、信号提示。比如“5日均线上穿20日均线”,用CROSS函数一句话就写好;再比如“量比大于2且涨幅小于3%”,用条件判断也能在几十秒内搞定。这篇文章会从最基础的环境开始,一步步带你把一个模糊的想法,变成一条能跑、能预警、能选股的公式。
1. 公式系统的基本盘:编辑器在哪,公式有哪些类型
很多新手第一次打开通达信,根本不知道公式编辑器藏在哪儿。路径其实很简单:菜单栏找到“功能”,往下拉选“公式系统”,再点“公式管理器”,或者更进一步直接在行情界面按Ctrl+F也能调出窗口。打开之后你会看到左侧一栏的分类列表:技术指标、条件选股、交易系统、五彩K线、组合条件,这五类对应了公式的几种核心用途。
- 技术指标公式:最常见,用于在K线副图或主图上绘制线、柱、文字。输出结果是连续的数值序列,比如MACD、KDJ、RSI都是这一类。
- 条件选股公式:用于筛选满足特定条件的股票,输出必须是“成立”或“不成立”,没有中间地带。
- 交易系统公式:用来定义买入和卖出信号,通常包含两条逻辑线,一条管开仓,一条管平仓。
- 五彩K线公式:通过给K线染色来标记某种K线形态,本质上是对条件选股的图形化表达,用于视觉复盘。
- 组合条件:把多个选股条件用“与/或”关系串起来,相当于把一把细筛子叠在一起过一遍。
搞清楚这五类的区别很重要。很多人一开始就在技术指标编辑器里写带“FILTER”的选股语句,结果保存都过不了,就是因为公式类型和语法不匹配。写之前想清楚:你的最终目的是一条画线的副图指标,还是一个能跑出股票列表的选股器,这决定了你在哪个编辑器里干活。
编辑器的界面看懂了就很简单:上半部分是代码输入区,下半部分通常会有一个“测试公式”按钮和“确定”按钮。代码区里写逻辑,写完先点“测试公式”检查语法,通过后再点“确定”应用。需要提醒的是,通达信的公式语言虽然叫“函数”,但它和Excel函数完全不同,前者是操作K线、成交量、资金流这些时序数据的,后者是操作单元格的。你不需要会编程也能入手,但至少要理解“序列”这个概念——公式处理的不是单个数,而是一整条从第一根K线到最后一根K线的数据流。
2. 常用函数拆解:40个函数覆盖90%的写指标需求
通达信公式系统内置几百个函数,但实际高频使用的也就三四十个。我按使用频率和用途分成了几类,逐步说清楚它们的行为逻辑和典型应用场景。
K线基础类
这些函数是数据源,也就是公式的“原料”。OPEN、HIGH、LOW、CLOSE、VOL分别对应开盘价、最高价、最低价、收盘价、成交量。注意通达信里收盘价通常简写为CLOSE,也可以用C代替,但用全称更清晰。VOL默认是手数,不是金额,想要成交金额用AMOUNT。
统计与数学运算类
MA(X,N)是简单移动平均,EMA(X,N)是指数移动平均。两者的区别在于:MA给每一根K线的权重都是1/N,EMA对近期数据分配更高权重,响应更快。写趋势指标时,EMA往往更跟手,但噪声也更大。HHV(X,N)和LLV(X,N)取N周期内的最高值和最低值,比如“过去20天的最低价”就是LLV(LOW,20)。REF(X,N)取N天前的值,REF(CLOSE,1)就是昨天的收盘价。SUM(X,N)求和,常用于统计N日内满足某个条件的次数。COUNT(条件,N)统计N周期内条件成立的次数,这个函数在选股和信号确认里非常实用,比如“5天内有3天收阳线”就是COUNT(CLOSE>OPEN,5)=3。
交叉与信号类
CROSS(A,B)判断A上穿B,也就是“今天A大于B,且昨天A小于等于B”。这个函数返回的不是数值,而是“真/假”信号,用于触发买入提示。还有一个镜像的用法:CROSS(B,A)就是下穿。交叉类函数最核心的使用场景是金叉死叉,但很多人忽略了一点——CROSS 只判断“穿过”的那一瞬间,如果两根线纠缠反复交叉,信号会非常密集,此时建议叠加一个确认条件,比如“成交量大于5日均量”之类。
条件判断与逻辑运算
IF(条件,A,B)是万能的条件赋值函数,满足条件时取A,不满足取B。AND、OR、NOT分别是对条件做“与”“或”“非”运算。通达信的条件表达式里,>、<、>=、<=、=(注意是单等号,不是双等号)用于比较,“不等”用!=。这个细节我见过很多人写错,一通百通的是:通达信里的“等于”和赋值都是=,系统会根据上下文区分。
资金与量能类
DYNAINFO(37)是实时量比,DYNAINFO(3)是涨速,WINNER(CLOSE)是获利盘比例。量能饱和度这类写法虽然有争议,但我可以分享一个简化版的计算逻辑:先算出当日成交量和前期均量的比值,再结合股价位置做归一化,输出一个0到1之间的数值。这类函数通常依赖当天的分笔数据,做历史回测时会有偏差,写公式时要有心理预期。
字符串与格式化类
STRCAT(A,B)拼接字符串,CON2STR(X,N)把数值转成指定位数的小数字符串,DRAWTEXT配合这些函数可以在图上输出自定义文字。比如想在副图里显示“当前价”的标签,就可以写DRAWTEXT(1,0,STRCAT('现价:',CON2STR(CLOSE,2)))。
函数不用全背,我的习惯是建立一个自己的速查表,把用过且好用的函数记下来,下次写新公式时直接复制粘贴过去检查参数。熟能生巧,这句话在公式语言上体现得特别明显。
3. 一个实战案例:从零写一个“均线粘合突破”副图指标
纸上谈兵没意思,我们来把一条条函数拼成一个能用的指标。这个例子的需求是:连续N天5日均线、10日均线、20日均线缠绕在一起(即三线距离很小),随后某一天股价放量突破20日均线,副图上给出一个明确的“关注”信号。这个思路兼顾了趋势和突破,适合做震荡末期的启动观察。
第一步,定义三条均线:
MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20);注意这里用的是:=而不是=。在通达信公式里,:=表示“只计算但不在图上显示”,如果只写=,这条中间变量会被绘制出来,干扰副图。分清:=和=是写公式最基操的一关。
第二步,定义“粘合”的条件。三个均线彼此接近,最直观的算法是计算它们的最大值和最小值,然后看极差相对于MA20的比例是否小于某一个阈值,比如3%:
MAXMA:=MAX(MAX(MA5,MA10),MA20); MINMA:=MIN(MIN(MA5,MA10),MA20); NIANHE:= (MAXMA-MINMA)/MA20*100 < 3;这段代码的意思是:先取三条均线里的最高值和最低值,算出差值,归一化到MA20上,如果比例小于3%,就认为当前处于粘合状态。阈值3%不是固定死的,个股波动率不同,可以自行调整。
第三步,定义“放量突破”。放量可以用“今天的量是5日均量的1.5倍”刻画,突破则写为“今天的收盘价上穿MA20”。组合起来:
FANGLIANG:=VOL > MA(VOL,5)*1.5; TUPO:=CROSS(CLOSE,MA20);第四步,把三个条件串起来,输出信号。为了让信号不要太密集,我习惯让信号在粘合条件成立后的N天内有效,用COUNT来实现:
COND:=NIANHE AND TUPO; SIGNAL: COUNT(COND,10)>0;整体完整代码为:
MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20); MAXMA:=MAX(MAX(MA5,MA10),MA20); MINMA:=MIN(MIN(MA5,MA10),MA20); NIANHE:= (MAXMA-MINMA)/MA20*100 < 3; FANGLIANG:=VOL > MA(VOL,5)*1.5; TUPO:=CROSS(CLOSE,MA20); COND:=NIANHE AND TUPO; SIGNAL: COUNT(COND,10)>0;代码写完,回到编辑器点击“测试公式”,系统会提示有没有语法错误。通过后,“SIGNAL”那一行的冒号如果是单冒号并且末尾有分号,它就会在副图里显示成一条线,数值为1时表示信号成立,为0时没有信号。如果你不想要线,只想要图标提示,可以在最后一行改用DRAWTEXT或DRAWICON:
DRAWICON(COUNT(COND,10)>0,LOW,1);这样就会在满足条件的K线下方画一个预设图标,复盘的时候一眼就能扫到。
4. 把副图指标改造成选股公式:只需两步
副图指标和条件选股公式在代码层面几乎没有区别,区别在于输出形式。选股公式不允许输出绘图的“线”,它只要求输出一个“真/假”条件。所以改造过程非常简单:把指标公式的最终逻辑提出来,剥掉所有绘图语句,留下一个布尔表达式。
还是拿上面的“均线粘合突破”例子。副图最后一句是SIGNAL: COUNT(COND,10)>0;,选股公式里,你只需要字段名从SIGNAL:改成XG:即可,也可以直接去掉赋值符号写COUNT(COND,10)>0;。但注意选股公式里变量定义也要用:=,最后一行可以直接用XG:或者直接裸写条件。完整的选股版:
MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20); MAXMA:=MAX(MAX(MA5,MA10),MA20); MINMA:=MIN(MIN(MA5,MA10),MA20); NIANHE:= (MAXMA-MINMA)/MA20*100 < 3; FANGLIANG:=VOL > MA(VOL,5)*1.5; TUPO:=CROSS(CLOSE,MA20); XG: NIANHE AND TUPO;日常使用中,我会设计条件选股公式时特意加上COUNT预防信号过期——比如COUNT(NIANHE AND TUPO,5)>0,这样就相当于选中“最近5天内出现过一次粘合突破的股票”。这比单纯在信号当天选股要宽容一些,适合每周盘后刷一遍。
选股公式写好后,打开“功能”菜单里的“条件选股”,把公式加入执行列表,设定好选择范围(比如沪深A股)、周期(日线或30分钟),点击“执行选股”,系统就会把符合条件的股票拉出来。如果你用的是Level-2数据源,还可以在盘中设置预警,用同样的公式实时扫描。
5. 常见问题速查表:那些年我踩过的坑
公式写多了,经常遇到一些看起来莫名其妙的问题。我把这几年周围朋友和自己在实践中遇到的高频问题整理成了一张速查表,按症状列出原因和解决思路。
问题一:公式测试通过,但图上什么都不显示。
多半是输出值被赋成了中间变量,用了:=而不是:。检查一下代码,看是不是所有输出行都用了:=。还有一种可能是输出值全为常数或没有实际连接到K线数据上,比如写了IF(1,0,0)这种无条件恒成立的表达式。
问题二:信号太多,密密麻麻没法看。
这类情况通常是条件太宽松。解决办法是叠加确认条件,比如加上量能要求、价格位置过滤(比如只提示CLOSE>MA60的标的),或者用FILTER(条件,10)让同一个信号10天内只出现一次。FILTER函数专门干这个,它能让信号临时的密集重复被压掉。
问题三:保存公式提示“缺少分号”或“非法变量名”。
通达信语法非常严格,语句之间用分号分隔,变量名不要带中文和下划线以外的特殊字符,更不要用数字开头。另外要注意的是,通达信的注释符号是{},不是C语言的//或/* */。如果你从网上复制别人的公式,大概率会因为注释符号或全角字符导致报错,把全角括号、冒号替换成半角即可解决。
问题四:指标的信号历史回看时对不上,今天有信号,盘后看就没了。
这是很多人在选股公式里遇到的常见情况。问题通常出在使用了未来函数,典型的有ZIG(之字转向)、BACKSET(向前赋值)、PEAK/TROUGH(波峰波谷)以及部分DYNAINFO动态函数。这些函数在盘中能取到当期数据,但一旦历史K线补全,它们会根据后续数据重新计算,导致信号“漂移”或“消失”。新手阶段建议从选股公式里彻底禁用未来函数,等熟练判断数据时序之后再进阶使用。
问题五:公式里写了中文注释,但保存后乱码。
通达信旧版本对编码支持不太好,公式文件容易出现GBK和UTF-8混用导致乱码。最稳妥的方案是写注释时用英文,或者存成.fnc文件后用文本编辑器手动改编码再导入。我自己写公式的习惯是:所有变量名英文,所有注释用{ }包裹且尽量简短,这样基本上能避免乱码问题。
问题六:别人分享的公式带密码,解锁不了。
带密码的公式通常是作者做了加密处理,通达信本身不提供找回密码的功能。常见的所谓“解密”工具,多数是把代码还原成中间计算过程,但不保证和原公式逻辑完全一致,而且运行未知来源的破解工具本身也有安全风险。我的建议是:拿到加密公式就当黑盒参考,自己用已知函数重新实现类似逻辑,反而更能锻炼写公式的能力。
6. 从公式到策略:信号落地的那一步最磨人
公式写出来、选股能跑通,只是完成了很小一部分。真正让人崩溃的是信号落地到交易策略时出现的各种偏差。比如你用同一个条件选股公式在不同周期上跑,结果可能完全不同:日线上是“均线粘合突破”,30分钟线上可能就变成了一堆噪声。这背后的原因也不复杂——均线的N值固定,但高低周期上的波动率分位不一样。
我的经验是:任何公式必须先明确生态位。你是做日线级别波段,还是做60分钟级别短线,还是做周线中线?同一个“均线粘合突破”逻辑,不同周期需要的参数完全不同。日线可以用5、10、20;30分钟级别,我一般会把参数调到3、5、10,并且把粘合阈值从3%放宽到5%,因为短周期波动天然更大。周期和参数不匹配,是绝大多数公式“时灵时不灵”的根源。
另外,信号本身的置信度也值得打磨。不要去追“100%胜率”的圣杯,那在逻辑上就不存在。更现实的做法是给信号分层:信号A是“粘合突破+量能放大”,信号B是“粘合突破但量能一般”,信号C是“正在粘合还未突破”。A类信号我才会考虑,B类只观察,C类放进自选池跟踪。在公式里可以用不同颜色的图标或文字区分,这样复盘效率会高很多。
7. 调试公式的三个土办法
很多人写公式一报错就发懵,其实通达信自带的调试手段虽然朴素,但足够用。
第一个办法是“拆中间变量”。比如NIANHE这个中间变量,你可以先只输出它,不加载后面的条件,看看在K线图上是不是真的在预想的区间变成了1。如果NIANHE一直没有1,说明粘合的阈值设得太严,或者均线参数有问题。
第二个办法是“用 STICKLINE 画柱验证”。这个函数可以按你的条件画出红绿柱子,方便直接观察信号出现的位置是否符合直觉。比如STICKLINE(COND,0,1,3,0)会在满足条件时画一根实体柱。
第三个办法是“固定时间窗口断点”。盯住某一段历史行情,手动记录几个关键点,然后看公式在那几个点是否给出了信号。如果信号比预期晚了几天,八成是用了未来函数,或者REF的偏移量没写对。
这三个办法组合起来,基本能解决90%的逻辑错误。真正的难点不在语法,而在“你的想法到底用什么函数组合最贴切”,多试几次就有手感了。
8. 一些长远建议:向DLL插件和外部数据扩展
当公式系统的内置函数满足不了复杂需求时,通达信还支持DLL插件扩展。我这两年为了处理一些自研的资金流算法,写过一个DLL,通过#INCLUDE引入后,可以像调用内置函数一样使用自己编译的C++代码。DLL插件的优点是计算速度快、逻辑完全自主可控,适合做机器学习特征提取或高频因子计算,门槛也比公式语言高不少,需要一点C/C++基础,还需要熟悉通达信定义的接口数据结构。
如果你不想走到DLL这一步,也可以先用通用数据接口把通达信的行情导出到Excel或Python里做分析,再用选股公式把结果导回通达信。这条路没有DLL那么硬核,但足以应对大多数量化研究的初阶需求。
坦率说,指标公式只是交易系统的一个环节,它解决的是“定义规则”的问题,不解决“规则有效”的问题。任何公式都要经过历史回测、样本外验证、实盘跟踪几个递进阶段,才能谈得上可用。写公式最忌讳的是拿着后视镜调参,调出一套在历史上完美的大师线,一到实盘就失灵。
我自己现在写公式的原则就是四个字:少即是多。逻辑越简单、参数越少,公式就越稳定,越好维护,越不容易被市场风格变化击穿。参数超过五个的策略,通常不是聪明,而是过拟合。每次写好公式,我还会在通达信里把周期切换到周线或月线再跑一遍,看它是否还能成立,如果只在某个周期上神奇,那就基本说明这个公式靠的是数据拟合而不是市场逻辑。
说到底,通达信公式语言不过是一把刀,真正决定你做出什么东西来的,是拿刀的人对市场、对交易规则的认知。工具给你自由,但认知决定边界。
本文还有配套的精品资源,点击获取