通达信公式编程完全指南:从颜色编码、绘图函数到核心函数精讲
2026/8/8 1:33:50 网站建设 项目流程

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(浅蓝)等。

直接使用颜色常量(需谨慎)在一些老公式或特定写法中,你会看到直接使用REDGREENBLUE等单词,或者更古老的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线图上标记明确的买卖点、警示信号,是技术分析公式的刚需。通达信提供了DRAWICONDRAWTEXT两大绘图函数,它们功能相似但用途有别,用错了地方效果会大打折扣。

3.1 DRAWICON:用图标精准锚定K线位置

DRAWICON函数的作用是在满足条件的K线位置,绘制一个预设的小图标。它的核心优势是位置精准、视觉突出

函数基本语法:

DRAWICON(条件, 位置, 图标代码);
  • 条件:一个布尔表达式,当值为1(真)时,才会在当根K线上绘制图标。
  • 位置:通常是一个价格,如图标的垂直坐标。常用CLOSEHIGHLOW,或者某个指标值。
  • 图标代码:一个数字,对应通达信内置的图标库。

图标代码大全与选用心得:图标代码是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 绘图与输出函数:将结果呈现于图表

除了前面讲的DRAWICONDRAWTEXT,还有几个重要的绘图函数。

  • 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;

拆解分析:

  1. 核心逻辑(函数应用):

    • LLVHHV用于计算36日内的价格区间,VAR1是一个将股价映射到0-100之间的随机震荡类指标,类似KDJ的未成熟随机值(RSV)。
    • SMA是另一种移动平均(平滑移动平均),对VAR1进行两次平滑,得到快线VAR2和慢线VAR3。这构成了一个双线摆动系统。
    • CROSS函数用于捕捉VAR2上穿VAR3的金叉时刻,并附加了VAR3<30的超卖过滤条件,这是典型的“超卖区金叉”买入逻辑。
    • VOL>MA(VOL,20)*1.5使用了MA函数计算均量线,并结合倍数比较,定义了“放量”条件。
  2. 信号合成(逻辑判断):

    • 最终信号起爆信号是技术面金叉 (VAR4) 与资金面放量 (VAR5) 的“与”(AND) 组合。这是一个经典的多因子共振思路,比单一条件更稳健。
  3. 视觉呈现(颜色与绘图):

    • 使用DRAWICON在K线下方 (LOW*0.98) 标注图标,使用DRAWTEXT在K线上方 (HIGH*1.02) 标注文字,形成立体信号提示。
    • 使用STICKLINE在副图绘制红绿柱状背景,直观显示快慢线的位置关系(快线在上为红,慢线在上为绿),这比单纯看两条线更清晰。

通过这样的拆解,你就能明白,任何一个复杂的指标,都是由基础函数像搭积木一样构建而成。所谓的“神奇”,无非是特定参数和逻辑组合下的产物。你可以根据自己的理解,去调整其中的周期参数(如36、3、30、20)、过滤条件(如<30改为<20),甚至修改信号组合方式(将AND改为OR),从而创造出适应不同市场环境的变体。这才是掌握了“大全”之后真正的能力。

6. 避坑指南与高级调试技巧

即使掌握了所有语法,在实际编写和调试公式时,你依然会踩坑。这里分享几个从无数错误中总结出的经验。

坑1:公式编译通过,但图上什么都不显示。这是最常见的问题。请按以下顺序排查:

  1. 检查输出语句:你的公式里必须有以:结尾的赋值输出语句(如MA5:MA(CLOSE,5);),或者明确的绘图函数(DRAWICON,DRAWTEXT等)。只有以:=定义的中间变量是不会显示在图上的。
  2. 检查条件永远不成立:如果你的DRAWICONDRAWTEXT依赖于一个条件,而这个条件在当前股票、当前周期、当前参数下从未满足过,自然什么也画不出来。尝试将条件改为恒真(如1)测试绘图函数本身是否有效。
  3. 检查数据范围:对于HHV,LLV,MA等需要一定周期数据的函数,在图表的最左侧(数据起始点),如果K线数量不足函数要求的周期数(N),函数会返回无效值,导致该区域无输出。这是正常现象。

坑2:图标或文字位置飘忽不定,或重叠严重。

  • 位置参数是动态的:DRAWICON(条件, CLOSE, 1)图标会随着股价波动而上下移动。如果你希望图标固定在K线图某个相对位置,可以使用与价格无关的固定值,或者基于某个均线。例如,DRAWICON(条件, MA(CLOSE,30), 1)会让图标画在30日均线位置上。
  • 使用偏移系数:如前所述,HIGH*1.02LOW*0.98是常用的偏移技巧,可以有效避免重叠。
  • 对于DRAWTEXT,文字长度会影响观感。过长的文字在日线图上可能还行,在分钟图上就会挤成一团。尽量使用缩写或关键信息。

坑3:想自定义更复杂的颜色效果,比如渐变色。通达信原生公式系统不支持真正的渐变色。但可以通过“障眼法”模拟。例如,用多条不同颜色、不同粗细的线叠加在一起:

MA5_THICK:MA(CLOSE,5),COLORRED,LINETHICK3; MA5_THIN:MA(CLOSE,5),COLORYELLOW,LINETHICK1;

这样,看起来就像是一条红色粗线外围包裹了一层黄色的边,视觉上比单色线更醒目。LINETHICK参数可以控制线宽(0-7)。

坑4:如何测试和优化公式?不要一写好就应用到所有股票。建立一个标准的测试流程:

  1. 单一股票历史回溯:在副图加载你的指标,找一只你熟悉的股票,手动翻看历史K线,观察信号出现的位置是否合理,是否有严重的未来函数(信号闪烁)或滞后问题。
  2. 多股票横向对比:在板块(如一个行业)内多选几只股票,同时观察指标表现,检查其普适性。
  3. 参数敏感性分析:将公式中的关键参数(如周期数、阈值)做成“参数”,在公式编辑器顶部的“参数列表”中设置。这样你可以直接在图上拖动滑块,动态观察参数变化对信号的影响,快速找到适合当前市场的参数区间。
  4. 理解每行代码的成本:过于复杂的公式,包含大量循环引用、极高周期计算的公式,会显著增加系统的计算负荷。在条件选股中使用时,可能导致速度变慢。尽量让公式逻辑简洁高效。

最终,工具的价值取决于使用者。这份“大全”给了你所有必要的零件和图纸,但建造出什么样的交易系统,取决于你对市场逻辑的理解。从模仿一个经典指标开始,尝试修改它的颜色,增加一个图标信号,替换其中一个函数,观察图表发生了怎样的变化。这个过程,就是你从“读者”成长为“作者”的路径。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询