免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

通达信主图叠加公式:板块标签与概念主营取数排错

通达信主图叠加公式:板块标签与概念主营取数排错 简介这份通达信主图叠加指标源码文档面向股票技术分析爱好者与公式编写初学者解决在K线主图上集中查看个股所属行业、地区、概念与主营业务等基本面标签的需求。压缩包内仅1个doc文件约197KB内容以指标公式源码、知识点总结与代码片段为主便于边看边复制到通达信公式管理器调试。文档围绕DRAWTEXT_FIX、EXTERNSTR、STICKLINE等常用函数展开示范如何用固定位置文字输出行业、地区、概念和主营信息并通过EXTERNSTR读取外部字符串补充概念与主营业务同时给出多组STICKLINE柱线控制上涨下跌K线颜色与宽度的写法。已有1877人浏览学习适合希望快速搭建主图信息面板、理解通达信公式结构并复用代码的读者参考。1. 主图叠加公式里行业和地区刷得出来概念和主营为什么是空白把这份 .doc 里的源码整段复制进公式管理器编译通过主图左上角立刻出现「所属行业银行」「所属地区深圳」但紧接着的「所属概念」和「主营业务」后面干干净净什么都没有。同一份代码换台电脑又能显示这种「半截生效」最容易让人怀疑语法写错了其实问题不在语法在于两条取数路径完全不同。HYBLOCK、DYBLOCK 读的是客户端本地自带的板块归属数据装完软件下载一次板块文件就有而 EXTERNSTR(0,3)、EXTERNSTR(0,2) 读的是外部字符串数据必须你自己先准备一张能被客户端认出来的数据表并导入公式才有东西可读。下面按「文字怎么定位、板块数据从哪来、K 线怎么重绘、报错怎么查」把这份源码拆开顺手把原作者注释里标反的几处颜色编码纠回来。2. DRAWTEXT_FIX 的参数与颜色编码把四行标签钉在主图左上角2.1 函数签名与五个参数的实际含义这份源码的骨架全部由 DRAWTEXT_FIX 撑起来八条语句两两一组一条画标签、一条画取值。先把签名拆干净DRAWTEXT_FIX(COND, X, Y, TYPE, TEXT),COLORxxxxxx;参数类型取值范围说明COND逻辑值0 / 1为真时绘制。写常量 1 表示常驻显示X数值0 ~ 1横向位置相对当前窗口宽度的比例Y数值0 ~ 1纵向位置相对主图窗高的比例0 在顶部TYPE整数0 / 10 时 X 是文字左边界1 时 X 是文字右边界TEXT字符串常量或函数要显示的文本可以是板块函数返回值它和 DRAWTEXT 最大的差别是坐标系。DRAWTEXT 的锚点挂在某根 K 线上图一缩放、一平移文字就跟着跑DRAWTEXT_FIX 用的是窗口坐标跟 K 线无关所以才能做「常驻的板块标签」。源码里 COND 全写成 1就是让文字一直挂着这处写法没问题。需要留意的是后半截的,COLORxxxxxx。颜色修饰符必须紧跟在同一条语句的右括号后面、分号前面位置写错就整句失效。更稳妥的写法是每个 DRAWTEXT_FIX 单独占一行避免一行里塞太多语句导致看错边界。2.2 百分比坐标为什么 Y 要按 0.04 递增源码的四行标签分别是 Y0.00、0.04、0.08、0.12X 用两段式标签固定在 0.00取值固定在 0.14 或 0.20。这样排版的好处是标签列对齐、数值列对齐视觉上不散。{最小可跑骨架先不要取数用常量验证定位} DRAWTEXT_FIX(1,0.00,0.00,0,所属行业),COLORFF60FF; DRAWTEXT_FIX(1,0.14,0.00,0,测试值),COLORFF60FF; DRAWTEXT_FIX(1,0.00,0.04,0,所属地区),COLOR6F59FF; DRAWTEXT_FIX(1,0.14,0.04,0,测试值),COLOR6F59FF;逻辑上Y 的每个 0.04 代表窗高的 4%四行排下来正好占顶部 16% 的空间。这里藏着第一个坑0.04 是相对值不是像素。1080p 全屏时主图区大约 800 像素高0.04 折合 32 像素默认字号 12 到 14 像素四行间距充足一旦把窗口压扁到 400 像素高0.04 只剩 16 像素几行字立刻叠成一团墨。这就是「我这儿好好的同事那儿糊成一片」的根源。X 方向的 0.14 同理。宽窗口下 14% 是很长一段留白窄窗口下数值列可能直接压在 K 线实体上。更麻烦的是概念和主营业务这类长文本通达信不会自动换行字符越过窗口右边界就被裁掉看不到任何提示。遇到长主营描述常见做法是把标签行和数值行拆成上下两行而不是硬挤在同一行的两个 X 上。TYPE 参数用来处理对齐。取 0 时 (X,Y) 是文字的左上角锚点向右伸展取 1 时 (X,Y) 是右上角锚点文字向左伸展。想让四行取值右对齐成一条竖线可以把数值那几条改成 TYPE1并把 X 统一挪到 0.35 附近。2.3 COLORxxxxxx 是 BGR 顺序不是 RGB源码里所有颜色的注释基本都标错了方向原因只有一个通达信的颜色值是0xBBGGRR高两位是蓝、中间两位是绿、低两位才是红和网页上习惯的 RGB 正好倒过来。验证方法很简单内置常量 COLORRED 展开就是 COLOR0000FF低两位 FF 落在红通道上结论成立。按这个规则还原源码里的几个颜色公式中写的解出的 RGB实际观感源码注释COLORFF60FF255, 96, 255品红 / 紫红所属行业对上了COLOR6F59FF255, 89, 111桃红注释写「紫」实际偏红COLORFF972F47, 151, 255天蓝注释写「橙」实际是蓝COLOR34A6FA250, 166, 52橙黄注释写「蓝」实际是橙COLOR00FFFF255, 255, 0亮黄注释写「青」实际是黄也就是说源码里「主营业务」那一行显示出来其实是橙黄色「主题概念」是亮黄色。要真正拿到注释里标称的颜色把 RGB 三元组倒过来写就行{目标色橙 RGB(255,151,47) - COLOR2F97FF天蓝 RGB(52,166,250) - COLORFAA634} DRAWTEXT_FIX(1,0.00,0.08,0,主营业务),COLOR2F97FF; DRAWTEXT_FIX(1,0.14,0.08,0,EXTERNSTR(0,2)),COLOR2F97FF; DRAWTEXT_FIX(1,0.00,0.12,0,主题概念),COLORFAA634; DRAWTEXT_FIX(1,0.20,0.12,0,EXTERNSTR(0,4)),COLORFAA634;调色时建议先在纸上把 RGB 写出来再按「蓝绿红」三段倒排成六位十六进制比反复编译试色快得多。深色主图上亮度低于 0x66 的颜色几乎看不清选色时把三个通道里最大的那个值往 0xAA 以上靠。3. HYBLOCK、DYBLOCK 与 EXTERNSTR板块数据的两种取数路径3.1 内置板块函数能取到什么、取不到什么HYBLOCK 返回当前品种所属行业板块的名称DYBLOCK 返回所属地域。这两个是无参函数直接写在 DRAWTEXT_FIX 的 TEXT 位置就能用数据来自客户端本地的板块归属文件所以断网也能显示——只要能保证板块数据是新的。它们的边界很清楚一是唯一性。通达信按一级行业给每只股票归档一只票只对应一个行业、一个地域所以单值函数够用。但概念完全不是这个概念——一只票可能同时挂着十几个概念用返回单个字符串的函数根本没法表达这才是源码作者绕道 EXTERNSTR 的真正原因。二是空值。上市首日的次新股、指数、ETF、部分退市整理品种板块归属字段是空的函数返回空串主图上表现为标签后面直接跟下一行。这不是公式坏了是数据本身没有。如果一定想在这种情况显示占位符可以用字符串判空逻辑包一层不过相关函数在不同版本里支持程度不一先在公式编辑器里编译试一次再决定用哪种写法。三是刷新时机。板块归属会随行业调整、地域调整而变客户端里下载一次完整的板块数据之后跨版本升级或者长期不开机字段可能对不上表现出来就是「某只票以前有行业现在空了」。3.2 EXTERNSTR(N,M) 的两个参数怎么理解EXTERNSTR 是这份源码里唯一读外部数据的地方语法是EXTERNSTR(N, M);第一个参数 N 一般写 0表示取当前品种所在的扩展数据组第二个参数 M 是字段序号对应你在客户端自定义数据里定义的列顺序。它的匹配键是品种代码也就是按股票代码去外部数据表里查这一行然后把第 M 列取出来。这里有两个硬性前提。第一外部数据的类型必须是字符串如果导入时选了数值型EXTERNSTR 取不到任何东西返回空串主图上就是一片空白。第二M 必须和你的数据表列顺序严格对齐。源码作者用了 M2 读主营、M3 读概念、M4 读主题概念这套编号只对「他自己那张表」成立。换一张别人整理的表列顺序一变M2 可能取出来的是概念主营被挤到 M3 去。这是这份源码移植后最常翻车的地方比语法错误隐蔽得多。3.3 给概念和主营准备一份能被引用的外部数据常见做法是走客户端自带的数据导入入口把一份文本表加载成字符串型自定义数据。表的结构按「代码 若干字符串列」组织字段之间用空格或制表符分隔{external.txt第一列代码后面依次为概念、主营、主题概念} 600519 白酒 茅台酒及系列酒的生产与销售 消费升级 000858 白酒 白酒的生产与销售 高端消费 300750 锂电池 动力电池系统研发制造 新能源车 002594 新能源车 汽车及电池业务 整车出口导入之后有一步必须做的校验把 1 到 4 号字段全部打印出来看哪一列落在哪个位置再回填到正式公式里。校验代码临时贴进主图叠加指标就行看完删掉。{字段探针一次性把 1~4 号外部字段打在右侧空白区} DRAWTEXT_FIX(1,0.62,0.00,0,EXTERNSTR(0,1)),COLORWHITE; DRAWTEXT_FIX(1,0.62,0.04,0,EXTERNSTR(0,2)),COLORWHITE; DRAWTEXT_FIX(1,0.62,0.08,0,EXTERNSTR(0,3)),COLORWHITE; DRAWTEXT_FIX(1,0.62,0.12,0,EXTERNSTR(0,4)),COLORWHITE;参数说明上X0.62 是故意把探针放到右侧避免和左上角正排标签撞位四条都用 COLORWHITE先排除颜色干扰只看文本内容。跑完之后对照哪一号位置出现「茅台酒及系列酒的生产与销售」主营就该用哪个 M哪一号出现「白酒」概念就用哪个 M。整个替换过程只动数字不动结构。外部数据还有个维护节奏的问题。概念和主营业务不是每天变的但新股上市、资产重组、更名会带来增删比较省事的做法是保持一个自己的主表按月更新一次再整体导入而不是每天增量补。导入前把重复代码去重重复行会让取值结果不确定。4. STICKLINE 重绘 K 线多层描边做出渐变实体4.1 STICKLINE 的六个参数源码后半段用二十来条 STICKLINE 重新画了一遍 K 线这是主图叠加类指标里很典型的做法——不用系统自带的红绿柱自己控制宽度和颜色。签名如下STICKLINE(COND, PRICE1, PRICE2, WIDTH, EMPTY);参数含义源码中的用法COND绘制条件CO画阳线CO画阴线PRICE1一端价格阳线用 C 到 O影线用 H 到 LPRICE2另一端价格同上WIDTH柱体宽度3.4 / 3.0 / 2.4 … 0.6逐级递减EMPTY填充方式0 实心1 空心WIDTH 取 0 时画的是细线不产生柱体宽度源码里画上下影线的那两条就用了 0。这个参数支持小数不同版本的像素换算不完全一样所以 3.4 在有的人机器上看起来偏粗在有的人机器上刚刚好按自己的分辨率微调即可。4.2 宽度递减加亮度递增形成边缘深、中心亮的描边阳线部分的写法值得细看宽度从 3.4 一路收到 0.6颜色从 COLOR0000AA 走到 COLOR0000FF。按第 2 章说的 BGR 规则解一下COLOR0000AA 是红通道 0xAA170 的暗蓝COLOR0000FF 是红通道 255 的亮蓝也就是说这七层不是七种颜色而是同一色相由暗到亮的七级台阶。{阳线实体先画宽的暗色打底再逐层用更窄更亮的条覆盖} STICKLINE(CO,C,O,3.4,0),COLOR0000AA; STICKLINE(CO,C,O,3.0,0),COLOR0000BB; STICKLINE(CO,C,O,2.4,0),COLOR0000CC; STICKLINE(CO,C,O,2.0,0),COLOR0000DD; STICKLINE(CO,C,O,1.6,0),COLOR0000EE; STICKLINE(CO,C,O,1.2,0),COLOR0000FF; STICKLINE(CO,C,O,0.6,0),COLOR0000FF; STICKLINE(CO,H,L,0,0),COLORRED;逻辑说明通达信按语句先后顺序绘制后写的盖在先写的上面。最宽最暗的 3.4 在底层被后面一层层更窄更亮的柱体压住最后只在左右两侧露出一圈暗边中间留给最亮的 0.6视觉上就是一根带立体描边的实体。影线放在最后单独画宽度 0不参与这套叠加。参数怎么改宽度之间的差值保持在 0.4 左右最舒服差太大会变成一圈圈同心环看着脏差太小则各层几乎重合看不出渐变。颜色步长控制在 0x11 上下跨度再大就会给人「两种颜色拼起来」的感觉。阴线那组同理COLORAAAA00 到 COLORFFFF00 是青通道和绿通道同步递增最终落到 COLORFFFF00按 BGR 解出来是 R0、G255、B255 的青色并不是很多人以为的黄色——想要黄色应该写 COLOR00FFFF。现象原因处理K 线两侧露出一条系统色细边自绘宽度小于系统 K 线宽度隐藏系统 K 线或加大整组宽度实体看不出渐变宽度差或颜色步长太小宽度差保持 0.4颜色步长 0x11阴线显示成青色而非黄色BGR 编码下 COLORFFFF00 是青改写成 COLOR00FFFF4.3 主图叠加的图层顺序与系统 K 线冲突把公式属性设成「主图叠加」之后通达信并不会自动把系统 K 线撤掉它是画在你自绘 K 线的底层。只要自绘宽度比系统 K 线略窄两侧就会各露出一条原始颜色的边看起来像描边错位。常见做法是进入主图设置把系统 K 线隐藏让自绘的 STICKLINE 独自承担显示想省事也可以在公式里用 DRAWKLINE 自己画一套宽度完全可控。还有一处层级关系需要注意DRAWTEXT_FIX 用的是窗口坐标属于独立图层一般不会被 K 线实体盖住但如果把 FIX 换成了 DRAWTEXT文字锚在 K 线上宽幅自绘实体会直接压上去。这份源码全程用 FIX在这点上是对的不要为了「跟着 K 线走」去改函数。5. 参数微调与报错对照把这份主图指标改到能用5.1 行距、锚点和分辨率漂移Y 值 0.04 的问题是随窗口高度缩水改成 0.055 之后即使在 500 像素高的窗口里也能保证四行不叠字。X 方向建议把标签列和取值列的间距拉到 0.10 以上长主营文本宁可换行也不要横向溢出。改完的版本如下{调优版行距 0.055颜色按 BGR 校正标签与取值间隔 0.10} DRAWTEXT_FIX(1,0.00,0.000,0,行业),COLOR2F97FF; DRAWTEXT_FIX(1,0.10,0.000,0,HYBLOCK),COLOR2F97FF; DRAWTEXT_FIX(1,0.00,0.055,0,地区),COLORFAA634; DRAWTEXT_FIX(1,0.10,0.055,0,DYBLOCK),COLORFAA634; DRAWTEXT_FIX(1,0.00,0.110,0,概念),COLOR00FFFF; DRAWTEXT_FIX(1,0.10,0.110,0,EXTERNSTR(0,3)),COLOR00FFFF; DRAWTEXT_FIX(1,0.00,0.165,0,主营),COLORFF60FF; DRAWTEXT_FIX(1,0.10,0.165,0,EXTERNSTR(0,2)),COLORFF60FF;顺手提一个判空的变通写法某些版本支持直接对字符串做相等比较把 HYBLOCK 和空串比对之后用 IF 输出「--」不支持的话编译会报错删掉这一段即可别在判空上耗太多时间。5.2 高频报错与定位顺序报错或现象定位方向处理未知的标识符指向概念类函数客户端版本不支持该内置函数回落成 EXTERNSTR 读外部数据EXTERNSTR 全部返回空数据没导入 / 类型不是字符串 / 代码不匹配用探针代码把 1~4 号字段全打一遍编译通过但主图没有文字公式属性没设成主图叠加在公式管理器里改属性后重新加载文字只在部分股票出现该品种本身没有板块归属次新股、指数、ETF 属正常颜色和注释对不上BGR 与 RGB 顺序写反按蓝绿红三段倒排重写六位值概念一栏取出的是主营外部数据列顺序与公式 M 不对应调整导入表的列顺序或改 M排查顺序建议从外到内先看公式属性是不是主图叠加再看 EXTERNSTR 有没有数据最后才怀疑颜色和坐标。这三步能覆盖九成以上的「不显示」问题。另外整段公式调好之后记得在公式管理器里保存成主图叠加类型并把当前画面存成版面文件切换股票时就不用每次重新设置图层和系统 K 线的显示状态。不同行业想用不同颜色区分时可以用条件判断包一层 IF 给 COLOR 分支具体字符串比较函数的支持情况各版本不一先在编辑器里编译验证一次再铺开写。本文还有配套的精品资源点击获取
返回列表