打开公式准备标缺口,标记撒了满屏,图上每一段都有符号。出现这种情况的原因,是判定条件里只比较了相邻两根的一部分区间,或者回溯范围给得太宽,把普通的隔日跳空也当成缺口算进去了。通达信缺口公式写法的关键不在比较本身,而在比较哪两段、回溯多少根。
下面把判定条件、参数影响、回补处理与几类会被误判的行情按顺序讲清。全文只讲区间关系的量化表达与取值口径,不作任何判断,也不涉及具体品种。文中函数名以通达信金融终端为参照,可在编辑器内查询核对。
一、缺口是两段区间之间空出来的一段
缺口指的是相邻两个周期之间,价格区间没有重叠的部分。向上缺口是当前这一根的最低价高于前一根的最高价,中间空出一段;向下缺口是当前这一根的最高价低于前一根的最低价。判定只看四个端点,与实体无关。
{ 缺口的两种情形 }
向上缺口:
LOW > REF(HIGH,1)
向下缺口:
HIGH < REF(LOW,1)
{ 用 > 与 < 而不是 >= 与 <= :
端点相等时区间相连,中间没有空出来 }
不等号的选择会直接影响标记数量。用大于等于来比较,两端刚好衔接到同一价位的 K 线也会被计入,标记因此变密。缺口要表达的是「中间空出来」,两个区间至少要在某个价格上不相接,所以用严格不等。
二、写法按需要分三种
第一种是最直接的相邻比较,只判定当前与前一根之间有没有空档。第二种带一个回溯范围,判定当前这一根与前若干根形成的区间之间是否有空档。第三种在判定之后再做一次过滤,把空档幅度太小的位置剔掉。三种做法的严格程度依次递增。
{ 写法一:相邻比较 }
K1:=LOW-REF(HIGH,1); { 向上空档的宽度 }
K2:=HIGH-REF(LOW,1); { 向下空档的宽度 }
向缺口:IF(K1>0,1,0);
下缺口:IF(K2<0,1,0);
三、回溯多少根,是一件事先定下来的事
回溯范围在这类通达信缺口公式写法里是最需要先定下来的参数。给 1 表示只看相邻两根,给 3 表示当前这一根要与前 3 根的整体区间比较。范围越大,被判定为缺口的位置越多,因为比较的区间被拉长之后更容易出现不重叠。这不是写法错误,而是同一段价格序列在不同尺度下的自然结果。
| 回溯范围 | 比较对象 | 标记密度 |
|---|---|---|
| 1 | 当前与前一根 | 稀疏,只标相邻空档 |
| 3 至 5 | 当前与一小段区间 | 中等,含小幅跳空 |
| 10 以上 | 当前与较长区间 | 密集,含趋势中的持续空档 |
把范围写进参数表而不是写在源码里,后续调整不必改公式。参数表里给一个默认值,挂到图上之后可以按品种逐个调,调的时候注意一件事:已经挂在图上的实例不会因为你改了参数表而改变,它们仍然用挂上去那一刻的取值。
把回溯范围做成参数,还有一个附带好处:同一个公式挂在不同品种上时,各自的取值互不影响。这一点在复盘时省事,不必为每个品种单独复制一份公式。通达信缺口公式写法里需要定下来的参数只有这一个,其余的都在写法本身。
四、回补的判定
缺口出现之后价格是否会回到空档区间里,是另一件事。判定办法是看后续某一根的低点是否向下进入了向上缺口的区间,或者高点是否向上进入了向下缺口的区间。写的时候要用当时的缺口位置作为参照,而不是当前的价格区间。
{ 向上缺口是否被回补 }
GAP:=REF(HIGH,1); { 缺口下沿参照 }
N1:=BARSLAST(LOW>REF(HIGH,1)); { 距最近向上缺口的根数 }
回补:IF(N1>0 AND LOW<REF(HIGH,N1),1,0);
回补判定要在缺口成立之后再往后看,因此存在一个时序问题:缺口的成立与回补的成立不在同一根上,把两者写在同一行里判断,会得到同时成立的矛盾结果。把两个条件分开输出,各自标在图上,关系更清楚。
回补判定还有一个细节是部分回补。价格进入空档区间但没有走完,这种情况在图上表现为标记出现后价格停在中途。部分回补与完全回补是两种不同的状态,记录里只写「是否回补」时,这一类位置会被归到其中一边而看不出差别。记录时多写一列价格位置,能把两者分开。
五、几类会被误判的行情
第一类是除权。除权当天价格按比例跳变,两根 K 线之间会出现大幅空档,这个空档来自价格调整,不是成交形成的。处理办法是看复权设置,用前复权的数据判定,除权造成的空档部分会被抹平。
第二类是长期无成交之后恢复。停牌期间没有新的行情,复牌后第一根的区间与停牌前一根之间可能隔开很远,这在数据上是真的空档,但它与连续交易中的跳空成因不同,混在一起统计会让结果失真。
第三类是单边连续行情中的持续空档。价格连续同向移动时,每相邻两根之间都可能出现空档,这类位置的数量由行情本身的连续性决定,与公式写法无关。回溯范围给得越大,这一类位置越容易被连片标出来。
六、周期与复权会改变结论
同一段价格序列在不同周期下的缺口分布不同。日线上的空档在十五分钟线上会被若干根 K 线填满,因此日线判定出的缺口,换到分钟线上找不到对应位置。反过来,分钟线上的小幅跳空累积到日线上会被合并掉。用哪个周期的结论,就说哪个周期的话。
复权设置的影响与除权一致。前复权的数据把历史价格按除权因素调整过,调整之后两个区间的相对位置发生变化,原本不相接的两段可能变成相接。核对时把复权前后各跑一次,两边的标记差异就是除权带来的那一部分。
七、核对一处已知缺口
验证通达信缺口公式写法,挑一处肉眼能确认的缺口即可。做法是在图上找一根明显跳空的 K 线,记下日期,把前后两根的最高价与最低价抄出来,按判定条件手算一次,再看公式在这一天有没有输出标记。两种情况各找一处,向上与向下各验一次。
对得上就说明条件写对了,标记数量不合预期,问题在回溯范围与过滤条件上,改这两个地方就够了。
相关的内容可以对照着看:量价形态与信号拆解 一栏讲形态条件的量化表达,公式编写与语法函数 一栏讲引用函数与参数表的写法,回测验证与风险控制 一栏讲在历史数据上核对条件的方法。三处侧重点不同,按需要挑一处看即可。
文中函数名与参数说明以通达信金融终端为参照,函数列表与参数个数可在公式编辑器内查询核对;不同版本与券商定制版的函数支持范围、复权处理方式可能存在差异,请以你所用版本的实际输出为准。
