把「连续缩量」写成条件之后,选出来的位置比想象中多得多:停牌日、数据缺失的位置、以及刚除权的品种都被算了进来。原因不在条件写错,而在「成交量比上一根小」这个判断本身会把这些位置一并算作成立。通达信连续缩量公式要处理的正是这一类位置。
下面按「怎么定义、逐根比较、区间递减、用哪个量、失效与核对」的顺序讲。全文只讲条件的写法与数据口径,不涉及任何品种判断。文中函数名与字段单位以通达信金融终端为参照,不同版本的字段单位可能存在差异。
一、连续缩量要先把「连续」定下来
通达信连续缩量公式里,「缩量」是一个两两比较的结果:本根的成交量小于上一根。加上「连续」两个字之后,需要补一个长度:连续多少根。这个长度是公式里的一个参数,写死与留成参数,后续核对的方式不同。
{ 定义的三个组成部分 }
① 比较对象:本根与上一根的成交量
② 比较方向:本根小于上一根
③ 连续长度:连续多少根都满足这个方向
{ 缺了第三项,条件只描述两根之间的关系 }
长度取值决定了输出的密度。长度取 2 与取 5,命中的位置数量相差明显,而两者的写法只差一个参数。把长度作为参数留出来,后续调整时不必改动条件的主体部分。
长度作为参数留出来之后,公式里的长数值集中在一处,改动时不必通读全文。另一项需要定下来的是比较的严格程度:本根小于上一根,与小于或等于,在平量位置的结果不同。平量在真实数据里存在,条件采用哪一种,需要在说明里注明。
二、逐根比较的写法
逐根比较把每一根与它前一根比一遍,得到一个成立与否的序列,再用连续函数把序列压成一个判断。写法上有两种表达,效果相同。
{ 两种等效写法 }
写法一:连续函数(本根小于前一根,长度 N)
写法二:计数函数(本根小于前一根,在 N 根内计数的结果等于 N)
{ 两种写法都返回一个成立与否,占用的计算方式略有差别 }
两种写法里都要用到「前一根」的引用。这个引用在序列第一根上取不到值,输出为空;空值参与比较的结果同样为空,而空值不会让连续条件成立。因此序列最左端的一小段不会命中,这是正常现象,不需要处理。
两种写法在边界上的处理略有差别。计数函数在可选根数不足设定长度的位置取不到完整的计数结果,连续函数在同样位置直接返回不成立。这个差别体现在序列左端,命中位置的起始点会相差几根。核对时把两个条件挂在同一副图,多出来的部分就是边界差异。
三、区间递减的写法
通达信连续缩量公式的另一类写法不逐根比较,而是把区间的首尾拿出来比:本根小于前一根,前一根小于再前一根,逐级写下去,直到覆盖整个长度。这种写法在长度小的时候直观,长度变大之后表达式迅速变长,改写长度需要逐条修改。
| 写法 | 适合的长度 | 改长度的代价 |
|---|---|---|
| 连续函数 | 任意长度 | 改一个参数 |
| 逐级比较 | 2 到 4 根 | 需要增删比较项 |
| 首尾比较 | 不适用 | 无法保证中间不反弹 |
表里第三行需要说明。只比较区间首尾的成交量,中间的根可以上下波动,结果与「连续递减」的含义不符。这种写法在长度较长时看起来简洁,实际上放宽了条件。核对办法是把首尾写法的输出与连续函数的输出挂在同一副图,两个条件的命中位置之间多出来的部分,就是中间存在反弹的位置。
长度在三根以内时两种写法的表达式长度接近,选择哪一种对维护的影响不大;长度超过四根之后,逐级比较的表达式明显变长,改长度需要逐处调整。以维护成本作为选择标准就够了。
四、用成交量还是成交额
成交量与成交额是两个不同的字段,前者按数量计,后者按金额计。价格变动幅度较大时,两者的变化方向可能不一致:成交量减少而成交额增加,或者相反。用哪一个,取决于要描述的是参与的数量还是参与的资金规模。
{ 两个字段的关系 }
成交额 ÷ 成交量 = 每手对应的金额
换算成每股均价需要再除以 100
{ 这个倍数关系在核对字段时要用到,取值以所用版本的字段单位为准 }
把两个字段混用会带来一个隐蔽的问题:公式里写的是成交量,说明文字里说的是资金规模,两者对不上。条件本身不会报错,核对时却解释不通。做法是在公式的注释里写清使用的是哪一个字段,以及与另一个字段的换算关系。
两个字段也可以同时使用:以成交量为主要判断,以成交额做一次交叉验证。两者方向一致时结果更明确,方向不一致时说明价格与数量在这段区间里的变化不同步。这种用法不改变条件本身,只是多了一道核对。
五、失效场景与核对
通达信连续缩量公式会在下面几类位置给出与预期不符的结果,逐条看一遍比逐条改条件省事。
- 停牌与数据缺失。这些位置的成交量为 0,与上一根相比数值更小,会被判为缩量成立。做法是在条件里加一句成交量大于 0 的前置判断。
- 上市初期。可用的历史数据不足设定的长度,条件在左端取不到足够的上一根,命中位置天然缺失。
- 送转除权前后。股本发生变化,成交量的口径在除权位置出现跳变,判定连续递减时应避开这个位置。
- 极小的成交量。数值本身很小的时候,两根之间的差异也很小,判定结果对数据精度更敏感。需要区分「确定性缩小」与「同量级波动」时,可以加上相对变化的幅度条件。
这几类位置的处理方式可以统一成一句前置条件:成交量大于 0、历史长度足够、且不处在除权位置上。把这句前置条件写在判断之前,后面几项的排查就不必逐条重复做。
核对的做法是找一个命中位置,把成交量、前一根成交量与判断结果三样并排输出到副图,逐根对照。三样对上之后,再换一个未命中的位置对照一次,确认条件没有放宽。
核对过一次之后,把命中的长度、使用的字段与前置条件一并写进公式注释。三项都在注释里,下一次调整长度时不必重新推一遍。
写到这里可以回头看一眼开头那个现象:判断「缩量」只是一次两两比较,而判断「连续缩量」需要同时说明长度与排除条件。如果只写了长度而没有说明哪些位置不参与判断,那么条件命中的到底是成交量的变化,还是数据本身的缺口?相关写法可以对照 量价形态与信号拆解 一栏里其他量价条件的拆解方式,异常值的处理可以看 公式报错与卡顿排查 一栏。
文中函数用法、字段含义与单位换算口径以通达信金融终端为参照;不同版本与券商定制版的成交量字段单位、复权处理方式及可用连续函数可能存在差异,请以你所用版本公式编辑器内的函数说明与行情列表中的实际字段为准。
