我一直觉得判断一个通达信公式作者的功底不用看他写了多少复杂的函数嵌套就看两样东西一是对K线本身的理解二是标注是否干净利落。市面上大量主图指标把屏幕画得跟蜘蛛网一样各种线、各种色块叠在一起看着热闹实际信号根本没法用。今天要聊的“通达信自动标注形态主图指标公式”就是解决这个问题的。它做的事很简单让软件自动识别K线组合形态比如启明星、吞没、锤子线这些并在主图上用文字和图标标注出来。核心价值有三个第一把模糊的盘感变成确定性的条件第二用统一的标注规则替代肉眼主观判断第三复盘时能快速定位历史形态出现的位置。这篇文章适合三种人刚学通达信公式、想系统了解主图编写逻辑的新手已经会写均线类指标、但不知道怎么处理“形态识别”这类复杂条件的老手以及想把自己的交易规则固化成代码、减少盘中主观干扰的实战派。我会把从形态定义、代码实现到标注布局的完整思路都讲透并且给出一套可以直接导入使用的源码。1. 主图公式的核心设计思路1.1 自动标注的本质从K线到形态判断什么叫“自动标注形态”说直白点就是把你在图上用眼睛找的东西变成一段程序帮你找。举个例子锤子线这个形态肉眼识别时看的是一根K线的上下影线比例、实体位置、出现在什么趋势环境里。但在公式里这一切都要转化为数值比较下影线长度占整个K线波动的比例是否大于某个阈值实体是否靠近K线上端前期是否经历过一段下跌。这个转化过程就是形态识别的基本原理。通达信公式语言本身不复杂它没有机器学习、没有图像识别你能用的就是最高价、最低价、开盘价、收盘价、成交量这些最基本的数据再加上一些时间序列函数比如REF、BARSLAST、HHV、LLV把所有“看起来像”的形态用数学关系表达出来。形态判断的精确度取决于两个层面一是你选取的特征是否抓住了形态的核心二是阈值参数的宽容度。阈值太严信号太少复盘半天找不到几个例子阈值太松信号泛滥什么乱七八糟的K线都会被标注出来失去意义。我实际写的时候会先把形态拆成“结构特征 位置特征 确认特征”三层。结构特征管K线本身长什么样位置特征管它出现在哪里确认特征管这个形态是否得到后续走势的验证。三层条件逐级过滤信号质量会明显提升。1.2 编写前的三件事周期选择、标注对象、布局规划很多人拿到需求就直接开写写到一半发现标注位置不对、信号和肉眼对不上又回头改逻辑效率很低。我写主图指标前一定会先想清楚三件事这三件事定了后面写代码就是填空。第一件事是周期选择。同一套形态识别逻辑在日线和分钟线上的表现差异非常大。日线上一个标准的启明星形态在三分钟图上可能就变成了一堆杂乱的小K线因为日内波动的噪音多小周期的K线形态更容易被影线干扰。主图指标公式里最好不要写死周期而是要让形态参数在不同周期下都保持相对稳定这一点后面会细说。第二件事是标注对象。你打算标哪些形态是只标反转形态还是连中继形态也标是只标注K线级别的小形态还是要标注“N日高低点”这种波段级别的结构这直接决定了公式的体量和复杂度。刚开始写的时候建议控制在2到3个形态以内跑通了再慢慢加。第三件事是布局规划。主图标注最忌讳的就是文字重叠、图标扎堆。K线就那么多位置你既要画图标又要写文字还要留出均线的位置必须提前规划好。我的习惯是图标放在K线上方或下方的固定偏移位置文字标注放在图标的旁边或者用不同颜色错开尽量避免在连续出现信号的区域互相遮挡。这三件事看起来基础但决定了后续开发的顺畅程度。我见过太多人兴致勃勃写出一大段公式结果标注乱七八糟最后只能推倒重来。1.3 无未来函数在主图标注中的核心地位聊通达信公式绕不开“未来函数”这个话题。简单解释一下未来函数指的是在计算当前K线信号时引用了未来K线的数据比如用了REF(X, -1)或者某些漂移函数导致信号在历史回看上“完美”但在实际盘中根本不可能提前知道。自动标注形态的主图指标是最容易不小心引入未来函数的地方之一。比如你想标注“启明星”如果用“右侧阳线确认”作为触发条件那信号出现在阳线收盘时没问题但如果你为了标注好看把信号位置回移到“左侧阴线”那里就必须用ref函数往回倒数据这就引入了未来函数。引入未来函数的后果非常严重第一历史回测胜率虚高因为信号实际是用未来数据“算”出来的第二实盘中信号会出现“漂移”——就是已经画出来的标注过几根K线后突然消失或者位置变了这在盘中会让人完全不敢信任这个指标。所以我在写标注类公式时有一个铁律所有形态信号必须在当前K线收盘后就能完全确定绝不引用未来数据。如果形态需要右侧确认那就老老实实把信号画在确认K线上宁可损失一点点“美观度”也要保证信号的真实性。2. 形态识别逻辑的骨架搭建2.1 K线形态判断的通用框架聊完思路进入正题。一个主图自动标注指标核心就是形态识别代码的写法。通达信公式的语法和普通编程语言不太一样它是一种基于数组的描述性语言每一行处理的是整个序列。所以写形态判断时思维要切换成“序列思维”而不是“单K线思维”。形态判断的通用框架我总结为四步第一步定义基础元素。比如实体、上影线、下影线、振幅这些是K线的基本组成部分。进一步还可以算平均振幅、平均实体等相对量用来动态适配不同个股的波动特性。第二步定义单K线特征。比如“这根K线实体很小”“这根K线带长下影线”“这根K线创了N日新高”这些都是基于单根K线的布尔判断输出结果是1或者0。第三步定义组合形态结构。把单K线特征串联起来比如“前一根是大阴线当前这根是小实体且下影线很长”这就是一个简单的组合形态。第四步添加位置过滤条件。比如“出现在连续下跌之后”“出现在均线附近”这些条件用来过滤掉那些虽然形态符合、但没有交易背景的信号。这套框架的好处是模块化。你把每一步都定义成独立的变量后续要调整某个形态只需要改一个变量的定义不用翻来覆去找代码。我自己的很多主图指标都是这么组织的改起来特别顺手。2.2 用VALIGN反向验证法校准标注位置主图标注有一个很容易踩的坑你看公式代码里写着DRAWICON在HIGH的位置画图标但实际显示出来却偏移得厉害或者图标和文字挤在一起。这种问题不一定是函数用法错了很可能是K线的价格坐标和数据精度导致的。我推荐一个笨但很有效的方法我把它叫“VALIGN反向验证法”。通达信绘图函数里有个VALIGN参数控制文字或图标在指定位置的垂直对齐方式0是自动1是顶部2是中间3是底部注意不同版本里具体数值含义略有差异。很多人忽略了这个参数直接用默认的自动对齐结果就是文字的位置跟预期差很远。具体的验证方法分三步第一步先画出参照物比如在固定价格位置画一条水平线或者直接在标注K线的最高价、最低价位置画小圆点第二步把DRAWTEXT或DRAWICON的标注值临时设成一个简单数字比如直接显示“1”然后把对齐方式分别设为顶部、中间、底部观察哪个数值和你的预期一致第三步确定对齐参数后再加上正常的文字内容再微调偏移量。这个方法听起来很基础但它确实能解决标注位置不准的问题。尤其是当你想要标注文字“压”在K线上方、又不能遮住上影线的时候对齐方式的细微差异就非常明显了。2.3 主图绘制的三大要素图标、文字、颜色标注的可读性直接决定了这个指标实盘好不好用。我见过很多信号逻辑写得很漂亮的公式就是因为标注做得差最后被人弃用。主图绘制有三个核心要素图标、文字、颜色。图标主要用于快速定位。DRAWICON函数可以画内置图标编号范围有限一般选1到40之间的小图标就够了。我常用的几个数字类图标比如ICON1到ICON10适合标注买点级别箭头类图标适合标注方向性信号钻石或星形图标适合标注强信号。文字用于补充说明。DRAWTEXT可以输出更详细的信息比如“锤子线”“吞没”“顶背驰”这些形态名称也可以输出当时的价格、时间等变量值。文字的字体大小可以用FONTSIZE控制我习惯把文字大小设在12到14之间太小了看不清太大了会遮挡K线。颜色用于区分信号方向。通达信的COLOR函数族可以精确控制颜色。我正在用一种“红多蓝绿空、黄紫表示特殊状态”的配色方案同时保证色弱用户也能分辨。注意主图本来就是红绿K线扎堆的地方标注颜色要避免和K线本身的涨跌颜色混淆否则看着会非常乱。3. 实操过程从零写出一个自动标注主图指标3.1 完整源码自动标注吞没形态与锤子线现在开始真正的实操。我先给出一段完整的通达信主图公式源码这段代码实现了两个经典形态的自动标注“看涨吞没”和“锤子线”并且加入了趋势位置过滤尽量控制信号数量。{ 自动标注形态主图指标 } {参数区} N:20; {前期下跌判断周期} 幅度:3; {大阳线/大阴线的最小实体涨幅百分比} 影线倍:2; {下影线相对于实体的最小倍数} 位置过滤:1; {1开启位置过滤0关闭} {基础元素} H1:HIGH; L1:LOW; O1:OPEN; C1:CLOSE; 实体:ABS(C1-O1); 上影:H1-MAX(C1,O1); 下影:MIN(C1,O1)-L1; 真实波幅:H1-L1; {趋势背景判断} 前期跌幅:(REF(C1,1)-REF(C1,N))/REF(C1,N)*100; 下跌背景:前期跌幅-8; MA5:MA(C1,5); MA10:MA(C1,10); 均线空头:MA5MA10; {形态一看涨吞没} 前阴线:REF(C1,1)REF(O1,1); 前实体:REF(实体,1); 前影线容忍:REF(下影,1)前实体*0.5; 当前实体涨幅:(C1-O1)/O1*100; 当前阳线:C1O1; 实体覆盖:C1REF(O1,1) AND O1REF(C1,1); 实体够大:当前实体涨幅幅度; 吞没形态:前阴线 AND 前影线容忍 AND 当前阳线 AND 实体覆盖 AND 实体够大; 吞没信号:吞没形态 AND (NOT 位置过滤 OR (下跌背景 OR 均线空头)); {形态二锤子线} 小实体:实体真实波幅*0.35; 长下影:下影实体*影线倍; 短上影:上影真实波幅*0.2; 收盘强势:C1REF(C1,1); 锤子形态:小实体 AND 长下影 AND 短上影 AND 收盘强势; 锤子信号:锤子形态 AND (NOT 位置过滤 OR 下跌背景); {自动标注} DRAWICON(吞没信号,L1*0.98,1); DRAWTEXT(吞没信号,L1*0.96,吞没),COLORRED; DRAWICON(锤子信号,L1*0.98,2); DRAWTEXT(锤子信号,L1*0.96,锤子),COLORYELLOW; {提示此公式不包含未来函数信号在当前K线收盘后确定}这里有个细节需要特别注意我在代码中使用的是L1*0.98这样的乘数偏移而不是用L1-MIN(LOW,0)*0.01这类加减法偏移是因为不同股票的绝对价格差异非常大几块钱到几百块钱都有乘数偏移能保证图标离K线底部的视觉距离在全价格区间内都近似一致。如果你用加减法偏移低价股上图标可能直接贴到K线上高价股上图标又离得太远。3.2 代码逐段解读为什么这样写这段代码看起来不长但每一行都经过仔细推敲。我拆开讲一下几个关键点。基础元素部分我定义了实体、上影、下影和真实波幅。注意真实波幅我直接用H-L没有用ATR那种复杂计算因为对于形态识别来说单根K线的真实波幅用H-L已经足够引入ATR反而会让小周期K线的形态特征被平均值的惯性拖累。趋势背景判断部分我用了两个条件做“或”运算。条件是前期跌幅超过8%这个数字看起来随意实际上是对应了“一波像样的回调”的普遍认知你可以根据自己的交易周期调整。第二个条件是均线空头排列这是经典的下跌趋势确认。为什么要两个条件做“或”因为如果只用均线横盘震荡期均线反复缠绕形态信号会不稳定如果只用前期跌幅那对于长期阴跌但单日跌得不多的股票又捕捉不到下跌背景。两个条件合并覆盖面更广。形态判断部分看涨吞没的实体覆盖条件我用的是C1REF(O1,1) AND O1REF(C1,1)这是吞没的严格定义阳线的实体要完全包住前一根阴线的实体。这里没有用影线级别的要求因为我觉得吞没形态的关键在于实体覆盖影线是否完全包住反而是次要的如果加上影线完全覆盖的条件实战中能触发的信号会锐减。锤子线部分小实体和长下影的比例我特意用“小实体真实波幅*0.35”和“下影实体*2”这两个组合而不是用“下影实体长度的两倍”这一个条件。原因在于单独用影线倍率容易出现实体巨大、下影也巨大的情况那就不叫锤子线了加上“实体占整个波幅比例要小”这个条件才能确保它的“小实体长下影”的市场含义。自动标注部分用了DRAWICON和DRAWTEXT叠加。图标画在L1的0.98倍位置文字画在0.96倍位置两者错开避免完全重叠。颜色的选择上吞没用红色代表强烈看涨信号锤子用黄色代表相对温和的反转信号。3.3 在通达信中的导入步骤与验证这段源码复制到通达信里直接用就行。具体步骤是打开通达信按CtrlF打开公式管理器选择“主图指标”点击“新建”把上面的代码粘贴进去公式名称随便起一个比如“形态标注V1”然后点确定。回到K线图输入公式名称的首字母就能在主图上看到效果。代码导入后第一件事不是看信号准不准而是做两步验证。第一步验证逻辑正确性。随便找一只走势比较标准的股票翻到历史上几个明显的锤子线和吞没形态位置用肉眼确认公式是否标注出来了。如果发现漏标了多半是条件太严格如果发现多标了说明某个过滤条件失效了需要检查变量之间的依赖关系。第二步验证无未来函数。一个简单的测试方法在通达信里把K线往右拖动观察已经出现的标注是否会随着K线数量的变化而消失或改变位置。如果标注是稳定的、从出现那一刻起就不再变化基本可以确认没有未来函数问题。4. 高胜率错觉与指标误用的避坑指南4.1 形态标注与“胜率98%”这类噱头的距离说到“胜率98%”这个词我得泼一盆冷水。这是目前网上公式分享领域最常见的营销话术。且不说98%的胜率是否真实可验证就算真实它背后通常也藏着三个猫腻第一胜率统计口径不统一。有的是“未来5日内最高价超过信号日收盘价”就算盈利有的是“必须信号后直接上涨”才算盈利。统计口径不同胜率天差地别。第二样本偏差。如果只挑某一段大牛市行情来回测或者只挑几只走势特别标准的股票来展示胜率自然高得离谱。真正可用的指标必须经过全市场、全周期的回测检验。第三未来函数的可能。前面说过一旦引入未来函数历史胜率就会虚高到惊人水平。很多网上流传的“高胜率公式”破解源码后一看全是未来函数实盘根本没法用。我做形态标注公式时一直把“标注”和“交易信号”严格区分对待。形态标注的意义在于帮助你发现市场结构的变化它本身不构成完整的交易系统。真正稳定的交易系统除了形态识别还要考虑仓位管理、止损策略和交易执行纪律。指望一个主图标注指标直接给出“98%胜率”的买卖点本身就是不切实际的预期。4.2 信号闪烁格式化条件的死敌主图标注另一个常见问题是信号闪烁。所谓闪烁就是同一个位置你用鼠标来回点击或者刷新屏幕时标注时有时无。闪烁的原因通常有两个一个是动态周期函数和数据窗口问题比如你用了周期内最大的某根K线作为判断条件但数据窗口变化会导致周期范围改变另一个是浮点数精度。通达信内部计算浮点数时某些看起来相等的条件在极小数据差异下可能会判定为不等导致信号不稳定。解决闪烁问题我常用的方法是“信号锁定”。在形态触发条件中加上一个“是否已经触发过”的判定配合BARSLAST之类的函数确保同一段行情内只输出一次信号即使后续数据变化也不会重复触发。这个逻辑也能防止连续K线反复标注同一种形态的情况。另外尽量避免用“当前周期内最低价”这类动态扫描函数作为形态的确认条件因为周期内的最低价会随着K线数量变化而改变这是典型的信号闪烁来源。4.3 主图标注与选股公式的配合使用写好了主图标注很多人会想更进一步能不能根据这个形态直接选股每天收盘后自动筛出符合形态的股票理论上是没问题的因为主图公式里的形态判断逻辑和选股公式的筛选逻辑本质上是一样的。但实际使用中有三个坑要提醒第一个坑主图公式里有很多绘图函数DRAWICON、DRAWTEXT和输出变量直接当作选股公式用会报错或者效率极低。正确的做法是把主图公式里的形态判断逻辑单独提取出来去掉所有绘图函数只保留最后的“形态信号”作为选股条件。第二个坑选股公式和主图公式的适用周期要统一。如果你在主图上看的是日线那选股也要用日线周期跑。千万不要用日线形态信号去做周线选股逻辑会完全对不上。第三个坑自动选股需要细致设置股票池。通达信的选股范围如果默认是全市场几千只股票每日收盘后跑一遍耗时很长。我一般会先通过财务指标剔除ST、剔除次新股、剔除日均成交额过低的小盘股缩小范围再用形态选股公式去筛效率能提升好几倍。5. 常见问题与调试心得5.1 标注位置偏移和文字重叠的处理我在实际使用中最常收到的反馈就是“标注位置不对”。这里汇总几个典型情况和处理方法。图标显示到副图去了这是主图公式常见的错误——在公式的最后一行没有输出一个主图属性变量。通达信判断一个指标是主图还是副图依赖于最后一个有效输出语句的属性。如果你不小心多写了一个PLOYLINE或者没有把STICKLINE设为主图模式整条公式可能被判定为副图指标。解决办法确保公式里至少有一个主图绘图函数DRAWICON、DRAWTEXT、DRAWKLINE等或者在公式开头加一句“主图叠加”。文字和K线重叠这通常是因为K线价格在标注时已经偏离了当时的位置或者文字大小设得太大。我的经验是主图上的文字标注要么放在K线最高价的上方要么放在最低价的下方用固定比例的偏移量不要让文字悬浮在实体中间。如果K线实体本身很小文字大小又控制在14左右即便重叠也不会太影响阅读。图标看不清通达信的DRAWICON函数有图标大小的历史限制不同版本的图标渲染效果也不一样。如果你觉得图标太小可以考虑改用DRAWTEXT配合特殊字符来“自制图标”比如画一个向上的箭头字符“▲”配合颜色和大小控制视觉效果反而比内置图标更好。不过要注意特殊字符在不同操作系统和字体环境下兼容性有差异。5.2 信号延迟与预警提醒的时间差主图标注公式的另一个实际问题是信号出现后你什么时候能看见如果公式引用的是当前未收盘K线的实时数据那盘中信号会随着价格波动反复变化只有收盘那一刻才会定型。这种情况下盘中看到“锤子线”标注可能过半小时又消失了特别影响心情和判断。解决这个问题我通常的做法是给公式加一个“K线定型”前置条件如果是日线周期只有当日K线处于“已完成”状态时才允许输出信号如果是分钟线只有当时最后一分钟的数据才算数。通达信里可以用ISLASTBAR是否最后一根K线配合时间来辅助判断具体写法因版本略有差异。如果你一定要在盘中实时使用形态标注我建议把参数调得更保守一些或者在公式里增加一个确认函数延时到下一根K线开盘后再输出信号牺牲一点及时性换来信号的稳定性。5.3 多周期联动标注的实现思路既然聊了主图标注顺便提一个进阶玩法多周期联动标注。这个需求在缠论和波段交易者中很常见——希望日线主图上能看到之前某个周期的结构信号比如把15分钟级别的背离标注显示在日线K线上。通达信本身不支持真正意义上的跨周期绘图不同周期数据引用有限制但是有一个变通方案使用跨周期引用函数“#”或者“CALLSTOCK”来提取低周期的数据再在当前主图上进行汇总判断。这个方案的难点在于低周期数据量很大直接引用计算量暴增公式运行会非常慢甚至卡死。我的建议是不要贪多。如果要做多周期联动优先选择只引用一个低周期数据比如只引用60分钟级别并且尽量用收盘后静态数据避免盘中反复计算。把“联动”做在选股层面而不是主图标注层面效率会高很多。比如你可以在日线选股公式里加上一个条件“最近三天的60分钟级别中出现过顶背离”这相当于用选股器去模拟跨周期判断而不是在主图上直接画出来。5.4 数据精度与除权处理对标注的影响最后聊一个比较隐蔽但影响巨大的问题除权缺口对形态标注的干扰。股票分红除权后K线上会留下一个向下的跳空缺口价格整体下移。这个缺口在形态识别里是致命的如果前期跌幅的计算跨越了除权缺口会导致跌幅被严重高估形态信号大量出现如果均线的计算跨越了除权缺口均线会出现一根大深坑让均线系统彻底失真。通达信提供了复权数据的选项。对于主图标注公式我强烈建议使用“前复权”数据这样K线的形态是连续的除权缺口被处理掉了形态识别的准确率会大幅提升。但要注意复权方式会影响价格的绝对数值而我的公式里使用了乘数偏移所以在复权数据下标注位置可能和不复权数据完全不一样这是正常现象。另外如果某些股票出现极端行情比如连续跌停导致K线数据异常通达信会保留这些数据但形态识别大概率会做出错误标注。遇到这种情况我一般会手动把明显的异常K线排除在样本之外或者增加一个“振幅异常过滤”条件如果单根K线的振幅超过历史均值的5倍则不参与任何形态判断。6. 进阶扩展把标注公式升级为完整复盘框架前面聊的都是基础用法最后说一点我的进阶心得。主图形态标注本质上是一种把市场状态“编码化”的工具。当你对形态的定义越来越精准标注的规则越来越细你的主图系统就会逐渐演化成一个完整的复盘框架。我目前的版本里除了K线形态还接入了波段高低点标注、量能异动标注、关键位置突破标注然后在副图用成交量、量比、换手率做辅助过滤。这样一来主图就不再是“几个孤零零的形态信号”而是一张信息地图哪些位置出现过什么结构当时的量能状态如何后续走势怎么演化一目了然。复盘效率至少提升一倍。还有一个小技巧是标记失败的信号。我写过一段专门的公式把历史上出现过吞没信号但后续三天没涨的案例用特殊颜色标出来。这个方法比单一标注有价值得多因为你不仅知道了哪些形态出现过还知道了哪些形态“不灵”这对优化交易规则的帮助是巨大的。这种思路也是做量化交易的雏形把交易规则变成代码用历史数据检验规则的有效性不断修正参数和条件最终形成一套可执行、可回溯、可优化的交易框架。主图自动标注公式正是这个框架的入口。从我自己的实战体会来说自动标注形态的价值不在于告诉你“买还是卖”而在于帮你建立一套统一的观察视角。就像同一张K线图新手看到的是红红绿绿老手看到的是市场情绪的变化轨迹。通过公式把形态客观化、标准化你眼里的行情自然会比以前清晰很多。