通达信指标公式编写指南:从入门到打造自己的选股器
发布时间:2026/9/21 7:13:45来源:尧图网络
简介面向股票技术分析爱好者与通达信软件用户的通达信指标公式编辑教程PDF文档系统讲解TDX公式系统的四大类公式编辑器——技术指标、条件选股、五彩K线、交易系统并介绍公式管理器、公式编辑器的各项功能与操作要点。资源为单个PDF文件大小约1.23MB内容精炼便于随时查阅。目前已有1795人学习下载。文档从公式系统基础概念讲起详细说明每类公式的用途、编写方法及相互转换关系例如指标公式附加买卖逻辑可生成交易系统公式附加选股条件可生成条件选股公式附加色彩逻辑可生成五彩K线公式同时涵盖参数精灵、动态提示、画线方法等实用编辑技巧适合希望自主编写和优化指标的投资者系统学习。通达信指标公式编写从入门到能写自己的选股器这些年折腾通达信公式的人不少但真正能写出一套顺手指标的人真不多。原因倒不是这玩意有多难而是大部分教程都在堆函数列表看完也不知道怎么串起来用。我最早接触通达信公式系统的时候也走了不少弯路对着函数参考啃了半天写出来的东西不是信号乱跳就是加载直接报错。今天这篇不讲虚的从公式编辑器怎么打开、函数怎么调到完整写一个自定义指标的思路再到选股公式怎么改成预警条件一次聊透。适合刚接触公式编辑、想自己动手写指标的朋友也适合已经会写简单均线、但想搞懂背后逻辑的老手。通达信的公式系统说白了就是一套内嵌的脚本语言语法上类似C语言和Excel函数的混合体。它的核心价值在于你可以不依赖任何外部程序直接在行情软件里定义自己的买卖规则、画线逻辑、信号提示。比如“5日均线上穿20日均线”用CROSS函数一句话就写好再比如“量比大于2且涨幅小于3%”用条件判断也能在几十秒内搞定。这篇文章会从最基础的环境开始一步步带你把一个模糊的想法变成一条能跑、能预警、能选股的公式。1. 公式系统的基本盘编辑器在哪公式有哪些类型很多新手第一次打开通达信根本不知道公式编辑器藏在哪儿。路径其实很简单菜单栏找到“功能”往下拉选“公式系统”再点“公式管理器”或者更进一步直接在行情界面按CtrlF也能调出窗口。打开之后你会看到左侧一栏的分类列表技术指标、条件选股、交易系统、五彩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/NEMA对近期数据分配更高权重响应更快。写趋势指标时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(CLOSEOPEN,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或DRAWICONDRAWICON(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)这种无条件恒成立的表达式。问题二信号太多密密麻麻没法看。这类情况通常是条件太宽松。解决办法是叠加确认条件比如加上量能要求、价格位置过滤比如只提示CLOSEMA60的标的或者用FILTER(条件,10)让同一个信号10天内只出现一次。FILTER函数专门干这个它能让信号临时的密集重复被压掉。问题三保存公式提示“缺少分号”或“非法变量名”。通达信语法非常严格语句之间用分号分隔变量名不要带中文和下划线以外的特殊字符更不要用数字开头。另外要注意的是通达信的注释符号是{}不是C语言的//或/* */。如果你从网上复制别人的公式大概率会因为注释符号或全角字符导致报错把全角括号、冒号替换成半角即可解决。问题四指标的信号历史回看时对不上今天有信号盘后看就没了。这是很多人在选股公式里遇到的常见情况。问题通常出在使用了未来函数典型的有ZIG之字转向、BACKSET向前赋值、PEAK/TROUGH波峰波谷以及部分DYNAINFO动态函数。这些函数在盘中能取到当期数据但一旦历史K线补全它们会根据后续数据重新计算导致信号“漂移”或“消失”。新手阶段建议从选股公式里彻底禁用未来函数等熟练判断数据时序之后再进阶使用。问题五公式里写了中文注释但保存后乱码。通达信旧版本对编码支持不太好公式文件容易出现GBK和UTF-8混用导致乱码。最稳妥的方案是写注释时用英文或者存成.fnc文件后用文本编辑器手动改编码再导入。我自己写公式的习惯是所有变量名英文所有注释用{ }包裹且尽量简短这样基本上能避免乱码问题。问题六别人分享的公式带密码解锁不了。带密码的公式通常是作者做了加密处理通达信本身不提供找回密码的功能。常见的所谓“解密”工具多数是把代码还原成中间计算过程但不保证和原公式逻辑完全一致而且运行未知来源的破解工具本身也有安全风险。我的建议是拿到加密公式就当黑盒参考自己用已知函数重新实现类似逻辑反而更能锻炼写公式的能力。6. 从公式到策略信号落地的那一步最磨人公式写出来、选股能跑通只是完成了很小一部分。真正让人崩溃的是信号落地到交易策略时出现的各种偏差。比如你用同一个条件选股公式在不同周期上跑结果可能完全不同日线上是“均线粘合突破”30分钟线上可能就变成了一堆噪声。这背后的原因也不复杂——均线的N值固定但高低周期上的波动率分位不一样。我的经验是任何公式必须先明确生态位。你是做日线级别波段还是做60分钟级别短线还是做周线中线同一个“均线粘合突破”逻辑不同周期需要的参数完全不同。日线可以用5、10、2030分钟级别我一般会把参数调到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那么硬核但足以应对大多数量化研究的初阶需求。坦率说指标公式只是交易系统的一个环节它解决的是“定义规则”的问题不解决“规则有效”的问题。任何公式都要经过历史回测、样本外验证、实盘跟踪几个递进阶段才能谈得上可用。写公式最忌讳的是拿着后视镜调参调出一套在历史上完美的大师线一到实盘就失灵。我自己现在写公式的原则就是四个字少即是多。逻辑越简单、参数越少公式就越稳定越好维护越不容易被市场风格变化击穿。参数超过五个的策略通常不是聪明而是过拟合。每次写好公式我还会在通达信里把周期切换到周线或月线再跑一遍看它是否还能成立如果只在某个周期上神奇那就基本说明这个公式靠的是数据拟合而不是市场逻辑。说到底通达信公式语言不过是一把刀真正决定你做出什么东西来的是拿刀的人对市场、对交易规则的认知。工具给你自由但认知决定边界。本文还有配套的精品资源点击获取
网站建设高端定制企业官网