资讯动态

通达信逐笔成交额可视化指标详解:从BUYVOL到DRAWRECTREL

发布时间:2026/9/18 22:10:47 来源:尧图企业网站定制
简介通达信可视逐笔成交金额成交额型指标公式源码DOC文档是一份面向股民、技术分析爱好者及通达信自定义指标开发者的教程资源重点解决如何基于盘口逐笔成交额构建可视化监控指标、看清买卖力量对比的问题适合短线交易者或对资金流向敏感的量化爱好者。资源为1个DOC文件压缩包大小约206KB内含指标设计思路、参数说明和完整源码无需额外依赖即可直接查阅下载后可按文档指引快速部署到通达信软件中。目前已有1864人学习下载说明其在实战看盘场景下具备一定参考价值。文档不仅解释现手买、现手卖、合计、差值的计算逻辑还说明灰色区域70%的可视化设计、纯单边交易时彩条突破灰色区的正常现象以及即时数据与系统AMOUNT函数存在0%-2%差异的注意事项用户可直接将源码粘贴至通达信常用主图指标在主图右下角实时查看逐笔成交金额的彩色条带与买卖百分比降低盘口数据解读门槛。同时文档还交代了主图、副图两种使用方式的差异帮助用户选择更合理的展示位置避免因使用不当而影响看盘效果。1. 别把逐笔成交额和 AMOUNT 混为一谈这个指标到底在算什么盘口里最容易被忽略的数据不是成交量而是逐笔成交金额。通达信的 BUYVOL 和 SELLVOL 记录主动买、主动卖的手数DYNAINFO(7) 是实时现价把它们乘起来换算成万元就得到了当前这一笔的买卖金额。这个指标没有用 AMOUNT 那种全天累计口径而是把这些逐笔金额实时压缩进一个彩条画在主图右下角。原作者说“纯属折腾自娱自乐”但拆完代码后你会发现它其实是一个很好的绘图函数教学样本用 DRAWRECTREL 做可视化用 DRAWTEXT_FIX 做数字标注。适合的人群很明确做短线、分时盯盘以及想搞懂通达信绘图函数的开发者。它和常见的主力追踪分时指标源码不同那些指标偏重位置标记这个是纯金额可视化。2. 逐句拆解公式BUYVOL、DYNAINFO(7) 与数据口径先看最核心的源码现手买:BUYVOL*DYNAINFO(7)*100/10000 COLOR0000FF,NODRAW; 现手卖:SELLVOL*DYNAINFO(7)*100/10000 COLOR00FF00,NODRAW; 合:ABS(现手买)ABS(现手卖)COLOR80FFFF,NODRAW; 差:ABS(现手买)ABS(现手卖)COLOR80FFFF,NODRAW; MPB1:ABS(现手买)/合*100; MPB2:ABS(现手卖)/合*100; TESTSKIP(NOT(现手买 OR 现手卖 OR 合 OR 差 OR MPB1 OR MPB2)!0);2.1 从“手”到“万元”的换算通达信里 BUYVOL 的单位是手1 手等于 100 股。DYNAINFO(7) 返回当前现价单位是元因此BUYVOL*DYNAINFO(7)*100/10000的完整推导是先乘 100 把“手”换成“股”再乘现价得到“元”最后除 10000 得到“万元”。举个例子100 手主动买单、现价 10 元计算结果就是 100×10×100/10000 10 万元。作者在变量名上写“现手买”实际含义是“当前逐笔主动买入金额折算为万元”不要把它当成传统意义上的“当前手数”。各函数口径如下函数/变量类型单位说明BUYVOL盘口函数手当前逐笔主动买入成交量SELLVOL盘口函数手当前逐笔主动卖出成交量DYNAINFO(7)动态行情函数元实时现价现手买自定义变量万元BUYVOL×现价×100/10000现手卖自定义变量万元SELLVOL×现价×100/10000合自定义变量万元买卖金额绝对值之和MPB1/MPB2自定义变量%买入/卖出金额占总金额的百分比颜色和 NODRAW 的写法很容易被跳过。COLOR0000FF,NODRAW里COLOR0000FF 按通达信 BBGGRR 规则是红色NODRAW 表示不把这条变量曲线画出来。也就是说现手买这个中间量平时是隐藏的只在后续 DRAWRECTREL 里参与计算。调试时把 NODRAW 临时删掉就能在图上看到一条实时更新的红色买入金额曲线确认数据源没问题后再加回去。2.2 为什么用 ABS 而不是直接相加初次看代码可能会觉得ABS(现手买)多余毕竟买入金额不可能是负数。但实际盘口在跨交易时段或者数据回补时通达信的 BUYVOL/SELLVOL 偶尔会返回负值。如果不用 ABS现手买变成 -50MPB1 就会算成负数后面 DRAWRECTREL 的坐标790现手买*210/合会向左侧延伸彩色条方向直接反转视觉上就变成“买入越多红条越短”。这里 ABS 起到的不是数学上的必然作用而是防呆屏障保证 MPB1/MPB2 永远落在 0100 之间。原作者把合也写成 ABS 的原因同样如此即使买卖两边一正一负合仍然是正数比例计算不会被异常值带偏。2.3 TESTSKIP 与除零保护TESTSKIP(NOT(现手买 OR 现手卖 OR 合 OR 差 OR MPB1 OR MPB2)!0)这行被很多人直接复制但从没搞懂。通达信的 TESTSKIP 表示当括号内条件为真就跳过后续的绘图语句直到下一个绘图函数。这里NOT(...)!0等价于NOT(...)1也就是当括号内所有变量都为 0 时条件成立跳过绘制。集合竞价刚结束、停牌状态、或者分笔数据还没推送时现手买和现手卖确实会同时为 0此时合0MPB1 0/0 就是无效计算。没有这行保护DRAWRECTREL 会把不合法的坐标传进去轻则彩条消失重则公式直接报“除数为零”。更简洁的写法是TESTSKIP(合0)效果一样。原作者把六个变量列全可能是想让条件覆盖更极端情况实际执行起来只看合是否为零就够了。注意 TESTSKIP 的位置必须在所有 DRAW 语句之前如果放到后面通达信会先执行除法再看到 TESTSKIP照样报错。另外源码里“差”的定义和“合”完全一致后文也没有使用我猜是作者最初想画一个双向差额条后来改成占比方式后留下的死代码。删掉它不影响运行保留它也没有绘制开销。2.4 实时行情函数的边界历史 K 线没有数据这一点作者在说明里没写但实际使用中很容易踩DYNAINFO(7)、BUYVOL、SELLVOL 都是实时动态行情函数它们只对最新一根 K 线有值。把指标加载到 K 线图上后往前翻历史会看到灰色区一直空着彩条只在当前时刻出现。这不是公式坏了而是通达信普通公式拿不到历史盘口逐笔数据。想复盘历史逐笔只能靠 Level-2 分笔数据回放和这个指标无关。所以这个指标适合盯当前盘口不适合做历史回测。3. 可视化坐标系统DRAWRECTREL 的绘图逻辑接下来这段是整个指标最精彩的部分DRAWRECTREL(640,940,940,1000,RGB(128,128,128)); DRAWRECTREL(790-现手卖*210/合,940,790,1000,RGB(0,128,0)); DRAWRECTREL(790,940,790现手买*210/合,1000,RGB(128,0,0)); DRAWRECTREL(789.8,940,790.2,1000,RGB(0,0,10)); DRAWRECTREL(639.8,940,640.2,1000,RGB(0,0,10)); DRAWRECTREL(939.8,940,940.2,1000,RGB(0,0,10)); DRAWRECTREL(0,940,1000,940.2,RGB(0,0,10));3.1 相对坐标 0-1000 是怎么映射的DRAWRECTREL 的坐标范围是 01000横纵方向都按整个绘图区等比缩放。函数签名是 DRAWRECTREL(x1,y1,x2,y2,color)x1,y1 是左上角x2,y2 是右下角。原作者把 y 固定为 9401000所以所有矩形都堆在窗口底部x 从 640 到 940 是灰色背景条中心位置在 790。这个函数和 DRAWRECT 的区别在于DRAWRECT 使用像素级绝对坐标窗口大小一变位置就错位DRAWRECTREL 使用 01000 的相对坐标无论主图窗口怎么拉伸矩形都能保持相同的显示位置。这也是指标能稳定显示在主图右下角的根本原因。如果你把同类函数换掉比如用 DRAWRECT(100,940,200,1000) 去画在 1980 分辨率下看着正常切到笔记本 1366 分辨率就会整体偏移这就是量化指标公式源码里最常见的位置漂移问题。3.2 灰色区与 70% 行程的换算关系原作者说明里写“灰色区长度设置为 70%”很多人看到代码会疑惑灰色区从 640 到 940宽度 300 个相对单位明显不是整个可视区的 70%。实际上 70% 指的是彩条最大行程占灰色区总宽的比例。买卖彩条以 790 为中心最大单侧行程是 210 个相对单位来自现手卖*210/合中系数 210灰色区总宽 300210/300 正好等于 70%。这样设计等于在彩条两侧留出了 30% 的余量只有当买占比或卖占比超过 150/210≈71.4% 时彩条才会顶破灰区边界。几个元素的位置关系如下元素x 范围宽度/作用灰色背景640940300 单位限制条带活动范围卖出彩条790-现手卖×210/合 到 790单侧最长 210绿色买入彩条790 到 790现手买×210/合单侧最长 210红色中心分割线789.8790.20.4 单位细线底部外框线010001000 宽度定位线中间那些 789.8、640.2 的坐标不是手误而是作者故意把矩形宽度压到 0.4 个相对单位用来画细线边框。底部的DRAWRECTREL(0,940,1000,940.2,...)是整条基准线让红绿颜色条不至于悬空。3.3 买卖彩条的动态偏移逻辑卖出彩条从790-现手卖*210/合画到 790买入彩条从 790 画到790现手买*210/合。注意它用的是占比而不是绝对金额。假设现手买 1000 万元、现手卖 200 万元合为 1200 万元那么买入彩条长度是 210×1000/1200175卖出是 210×200/120035红条是绿条的 5 倍。如果直接用绝对金额画条在涨停大单出现时绿条早就被压成一条线动态范围完全被大单占据改用占比例后彩条长度永远在 0210 之间小单变化不会淹没在大单的阴影里。这就是原作者把宽度乘 210 再除合的原因。3.4 DRAWTEXT_FIX 文字标注的坐标设计文字部分单独看可能比矩形更容易被忽略DRAWTEXT_FIX(1,0.9,0.88,0,STRCAT(STRCAT(,CON2STR(现手买,1)),万)),COLOR0000FF; DRAWTEXT_FIX(1,0.61,0.88,0,STRCAT(STRCAT(,CON2STR(现手卖,1)),万)),COLOR00FF00; DRAWTEXT_FIX(1,0.755,0.88,0,STRCAT(STRCAT(,CON2STR(合,1)),万)),COLOR0080FF; DRAWTEXT_FIX(1,0.58,0.97,0,STRCAT(STRCAT( ,CON2STR(MPB2,1)),%%)),COLORYELLOW; DRAWTEXT_FIX(1,0.94,0.97,0,STRCAT(STRCAT(,CON2STR(MPB1,1)),%%)),COLORYELLOW;DRAWTEXT_FIX 的参数是 (COND,X,Y,TYPE,TEXT)COND1 表示无条件绘制X/Y 是相对窗口的百分比坐标0.9 是水平 90%0.88 是垂直 88% 的位置TYPE0 表示左对齐。红色文字显示买入金额单位万绿色显示卖出金额黄色显示买卖占比。STRCAT 拼接字符串CON2STR(数值,1) 把数值转为保留 1 位小数的文本。原作者把买卖金额文字放在 0.9 和 0.61 两个水平位置正好贴着灰色区左右两侧占比文字放在 0.97 的底部避免和金额文字重叠。有一个小坑DRAWTEXT_FIX 的文字字号是固定的窗口缩得很小或者系统字体放得很大时文字会互相叠加。我一般会保留买卖金额和买占比、卖占比四个文字把“合”的显示删掉因为合就是两个金额相加盯盘时心算就行。4. 实战从公式管理器到主图叠加4.1 新建公式与命名坑通达信公式管理器入口是 CtrlF也可以从菜单“功能 → 公式系统 → 公式管理器”打开。新建时选择“技术指标公式”公式名称建议用字母加数字比如 VJAMT不要用中文名称。原因是通达信在叠加多个主图指标时中文名称偶尔会造成列表刷新异常字母数字最稳妥。如果你拿到的是 .tn6 导出文件也需要先在公式管理器里导入再“导出公式”为 txt才能看到可编辑的纯文本源码。这和修改 MACD 指标公式图的流程一样系统自带指标是加密的直接编辑不了必须另存一个新名称再改。源码粘贴后注意公式类型要选“主图指标”。如果选成“副图指标”指标会出现在独立的子窗格里效果会差很多原作者说的“若作副图使用显示位置不佳”正是这个原因。你可以在主图右键选择“选择主图指标”把 VJAMT 叠加到当前主图上它就会画在主图右下角不干扰 K 线。4.2 副图显示位置不佳的根源为什么副图不行回到 DRAWRECTREL 的坐标系整个指标窗格高度被映射成 01000主图窗口高度大灰条会有足够的竖向占比副图窗口高度常只有主图的 1/3同样的 9401000 映射后矩形厚度只占副图高度的 6%看起来就是一条几乎看不见的细线。DRAWTEXT_FIX 的 Y 坐标 0.88 在副图里也容易和 MACD、KDJ 的标签重叠。换句话说不是代码有 bug而是这套坐标设计本来就假设了高窗格。如果你坚持要在副图使用可以把 y1/y2 从 940/1000 改成 100/900灰条会变成竖在主窗格里但文字布局也要跟着调工作量不值。4.3 验证数据差异逐笔金额与 AMOUNT 对账作者说明里提到即时逐笔数据和系统 AMOUNT 函数统计的数据差异大概在 0.xx%2% 之间。要验证这个差异公式末尾可以临时加一行差异比: (现手买现手卖)/(AMOUNT/10000)*100; DRAWTEXT_FIX(1,0.3,0.88,0,STRCAT(逐笔/AMOUNT:,CON2STR(差异比,2))),COLORWHITE;AMOUNT 是通达信内置的累计成交额函数单位是元所以先除 10000 换成万元再用逐笔买卖金额之和去除。如果差异比长时间在 98% 以下说明行情源推送的 Level-1 快照可能缺漏或者标的当天有特殊成交方式。正常情况下0.0x%2% 的差异来自逐笔快照无法归类的“不明成交”这是 Level-1 数据本身的限制不是计算错误。这段调试代码在确认完差异后建议删掉不然主图上多一行白色文字反而干扰盯盘。4.4 常见错误与排查方法跑这个公式最容易遇到的问题我整理成一个清单现象可能原因处理方法提示“除数为零”合为 0 时计算 MPB1/MPB2确认 TESTSKIP 在除法之前提示“未知标识符”变量名与系统保留字冲突换成带前缀的名字如 VJBUY彩条方向反了现手买/卖出现负值且 ABS 被删恢复所有 ABS 取绝对值文字不显示DRAWTEXT_FIX 条件为 0把条件参数设为 1副图高度太矮公式被定义为副图指标重新选择“主图指标”历史 K 线无内容实时行情函数无法回放属于正常现象看最新 K 线即可其中“未知标识符”最容易出现在复制粘贴场景。比如把公式粘贴到已存在同名变量的指标里通达信会静默覆盖原值导致后面引用的是别的变量。常见做法是给所有自定义变量加统一前缀例如 VJBUY、VJSELL、VJSUM这样哪怕和别的指标叠加命名空间也不会冲突。4.5 盯盘时的数据刷新节奏这个指标的刷新只受行情推送控制。在连续竞价阶段每笔成交都会触发 BUYVOL/SELLVOL 更新彩条肉眼可见地伸缩到了中午休市或晚间数据停更矩形停在上一次的值。不用担心它影响指标计算性能DRAW 函数在实时刷新时的开销很小主图叠加三四个这种指标也不会卡顿。5. 一个高阶改法参数化灰区宽度并加入单边变色5.1 参数化改造原公式里 210 和 150 都是写死的。想调节灵敏度可以把它们提取成两个变量最大行程:210; 灰区半宽:最大行程/1.4; 现手买:BUYVOL*DYNAINFO(7)*100/10000; 现手卖:SELLVOL*DYNAINFO(7)*100/10000; 合:ABS(现手买)ABS(现手卖); TESTSKIP(合0); DRAWRECTREL(790-灰区半宽,940,790灰区半宽,1000,RGB(128,128,128)); DRAWRECTREL(790-现手卖*最大行程/合,940,790,1000,RGB(0,128,0)); DRAWRECTREL(790,940,790现手买*最大行程/合,1000,RGB(128,0,0));灰区半宽 最大行程/1.4 这个公式的来源是彩条最大长度占灰区总宽的 70%所以灰区总宽 最大行程/0.7半宽再除 2得到最大行程/1.4。原参数最大行程 210灰区半宽 150如果你嫌突破灰区太频繁把最大行程改成 300灰区半宽就是 214彩条基本不会越界但占比变化 1% 时彩条位移只有 3 个相对单位肉眼很难察觉。这个参数就是灵敏度和溢出之间的矛盾按盯盘偏好调。5.2 加入单边变色提示单边行情下彩条突破灰区是一个信号但只靠长度变化有时不够醒目。可以给买入彩条加一个条件颜色买入色:IF(MPB160,RGB(255,255,0),RGB(128,0,0)); DRAWRECTREL(790,940,790现手买*210/合,1000,买入色);当买入占比超过 60% 时彩条从暗红色变成亮黄色。这里用 IF 做颜色分支通达信允许 RGB 函数作为颜色返回值。同理卖出占比超过 60% 时也可以让绿色条变成亮蓝色。只改颜色不改坐标单边信号会直观很多。5.3 放进分时图我建议把这个指标叠加到分时图主图上使用。分时图的数据刷新比日线 K 线更频繁逐笔金额的变化在分时图上直接对应价格波动彩条和价格曲线几乎同步伸缩。具体操作是打开个股分时图右键空白处选择“选择主图指标”把新建的 VJAMT 放进去。分时图本身也是主图类型所以指标不需要调整坐标参数。很多主力追踪分时指标源码就是同样的思路主图叠加 底部状态条只不过把买卖金额换成了大单净量。这类看盘辅助指标不适合做选股公式因为 BUYVOL/SELLVOL 是实时快照选股回测无法复现历史逐笔把它当作盘口增强工具就好。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价