公司动态
通达信公式编程完全指南:从颜色编码、绘图函数到核心函数精讲
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_CONDREF(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线上绘制图标。位置通常是一个价格如图标的垂直坐标。常用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:CLOSEREF(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(CLOSEOPEN, OPEN, CLOSE, 3, 1), COLORRED; STICKLINE(CLOSEOPEN, 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 VAR330; // 条件1快线上穿慢线且在超卖区 VAR5:VOLMA(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(VAR2VAR3, VAR2,VAR3, 0.5, 0), COLORRED; STICKLINE(VAR2VAR3, VAR2,VAR3, 0.5, 0), COLORGREEN;拆解分析核心逻辑函数应用LLV和HHV用于计算36日内的价格区间VAR1是一个将股价映射到0-100之间的随机震荡类指标类似KDJ的未成熟随机值(RSV)。SMA是另一种移动平均平滑移动平均对VAR1进行两次平滑得到快线VAR2和慢线VAR3。这构成了一个双线摆动系统。CROSS函数用于捕捉VAR2上穿VAR3的金叉时刻并附加了VAR330的超卖过滤条件这是典型的“超卖区金叉”买入逻辑。VOLMA(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线观察信号出现的位置是否合理是否有严重的未来函数信号闪烁或滞后问题。多股票横向对比在板块如一个行业内多选几只股票同时观察指标表现检查其普适性。参数敏感性分析将公式中的关键参数如周期数、阈值做成“参数”在公式编辑器顶部的“参数列表”中设置。这样你可以直接在图上拖动滑块动态观察参数变化对信号的影响快速找到适合当前市场的参数区间。理解每行代码的成本过于复杂的公式包含大量循环引用、极高周期计算的公式会显著增加系统的计算负荷。在条件选股中使用时可能导致速度变慢。尽量让公式逻辑简洁高效。最终工具的价值取决于使用者。这份“大全”给了你所有必要的零件和图纸但建造出什么样的交易系统取决于你对市场逻辑的理解。从模仿一个经典指标开始尝试修改它的颜色增加一个图标信号替换其中一个函数观察图表发生了怎样的变化。这个过程就是你从“读者”成长为“作者”的路径。