1. 从零开始:为什么你需要一份完整的通达信公式“字典”?
如果你在通达信里折腾过指标公式,大概率经历过这样的场景:想给均线加个颜色,翻遍论坛只找到一句“COLORRED”;想画个箭头标记买卖点,对着函数列表试了半天,画出来的不是位置不对就是根本不显示;好不容易从大神那里抄来一段源码,想改个参数或者图标样式,却发现自己连里面“DRAWICON”和“DRAWTEXT”的区别都搞不清楚,只能原封不动地用,出了问题两眼一抹黑。
这太正常了。通达信的公式系统,本质上是一个功能强大但文档极其“吝啬”的领域专用语言。它的官方帮助文件往往语焉不详,而网络上流传的教程和源码又鱼龙混杂,充斥着各种“祖传代码”和未经验证的“黑魔法”。一个简单的颜色代码,可能就有“COLORRED”、“RED”、“FF0000”好几种写法,哪种是当前版本支持的?哪种已经失效了?图标代码更是如此,一个数字代表一种图形,记错一个数字,笑脸可能就变成了哭脸。
所以,一份系统、准确、经过验证的“大全”型参考资料,其价值远超一段具体的选股公式。它不是一个让你照抄的“作业本”,而是一本让你能自己“造句”、“写文章”的“语法书”和“词典”。掌握了这些基础构件——颜色、图标、核心函数——你才能从“公式的搬运工”进阶为“公式的创作者”,才能真正理解那些号称“胜率98%”的指标背后的逻辑,甚至发现其中的缺陷,打造出适合自己的交易工具。
本文将彻底解决这个痛点。我不会给你另一个无法验证的“神奇公式”,而是帮你搭建理解所有公式的基础。我们将系统梳理通达信指标公式中关于颜色代码、绘图图标、核心函数这三块最让人头疼,却又最基础的内容。你会发现,一旦掌握了这些“砖瓦”,很多看似复杂的源码,瞬间就变得清晰可读。
2. 视觉语言基石:透彻理解通达信的颜色编码系统
在通达信公式中,颜色不仅仅是让图表“好看”的装饰,它是传递信息、区分逻辑层次的核心视觉语言。一条红色的均线和一条绿色的均线,传达的是完全相反的多空信号。混乱或错误的颜色设置,会直接导致信号误判。
2.1 颜色指定函数的深度解析
通达信主要通过COLOR系列函数和直接使用颜色常量来指定颜色。这里有一个关键的版本演进问题需要注意。
COLOR+英文单词函数族(最推荐)这是目前最通用、最可靠的指定方式。其格式为COLOR后接英文颜色名。
MA5:MA(CLOSE,5),COLORRED; // 5日均线,显示为红色 MA10:MA(CLOSE,10),COLORGREEN; // 10日均线,显示为绿色 MA20:MA(CLOSE,20),COLORBLUE; // 20日均线,显示为蓝色为什么推荐这个方式?因为它的可读性最强,代码意图一目了然,而且兼容性历经多个版本考验,最为稳定。常见的颜色包括:
COLORRED(红)、COLORGREEN(绿)、COLORBLUE(蓝)COLORBLACK(黑)、COLORWHITE(白)、COLORGRAY(灰)COLORYELLOW(黄)、COLORMAGENTA(洋红/紫)、COLORCYAN(青)COLORBROWN(棕)、COLORLIGRAY(浅灰)、COLORLIBLUE(浅蓝)等。
直接使用颜色常量(需谨慎)在一些老公式或特定写法中,你会看到直接使用RED,GREEN,BLUE等单词,或者更古老的STICK函数内嵌颜色。
MA5:MA(CLOSE,5),RED; // 较老的写法,在某些环境下可能被支持注意:这种写法并非在所有版本的通达信或所有公式类型中都被支持。在新编写公式时,强烈建议统一使用
COLORRED这种格式,避免兼容性问题。
十六进制颜色代码(用于自定义颜色)当你需要非常精确的颜色,或者COLOR系列函数中没有你想要的颜色时,就需要用到十六进制代码。格式为COLOR后接6位十六进制数。
MA60:MA(CLOSE,60),COLORFF00FF; // 显示为亮紫色(R:255, G:0, B:255)这给了你极大的自由度。你可以从任何取色工具(如Photoshop、网页设计工具)获取颜色代码。但请记住,交易软件的图表背景通常是深色或浅色,过于鲜艳或与背景对比度不高的颜色(比如深灰色在深色背景上)会导致显示不清,影响判读。
2.2 条件变色:让指标“活”起来的关键技巧
静态的颜色是基础,但公式的灵魂在于条件判断。根据不同的行情状态动态改变颜色,是让指标直观反映市场强弱的核心。
这里主要使用IF函数和COLOR函数的组合。
MA5_COND:MA(CLOSE,5); // 当5日均线上涨时显示红色,下跌时显示绿色 MA5_COND, COLORSTICK; // 先画柱线 MA5_COND, IF(MA5_COND>REF(MA5_COND,1),COLORRED,COLORGREEN); // 覆盖颜色逻辑但更常见的做法是直接在输出变量时嵌入条件:
// 输出一条均线,金叉(上穿)时红色,死叉(下穿)时绿色,平时黄色 MA_SHORT:=MA(CLOSE,12); MA_LONG:=MA(CLOSE,26); CROSS_UP:=CROSS(MA_SHORT, MA_LONG); CROSS_DOWN:=CROSS(MA_LONG, MA_SHORT); DYNAMIC_MA:MA_SHORT, IF(CROSS_UP, COLORRED, IF(CROSS_DOWN, COLORGREEN, COLORYELLOW));这段代码的逻辑是:首先判断是否发生金叉,如果是,用红色;如果不是,再判断是否发生死叉,如果是,用绿色;如果前两者都不是,则用黄色。这是一个典型的嵌套IF语句在颜色赋值中的应用。
一个实战中的大坑:颜色函数的位置。颜色指定必须紧跟在需要着色的指标表达式之后,用逗号隔开。如果把颜色函数写在另一行,或者位置不对,通达信会直接忽略它。很多初学者抄代码时漏掉了一个逗号,导致颜色始终是默认的白色,排查半天才发现是语法细节问题。
3. 信号标记艺术:DRAWICON与DRAWTEXT函数完全指南
在K线图上标记明确的买卖点、警示信号,是技术分析公式的刚需。通达信提供了DRAWICON和DRAWTEXT两大绘图函数,它们功能相似但用途有别,用错了地方效果会大打折扣。
3.1 DRAWICON:用图标精准锚定K线位置
DRAWICON函数的作用是在满足条件的K线位置,绘制一个预设的小图标。它的核心优势是位置精准、视觉突出。
函数基本语法:
DRAWICON(条件, 位置, 图标代码);- 条件:一个布尔表达式,当值为1(真)时,才会在当根K线上绘制图标。
- 位置:通常是一个价格,如图标的垂直坐标。常用
CLOSE,HIGH,LOW,或者某个指标值。 - 图标代码:一个数字,对应通达信内置的图标库。
图标代码大全与选用心得:图标代码是DRAWICON的“密码本”,记错代码就会画出奇怪的图形。以下是经过验证的常用代码及其典型用途:
| 图标代码 | 常见图形 | 典型应用场景 |
|---|---|---|
| 1 | 红箭头(向上) | 买入信号、突破信号、金叉点 |
| 2 | 绿箭头(向下) | 卖出信号、跌破信号、死叉点 |
| 3 | 红色菱形 | 强势启动点、关注点 |
| 4 | 绿色菱形 | 弱势破位点、警示点 |
| 5 | 空心圆圈 | 一般性标记、压力/支撑测试点 |
| 6 | 实心圆圈 | 重要节点、确认点 |
| 7 | 叉号(X) | 错误信号、失效点、止损点 |
| 8 | 笑脸 | 乐观信号、底部区域 |
| 9 | 哭脸 | 悲观信号、顶部区域 |
| 10 | 红色三角形(向上) | 小周期买点 |
| 11 | 绿色三角形(向下) | 小周期卖点 |
| 12, 13... | 星星、旗帜等 | 可根据个人习惯定义,如12用于“星级推荐” |
实操示例:在MACD金叉时,在收盘价位置画一个向上的红箭头。
DIF:=EMA(CLOSE,12)-EMA(CLOSE,26); DEA:=EMA(DIF,9); MACD:=(DIF-DEA)*2; JC_CROSS:=CROSS(DIF,DEA); // MACD金叉条件 DRAWICON(JC_CROSS, CLOSE, 1); // 条件成立时,在收盘价位置画1号图标(红箭头)关键细节:
DRAWICON的“位置”参数决定了图标的垂直坐标。如果你写在CLOSE,图标中心点就对齐收盘价。如果你希望图标显示在K线最高价上方一点,可以写成HIGH * 1.02(即最高价的102%处)。这个微调对于避免图标和K线重叠非常重要。
3.2 DRAWTEXT:用文字进行详细注释
DRAWTEXT函数用于在图上书写文字。当你想标注“买入”、“卖出”、“压力”等具体文字,或者显示一个计算出的数值时,就必须用它。
函数基本语法:
DRAWTEXT(条件, 位置, ‘文本内容’);- 条件/位置:同
DRAWICON。 - 文本内容:用单引号括起来的字符串。这里有一个巨大陷阱:通达信公式中的字符串必须使用英文单引号(‘ ’),而不是中文引号(‘’)或双引号(“ ”)。很多公式导入错误,就是因为引号格式不对。
高级用法:文本与数值拼接DRAWTEXT的强大之处在于可以将固定文字和动态计算的数值组合在一起显示。
// 当价格突破20日高点时,在突破点标注“突破,高点:X.XX” HHV20:=HHV(HIGH,20); BREAKOUT:=CLOSE>REF(HHV20,1); DRAWTEXT(BREAKOUT, LOW*0.99, ‘突破,高点:’ + NUMTOSTR(REF(HHV20,1), 2));这里用到了NUMTOSTR函数,它将一个数值转换为字符串,第二个参数2表示保留两位小数。通过加号+进行字符串拼接,就能生成信息丰富的标注。
DRAWICON vs DRAWTEXT 如何选择?
- 追求速度与直观:用
DRAWICON。在快速扫盘时,一个箭头或笑脸图标比文字更容易被视觉捕捉。 - 需要传递具体信息:用
DRAWTEXT。比如标注具体的价格、百分比、信号名称。 - 图表空间有限时:
DRAWICON通常更节省空间。文字太长在密集K线区会显得杂乱。 - 一个常见策略是结合使用:用
DRAWICON标记信号发生点,同时在稍远的位置(如HIGH*1.05)用DRAWTEXT注明信号类型或强度,兼顾直观与详细。
4. 函数库核心:支撑一切指标逻辑的必备函数精讲
颜色和图标是“面子”,函数才是“里子”。通达信公式的函数库是其分析能力的核心。下面我们分类详解最常用、最关键的几组函数,理解它们,你就能读懂市面上80%的指标源码。
4.1 引用与逻辑判断函数:公式的“大脑”
这类函数负责获取数据和做出判断,是公式逻辑的起点。
REF(X, N)- 向后引用:这是使用频率最高的函数之一。它引用N周期前的X值。REF(CLOSE, 1)就是昨天的收盘价。几乎所有涉及“对比”的逻辑都会用到它,比如“今日收盘价大于昨日收盘价”:CLOSE > REF(CLOSE,1)。CROSS(A, B)- 交叉函数:判断A是否从下方向上穿过B。注意:它仅在穿越发生的当根K线返回值为1(真),之前之后都是0。这是精准定位金叉/死叉时刻的关键。CROSS(MA5, MA10)就是5日线上穿10日线的金叉信号。IF(C, A, B)- 条件函数:如果条件C成立,返回A,否则返回B。它是实现条件分支的核心,前面在条件变色中已经展示过。BETWEEN(X, A, B)- 区间判断:判断X是否介于A和B之间(含等于)。常用于定义震荡区间,例如BETWEEN(CLOSE, MA20*0.98, MA20*1.02)判断收盘价是否在20日均线上下2%的通道内。
4.2 统计计算函数:从数据中提取特征
这类函数对一系列数据进行加工,得出统计特征值。
MA(X, N)- 简单移动平均:最基础的均线函数。计算X在N周期内的算术平均值。MA(CLOSE, 30)就是30日收盘价均线。EMA(X, N)- 指数平滑移动平均:给予近期价格更高权重,对价格变动的反应比MA更灵敏。MACD、KDJ等指标的核心均线都使用EMA。一个重要区别:EMA的计算依赖于所有历史数据,而MA只依赖最近N期。这导致在图表最左端,EMA的起始值就可能与MA不同。HHV(X, N)/LLV(X, N)- 最高值/最低值:求X在最近N个周期内的最大值/最小值。HHV(HIGH, 20)是20日最高价,常用于画通道上轨或判断突破。SUM(X, N)- 求和:计算X在N周期内的总和。是计算能量潮(OBV)等累积型指标的基础。STD(X, N)- 标准差:计算X在N周期内的标准差,衡量波动率。布林带(BOLL)的带宽就是基于标准差计算的。
4.3 绘图与输出函数:将结果呈现于图表
除了前面讲的DRAWICON和DRAWTEXT,还有几个重要的绘图函数。
DRAWLINE- 画线段:可以在两个指定条件点之间画一条直线。常用于连接高点或低点,绘制趋势线。用法相对复杂,需要精确指定起点和终点的条件及位置。STICKLINE- 画柱线:可以绘制自定义的柱状图。功能非常强大,可以控制柱线的宽度、颜色、是否空心等。常用于绘制成交量、MACD柱状图(虽然MACD自带,但自定义样式需要它)、或自定义的多空能量柱。
// 绘制一个简单的价差柱线:当收盘>开盘时,在开盘-收盘之间画红色实心柱,否则画绿色空心柱。 STICKLINE(CLOSE>OPEN, OPEN, CLOSE, 3, 1), COLORRED; STICKLINE(CLOSE<=OPEN, OPEN, CLOSE, 3, 0), COLORGREEN;参数依次为:条件、柱线起始位置、柱线结束位置、柱线宽度(0最细)、是否为实心(0空心,1实心)。
PLOYLINE- 折线连接:将满足条件的点用折线连接起来。常用于绘制只有部分位置有值的指标线,比如将每次金叉的点连起来观察信号频率。
4.4 字符串与类型转换函数:处理文本信息
NUMTOSTR(N, M)- 数字转字符串:如前所述,将数字N转换为字符串,保留M位小数。这是在DRAWTEXT中显示数值的唯一途径。STRCAT(S1, S2)- 字符串拼接:将字符串S1和S2连接起来。功能上与加号+类似,但在某些复杂字符串构造中更清晰。
5. 实战拆解:从“大全”到“应用”,解剖一个热门指标源码
现在,我们运用前面学到的所有知识,来拆解一个网络上流行的“强势起爆副图指标”的可能源码框架。请注意,这里不会提供具体的、号称高胜率的“黑盒”源码,而是教你如何看懂和评估这类公式。
假设我们看到了类似下面的代码片段(已做简化和技术性还原):
// 变量定义 VAR1:=(CLOSE-LLV(LOW,36))/(HHV(HIGH,36)-LLV(LOW,36))*100; VAR2:=SMA(VAR1,3,1); VAR3:=SMA(VAR2,3,1); VAR4:=CROSS(VAR2,VAR3) AND VAR3<30; // 条件1:快线上穿慢线且在超卖区 VAR5:=VOL>MA(VOL,20)*1.5; // 条件2:成交量放大至20日均量1.5倍以上 起爆信号:VAR4 AND VAR5; // 综合信号 // 输出与绘图 DRAWICON(起爆信号, LOW*0.98, 1); // 信号出现时,在低价位画买入图标 DRAWTEXT(起爆信号, HIGH*1.02, ‘起爆’), COLORRED; // 绘制指标线 快线:VAR2,COLORWHITE; 慢线:VAR3,COLORYELLOW; // 填充背景区域 STICKLINE(VAR2>=VAR3, VAR2,VAR3, 0.5, 0), COLORRED; STICKLINE(VAR2<VAR3, VAR2,VAR3, 0.5, 0), COLORGREEN;拆解分析:
核心逻辑(函数应用):
LLV和HHV用于计算36日内的价格区间,VAR1是一个将股价映射到0-100之间的随机震荡类指标,类似KDJ的未成熟随机值(RSV)。SMA是另一种移动平均(平滑移动平均),对VAR1进行两次平滑,得到快线VAR2和慢线VAR3。这构成了一个双线摆动系统。CROSS函数用于捕捉VAR2上穿VAR3的金叉时刻,并附加了VAR3<30的超卖过滤条件,这是典型的“超卖区金叉”买入逻辑。VOL>MA(VOL,20)*1.5使用了MA函数计算均量线,并结合倍数比较,定义了“放量”条件。
信号合成(逻辑判断):
- 最终信号
起爆信号是技术面金叉 (VAR4) 与资金面放量 (VAR5) 的“与”(AND) 组合。这是一个经典的多因子共振思路,比单一条件更稳健。
- 最终信号
视觉呈现(颜色与绘图):
- 使用
DRAWICON在K线下方 (LOW*0.98) 标注图标,使用DRAWTEXT在K线上方 (HIGH*1.02) 标注文字,形成立体信号提示。 - 使用
STICKLINE在副图绘制红绿柱状背景,直观显示快慢线的位置关系(快线在上为红,慢线在上为绿),这比单纯看两条线更清晰。
- 使用
通过这样的拆解,你就能明白,任何一个复杂的指标,都是由基础函数像搭积木一样构建而成。所谓的“神奇”,无非是特定参数和逻辑组合下的产物。你可以根据自己的理解,去调整其中的周期参数(如36、3、30、20)、过滤条件(如<30改为<20),甚至修改信号组合方式(将AND改为OR),从而创造出适应不同市场环境的变体。这才是掌握了“大全”之后真正的能力。
6. 避坑指南与高级调试技巧
即使掌握了所有语法,在实际编写和调试公式时,你依然会踩坑。这里分享几个从无数错误中总结出的经验。
坑1:公式编译通过,但图上什么都不显示。这是最常见的问题。请按以下顺序排查:
- 检查输出语句:你的公式里必须有以
:结尾的赋值输出语句(如MA5:MA(CLOSE,5);),或者明确的绘图函数(DRAWICON,DRAWTEXT等)。只有以:=定义的中间变量是不会显示在图上的。 - 检查条件永远不成立:如果你的
DRAWICON或DRAWTEXT依赖于一个条件,而这个条件在当前股票、当前周期、当前参数下从未满足过,自然什么也画不出来。尝试将条件改为恒真(如1)测试绘图函数本身是否有效。 - 检查数据范围:对于
HHV,LLV,MA等需要一定周期数据的函数,在图表的最左侧(数据起始点),如果K线数量不足函数要求的周期数(N),函数会返回无效值,导致该区域无输出。这是正常现象。
坑2:图标或文字位置飘忽不定,或重叠严重。
- 位置参数是动态的:
DRAWICON(条件, CLOSE, 1)图标会随着股价波动而上下移动。如果你希望图标固定在K线图某个相对位置,可以使用与价格无关的固定值,或者基于某个均线。例如,DRAWICON(条件, MA(CLOSE,30), 1)会让图标画在30日均线位置上。 - 使用偏移系数:如前所述,
HIGH*1.02或LOW*0.98是常用的偏移技巧,可以有效避免重叠。 - 对于
DRAWTEXT,文字长度会影响观感。过长的文字在日线图上可能还行,在分钟图上就会挤成一团。尽量使用缩写或关键信息。
坑3:想自定义更复杂的颜色效果,比如渐变色。通达信原生公式系统不支持真正的渐变色。但可以通过“障眼法”模拟。例如,用多条不同颜色、不同粗细的线叠加在一起:
MA5_THICK:MA(CLOSE,5),COLORRED,LINETHICK3; MA5_THIN:MA(CLOSE,5),COLORYELLOW,LINETHICK1;这样,看起来就像是一条红色粗线外围包裹了一层黄色的边,视觉上比单色线更醒目。LINETHICK参数可以控制线宽(0-7)。
坑4:如何测试和优化公式?不要一写好就应用到所有股票。建立一个标准的测试流程:
- 单一股票历史回溯:在副图加载你的指标,找一只你熟悉的股票,手动翻看历史K线,观察信号出现的位置是否合理,是否有严重的未来函数(信号闪烁)或滞后问题。
- 多股票横向对比:在板块(如一个行业)内多选几只股票,同时观察指标表现,检查其普适性。
- 参数敏感性分析:将公式中的关键参数(如周期数、阈值)做成“参数”,在公式编辑器顶部的“参数列表”中设置。这样你可以直接在图上拖动滑块,动态观察参数变化对信号的影响,快速找到适合当前市场的参数区间。
- 理解每行代码的成本:过于复杂的公式,包含大量循环引用、极高周期计算的公式,会显著增加系统的计算负荷。在条件选股中使用时,可能导致速度变慢。尽量让公式逻辑简洁高效。
最终,工具的价值取决于使用者。这份“大全”给了你所有必要的零件和图纸,但建造出什么样的交易系统,取决于你对市场逻辑的理解。从模仿一个经典指标开始,尝试修改它的颜色,增加一个图标信号,替换其中一个函数,观察图表发生了怎样的变化。这个过程,就是你从“读者”成长为“作者”的路径。