通达信公式区间成交量这个词,容易被当成把一段时间的量加起来就算完,动作本身没错,出问题的地方在口径。加的是哪一段、起点含不含当前根、单位是手还是股、算的是一根 K 的量还是一整段的量,这四件事不定下来,同一段行情能算出几个不同的数。下面把累计窗口、单位对齐、周期换算、与均量的对比写法、停牌与数据不足时的表现逐条说清。
本文以通达信金融终端个人版为准,公式编辑入口是 Ctrl+F 打开的公式管理器;不同版本的措辞与按钮位置可能有差异,以官方版本说明为准。
一、区间成交量的定义:窗口内的累计
区间成交量指在一个指定窗口内,把每根 K 的成交量逐根累加得到的量。窗口有两种给法:一种给定根数,从当前根往回数固定几根;另一种给定起点,从这个起点一直累加到当前根。对应到函数就是带固定根数的 SUM 与第二个参数为 0 的 SUM 两种写法。
窗口的边界要写清含不含当前根。累加类函数把当前根计入,要取到当前根之前的那一段,写法上配合 REF 或把根数减一。这一处不写明,两条都自称最近 20 根的公式能差出一根的量,量值大的品种上这个差值不小。
另一处边界是窗口内出现数据缺根。累加按根数推进,不按自然时间推进,缺根时累加的是有数据的那几根,得到的是这部分交易时间里的量。
二、通达信公式区间成交量里 SUM(V,N) 与 SUM(V,0) 的差别
通达信公式区间成交量里两种 SUM 写法的差别在窗口起点。带固定根数的写法从当前根往回数指定根数,逐根累加;第二个参数写 0 的写法,累加范围从该品种数据的起点一直延伸到当前根。两者在源码里只差一个参数,算出来的量级不在同一档。
窗口内累计(最近 N 根): 区间量N := SUM(VOL, N); 自数据起点累计: 区间量全 := SUM(VOL, 0); 对照:SUM(VOL,0) 只有在数据起点固定时结果才稳定
自起点累计有一个副作用:随着图上加载的历史越来越长,这个数的量值一直变大,它记录的是历史的总量,不是当前状态。拿它做比较,要先把它转成比值只看变化,或者把起点固定在一段明确的窗口里。做逐日对照时,前一种更能说明”这段比上一段多了多少”,后一种只能说明”历史累计到了多少”。
还有一点要落在写法上:第二个参数写 0 与写一个很大的根数,在图上加载的历史长度不变时结果接近,一旦历史加载长度变化,两者的差就出来了。需要结果可复现,就把窗口起点写成由 BARSLAST 一类函数算出的明确根数,不要把不确定的起点留在公式里。
三、通达信公式区间成交量里单位是手还是股
通达信公式区间成交量里的单位要回到数据源去确认。以通达信金融终端个人版为例,本地数据文件里的成交量按手记录,公式里输出的 VOL 沿用这个口径;接入的外部数据源有按股数提供的。把两个来源的量放进同一条公式比较,结果会相差一个固定倍数,这个倍数不会因为换参数而消失。
换算关系在公式里不写进计算,只在注释里标明:1 手对应 100 股。做量能对比时只要前后同源,比值的量纲会抵消,单位具体是手还是股不影响比值;做量值的展示与导出时要写明单位,读图的人不会把两个数量级混起来。
同名函数在不同数据源上的输出口径也可能不同。转到别的数据源之后把公式重新跑一遍,先看 VOL 的量级是否与之前接近,量级变了就是口径变了,不是公式写错了。
| 现象或提示 | 含义 | 处理 |
|---|---|---|
| 区间量与均量的数值都比预期大出一截 | 数据源给的是股数,公式按股累计 | 按 1 手等于 100 股折算,或统一换到同源数据 |
| 比值看起来正常,量值对不上 | 分母与分子同源,量纲在比值里抵消了 | 比值可以直接用,量值展示时补上单位 |
| 换了数据源之后数值量级突变 | 两个来源的成交量口径不同 | 先看 VOL 的量级,再决定是否重设参数 |
| 停牌前后的累计值出现台阶 | 累加按根数推进,跳过了无数据的时段 | 要在意自然时间口径,就单列一段把停牌段标出来 |
四、周期换算:30 分钟一根与日线一根不是同一量纲
成交量随周期切分。一天的量大致等于这一天各根分钟 K 的量之和,但单根 30 分钟 K 的量与单根日 K 的量不在同一量纲上。把日线上的区间量与 30 分钟图上的区间量放在一起比大小,等于拿一段时间与另一段不同长度的时间比,相差的倍数由根数与周期的比值决定。
要在两个周期之间比较量能,先把其中一个折算成同口径:把 30 分钟的区间量按每天的根数折成日口径,或者把两个周期各自算出的量都转成占自身均量的倍数,只在比值层面比较。前一种保留了量值,后一种更适合跨周期看形态。
折算时要用到每天有多少根 30 分钟 K 这个数。它由交易时段长度决定,遇到半日交易或临时调整时段的安排,这个数会变化,折算式要跟着改,不然折算出来的量会带一个偏差。
五、与均量对比的写法
单看区间量看不出多少东西,把它和自身的均量放一起才有参照。写法有两种:拿当前这一根的量除以近若干根的均量,或者拿这一段的累计量除以这一段自身的规模量。
两种对比写法: 单根对均量 := VOL / MA(VOL, N); 区间量 := SUM(VOL, N); 区间内规模 := MA(VOL, N) * N; 区间对均量 := 区间量 / 区间内规模; 分母为零的防护: 安全分母 := IF(MA(VOL, N) > 0, MA(VOL, N), 1);
两种写法的分母含义不同。单根除以均量,比的是当前这一根与近若干根的均值;区间累计除以规模量,比的是这一段与这一段自身的规模。要表达这一段比平时放大了多少,用后一种;要表达这一根是否偏离常态,用前一种。两者混用会得到方向相反的理解,写上注释区分开。
分母取不到有效值的情形要防一手。停牌或缺根会让均量在个别位置算不出有效结果,除以它得到的值在图上表现为断点或异常大的数。用 IF 把分母兜住,或者在画线时加判断跳过这些位置。
六、跨停牌、数据长度不足时的表现与验证方法
停牌造成的是时间上的跳空,根数上是连续的。累加照常把停牌前后的根加在一起,得到的是这部分交易时间里的量。要在意自然时间口径,就先用 BARSLAST 一类函数确认相邻两根之间的间隔,或者在公式之外把停牌段单独标记,汇总时把它们分开看。
数据长度不足的表现是前段留白:参数取的根数超过该品种在该周期上可加载的历史根数时,前面的若干根算不出值。把 K 线向左拉到尽头看留白在哪一根结束,就能判断是参数取大了还是数据太少,两者的处理方向不同。
验证按三步。第一步在公式管理器里点「测试公式」做语法检查,这一步不校验口径。第二步把公式挂到副图,选一段包含停牌与刚上市段落的行情,看留白与跳空落在哪里,与你的窗口设定是否一致。第三步换到另一个周期用同一组参数再算一遍,比较两处输出的量级与比值是否与折算关系对得上。公式文件与本地数据在安装目录的 T0002 下,区块文件在 T0002\blocknew,公式备份在 T0002\gs_bak,改版之前把这几处一并留档。
一句判断收尾:区间成交量的差别多半不在函数,而在窗口、单位、周期这三处口径;口径对齐之后,通达信公式区间成交量算出来的数才有可比较的意义。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 指标原理与参数 的其他条目,公式编写教程 里讲函数与表达式怎么组织,回测验证与风险控制 里讲口径与样本怎么定,可对照查看。
