K线形态量化难点,卡在描述层与计算层之间那道缝。说出口的是「缩量回踩」「平台整理」这类模糊词,写进公式却要变成一组带参数的判断,中间的映射没有现成答案。本文以通达信金融终端个人版为准,不同版本的函数命名与入口措辞可能存在差异;公式里的参数值均为示意,需要按自己的数据区间调整。
描述层说的是感觉,公式层要的是可复现定义
「缩量回踩」这四个字里压着三件事:成交量比之前一段时间缩小,价格从某个高点回落,回落到某条均线附近。每一件事单独拿出来,都还要补一句「跟哪一段比、比到什么程度、以哪一根为基准」。描述层把三件事当成一个整体说出来,听的人凭经验补齐细节;公式层没有这种默契,参数字段缺一个就没法算。这就是K线形态量化难点里最先冒头的一处:需求本身还没被写成条件。
把模糊词摊开,能看清公式层要补哪些空。
描述层说法 量化层要补的字段 缩量回踩 成交量参照哪一段均量、缩小到什么比例以内 平台整理 区间取哪一根到哪一根、振幅除以什么、阈值取多少 放量突破 放量以哪根均量为基准、倍数取多少算突破
这张表里的每一行,落到公式都要指定一个根数 N 和一个阈值。N 和阈值定下来,判定结果就固定了;没定下来,同一段行情换个人写公式,选出来的结果就不一样。量化不是把模糊词照抄进代码,而是先决定用哪个可复现的数值替掉它。
描述层这些词也不是凭空冒出来的。它们来自看盘时对价格形态的经验归类,把多次见到的形状归到一个名目下,方便交流。这种归类对人有价值,代价是同一个名目在不同人的经验里对应的边界并不重合。写公式时先要做的,正是把这些名目重新切开,找出几个人都认可、并且能用数值描述的判定点。
形态是价格序列的相对关系,不是单点取值
再往下一层,是形态本身的构成方式。K线形态描述的是若干根 K 线之间的相对关系:区间的高低点在哪里,收盘价相对哪条均线在什么位置,成交量相对前一段是放大还是收敛。它不由某一根 K 线的单点取值决定,拿一个点位去套形态,方向就不对。
相对关系带来两个后果。形态必须绑定一个区间,区间起止不同,算出的相对关系就不同。判定结果是一个区间内的整体结论,不是逐根累积的开关量。这两点叠在一起,构成了K线形态量化难点里第二处不好绕开的地方:没法只给一个函数就得到「是不是平台」,必须连同区间一起交给公式。
把相对关系落到公式,常用两种处理。一种是把区间内的价格除以某个基准做归一化,让不同价位的形态能放在一起比较;另一种是保留原始数值,直接比高低点之差。前者适合跨标的选择,后者适合在固定标的上看形态的伸缩。两种处理不会给出相同的结果,选哪一种取决于要回答什么问题,选之前先想清楚比较的对象是什么。
三处难点:起止点、相似度、容差
把上面的铺垫收拢,形态量化会撞上三件事。
- 起止点怎么定。区间从哪一根算起、到哪一根结束,直接改变高低点和振幅。可以用固定根数 N 来框,也可以用条件触发来定起点,两种口径算出的结果不能直接互比。
- 相似度怎么量化。两个形态像不像,比的是形状还是幅度,要提前选一个。比形状就做归一化,比幅度就保留原值,选错方向,结果会朝不同方向偏。
- 容差怎么设。价格数据带噪声,判定条件留不留余量、留多少,决定了边界附近的样本算不算命中。容差取零,边界会变脆;容差放宽,又会把不属于该形态的样本拉进来。
这三处没有标准答案,只有口径到位和不到位的分别。把口径写进注释,下一次改参数时才知道自己动的是哪一层。
把「平台整理」写成一段可计算的公式
拿「平台整理」做一个具体例子。它的近似算法是:在一个 N 根 K 线的区间里,最高价与最低价之差,相对于这段时间的均价,落在一个阈值之内。写成公式是下面这样。
{ 平台整理的近似写法(示意,参数按需调整) }
区间振幅 = (HHV(H,N) - LLV(L,N)) / MA(C,N) * 100;
平台成立 = 区间振幅 <= 8;
{ N 取区间根数,阈值取百分数 }
这段公式把模糊词换成了三个可调项:区间根数 N、振幅的计算分母,以及阈值。N 取 20 与取 60,得到的是两种不同的区间;分母换成区间最低价,振幅的数值会变大。阈值从 8 调到 5,被判定为平台的区间会变少。改完参数,在同一段数据上重新选一次,命中集合的变化就是参数的效果。
参数 调整方向 命中集合的变化 N 20 到 60 区间拉长,短平台被并入更长的区间 阈值 8 到 5 判定收紧,命中数量减少 分母 均价换最低价 振幅数值整体变大,判定相应放宽
这张对照表说明参数的调整方向,不说明哪种取值更好。取值要和观察的目的绑定:想抓短促的横盘,就把 N 压小;想在更长的区间上找平衡,就把 N 放大。方向定了,再谈具体数值。
换周期之后,同一个形态的判定会变
周期是另一处容易忽略的变量,也是K线形态量化难点里容易被轻轻带过的一层。同一段行情,日线与周线上算出的 N 根区间,覆盖的时间跨度不同,高低点和均量的取值也不同。日线上判定成立的平台,切到周线可能因为区间被拉长而不再成立;反过来,周线上收敛的形态,在日线上会被拆成若干段小波动。
这种差异不是错误,是对不同观察尺度的如实反映。它带来一个操作上的要求:写形态条件时把周期写进口径,验证时在同周期内比较。把日线算出的阈值直接搬到周线,或者把周线的判定结果拿到日线里对照,比较的基础就不一致。
数据长度也参与这件事。周线上取 N 根区间,需要的历史比日线长。上市时间不长的标的,或者中间停牌较多的标的,数据起点不足,公式在早期区间会返回空值或跳过。把这段空值当成「形态不成立」还是「没有数据」,是两种不同的处理,记录口径时要写清楚,否则同一条公式在两只标的上会给出无法对齐的结果。
怎么验证,以及量化不了的部分
验证方法很直接:把条件挂到选股或副图,改一个参数,看命中的标的集合怎么变,再换一个区间重跑一次。集合的变化方向能帮你判断参数是在收紧还是在放宽。具体到通达信,可以在公式管理器里先点「测试公式」确认没有语法错误,再挂副图看输出。
下面这张表收拢几种排查时会对上的现象。
| 现象或提示 | 含义 | 处理 |
|---|---|---|
| 改参数后命中集合几乎不动 | 该参数在这段区间不敏感,或阈值离数据分布很远 | 换区间重跑,确认参数是否真的起作用 |
| 日线成立、周线不成立 | 两种周期的区间跨度不同,口径不一致 | 把周期写进口径,同周期内比较 |
| 边界样本时有时无 | 容差取零,判据在临界值附近跳动 | 给容差留一点余量,并记录取值 |
| 公式报错或输出为空 | 区间根数超过数据长度,或函数名与版本不符 | 先点「测试公式」,再核对数据长度 |
每验证一轮,把区间、周期、根数与阈值一起记下来。下次复现时能对上,改动才算留了痕。只记公式不记参数,过一段时间回头看,自己也认不出当时用的是哪一版口径。
量化不了的部分要承认。有些形态的成立与否跟盘口细节、消息面、板块联动有关,这些信息不在价格序列里,公式取不到。还有一些形态的边界本身就是渐变的,硬切一刀就会误伤边界样本。承认这些,比把公式调得更复杂更接近真实。这也是K线形态量化难点的一个收束:能量化的是可复现的那部分,剩下的交给人工判断,而人工判断不在公式的职责范围内。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
