为什么同一个突破条件,写在日线图上很安静,换到分时图上就到处都是信号?通达信分时突破公式遇到的这类问题,原因不在条件写错了,而在判据跟着周期一起变了。窗口长度、均价线的算法、当前这根是否定型,三件事在分时级别上的表现与日线不同。

下面按窗口含义、均价线算法、未定型的一根、判定用哪一侧价格以及减少误判的动作五层讲。文中函数名与字段单位为通达信客户端的通用描述,不同版本与券商定制版对分钟数据的长度、字段单位与函数参数存在差别,请以你所用客户端的帮助文档为准。

一、窗口长度换了周期就换了含义

通达信分时突破公式里写的窗口长度是一根根计数的,不是按时间计的。日线上写 20,覆盖的是 20 个交易日;把同一段算式放到 1 分钟周期上,覆盖的是 20 分钟。两个窗口覆盖的时间跨度差了两个量级,判据却没变,信号自然会长得不一样。

周期 窗口 20 覆盖的时间 窗口内包含的信息
日线 约 20 个交易日 一段中期走势的高低点
5 分钟 约 100 分钟 当日盘中一段的波动区间
1 分钟 20 分钟 很短的一段价格摆动

要让通达信分时突破公式的条件语义保住,窗口长度需要按时间跨度折算。想在分时上描述「相当于日线 20 天」的范围,就得先算出一天有多少根分钟 K 线,再按这个倍数放大窗口。折算系数与交易时段长度有关,写进公式时留一个显式的常量,方便日后调整。

二、分时均价线不是均线

分时图上那条平滑的参考线来自累计成交额与累计成交量的比值,是当日的加权平均成本;均线是收盘价的算术平均。两者的计算依据完全不同,把均线公式套在分时图上得到的曲线与图上那条参考线不是同一条。

{ 当日加权均价的计算结构 }
{ 分子是当日累计成交额,分母是当日累计成交量 }
累计额:=SUM(AMOUNT, 0);
累计量:=SUM(VOL, 0);
{ 两个字段的单位不一致,需要按字段说明换算后再相除 }
均价:=IF(累计量=0, C, 累计额/累计量/100);

最后一行里的换算系数是这一处最容易出错的地方。成交量的常用单位是手,成交额的常用单位是元,两者相除之前要统一,否则均价会比实际值大出两个数量级,任何以它为基准的比较都会失效。系数取值请以你所用客户端的字段说明为准,核对办法是把算出来的均价与图上那条线对照,偏差应当是量级上的差别而不是几个点。

除了均价线之外,分时图上还有几处参考信息容易被误当成公式算出来的结果:昨收、今开、当日最高最低,这些由客户端直接给出,不需要在公式里重新计算。判断一条曲线是自算的还是自带的,办法是看公式的输出列表里有没有它。列表里没有,说明它来自客户端,改公式不会改变它的位置。

三、盘中最后一根没有定型

行情进行中,最后一根分钟 K 线只包含已经成交的那部分数据,最高、最低、收盘都还在变。公式在每一笔新成交上重算一次,最后一根的取值就跟着变,条件在最后一根上的成立与否会反复切换。

这解释了盘中看到的信号闪动:它不是公式在乱跳,而是判据作用在一根还没有走完的 K 线上。要让信号稳定,判定要么只作用于已经走完的那些根,要么把最后一根的最低价与收盘价换成更保守的取值。

未走完的根还会影响条件内部的前后比较。判断「当前价高于前一根的最高价」时,前一根已经定型而当前根未定型,比较的两侧一静一动,含义还算清楚;如果把条件写成「当前根与前三根的平均值比较」,那三根里包含了上一根,而上一根在盘中同样未定型,比较的两侧就都在动。核对条件之前,先把涉及的每一根属于定型还是未定型逐个列出来。

{ 只对已走完的根做判定 }
已走完:=REF(条件, 1);
{ 用 REF 把条件后移一根,盘中不再随最新价跳动 }
{ 代价是信号出现的时间晚一根 }
分时级别的信号延迟一根,代价比日线小得多,因为一根只有一分钟。想兼顾及时与稳定,可以对已走完的根判主要条件,对未走完的根只判一个更严格的方向条件,两段条件分开输出,不要把两者混在一个表达式里。

四、突破用最高价判还是用收盘价判

用最高价判,条件在盘中触碰的瞬间就成立;用收盘价判,要等这一根走完才确认。前者的信号更早,同时把盘中瞬间冲高又回落的情形也算成了突破;后者的信号滞后,漏掉那些当天冲高后回落到区间内的情形。

{ 把上沿定义成前若干根的最高值,避开当前这根 }
上沿:=REF(HHV(H,20), 1);
{ 触碰式:只要最高价越过上沿就成立 }
触碰式:=H>上沿;
{ 确认式:以收盘价是否落在上沿之上为准 }
确认式:=C>上沿;
{ 两者成立的时间与数量都不同,选一种固定下来 }

两种方式没有优劣,选哪一种取决于你要记录的是「曾经到达」还是「收在之上」。写进记录时要标明用的是哪一种,否则同一段行情在两个不同口径下会得出相反的数量。

还有一种折中的写法可以两者兼顾:用收盘价确认方向,用最高价记录是否曾经触及。两段条件分别输出,一段用于判定,一段用于标注。这样既不会因为盘中瞬间冲高而反复产生信号,也不会丢掉「曾经触及但收回」这一类信息。

五、分时与日线各自维护一套参数

把日线的参数直接搬到分时上,或者反过来把分时的参数搬回日线,两种做法都会让判据失真。可行的安排是两套参数各自维护一份,并在文件命名上用周期做后缀区分,例如同一条公式在日线上叫一个名字、在分钟周期上叫另一个名字。这样挂载时不容易拿错版本。

两套参数之间可以建立换算关系,但换算不是等比例缩放。分钟周期里一天有多少根 K 线,取决于交易时段的长度,而这个数量在不同品种与不同交易制度下并不一样。把换算系数写成显式常量而不是直接算进窗口长度,换品种时只需要改这一处。

记录时把周期写在最前面,再写窗口长度。只写「窗口 20」无法判断指的是 20 天还是 20 分钟,而这两个口径下得到的结果完全不同,前一份记录与后一份记录放在一起看会得出相互矛盾的结论。

六、减少误判的三个动作

把通达信分时突破公式调到可用状态,可以按这三个动作推进。第一步,把窗口长度按周期折算成显式常量,不再沿用日线的数值。第二步,把均价线换成按累计额与累计量算的那种,并核对换算是量级差异还是数值差异。第三步,把判定分成已走完与未走完两段,分别输出,观察一段时间之后再决定哪一段作为记录依据。

三步做完之后,再把信号的分布按时间段落统计一遍,看通达信分时突破公式的输出是否均衡。如果信号集中在开盘后的一段,说明判据对开盘的波动幅度敏感,需要给窗口加一个时间过滤;如果信号在尾盘集中,情况类似,方向相反。区间的切法与记录字段,见 复盘方法与数据工具 一栏;形态与信号的口径写法,见 量价形态与信号拆解 一栏。

文中函数名与字段单位为通达信客户端的通用描述;不同版本与券商定制版对分钟数据的可用长度、成交量与成交额的单位、函数参数与除零处理存在差异,具体请以你所用客户端的帮助文档与实际输出为准。本文只讨论公式写法与计算口径,不构成任何投资建议。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。