同一句「振幅大于某值」,两个人写出的结果集可以完全对不上。一个写的是当日振幅,取这一根 K 线自己的最高价与最低价作差;另一个写的是 N 日平均振幅,把窗口内若干根 K 线的波幅先各自算出来再取平均。通达信振幅选股公式的第一道分岔就在这里:不是条件写错了,是分母和窗口不是一回事。下面先拆定义式,再讲窗口的三种取法、与换手率的组合,最后给出把结果集对回来的办法。
一、振幅的定义式:分子固定,分母决定口径
振幅的写法可以统一到一个形状上:
振幅 = (最高 - 最低) / 基准
{ 三种基准的对照:分子同,分母不同 }
振幅前收:(H-L)/REF(C,1); { 基准 = 前一收盘 }
振幅均线:(H-L)/MA(REF(C,1),20); { 基准 = 前收均线 }
振幅均价:(H-L)/(REF(AMOUNT,1)/REF(VOL,1)); { 基准 = 前一均价 }
分子这一层没有争议,都是当日最高价 H 与最低价 L 的差,也就是最高与最低之间的绝对差值。有分歧的是分母。基准选前一收盘、选前收的均线、还是选当日均价,同一个高点算出来的振幅就不是同一个数。
取前一收盘是一个通行写法,用 REF(C,1):它的含义是这一根 K 线的波动相对上一根收盘价展开。取前收均线,分母变成一段时间的收盘均值,单根基准的抖动被抹平,振幅随之变得平稳。取当日均价,用 REF(AMOUNT,1)/REF(VOL,1) 这一类推算,衡量的是相对成交重心的偏离。
二、窗口的三种取法:当日、N 日均与区间累计
定了分母之后,第二个岔口是窗口:你是只看当前这一根,还是看一段时间,还是看一整段区间的累计。三种取法回答不同的问题。
当日振幅 (H-L)/REF(C,1) 反映单根 K 线的波动幅度,是一个瞬时量。N 日平均振幅 MA((H-L)/REF(C,1),N) 把窗口内的单根振幅做一次平均,条件命中的是「这一段时间整体波动处在什么水平」,而不是「今天跳了多少」。区间累计振幅 (HHV(H,N)-LLV(L,N))/REF(C,N) 取窗口内最高价的最大值与最低价的最小值作差,再除窗口前一根的收盘价,度量的是整段区间从最高到最低铺开的幅度,与逐根平均是两回事。
{ 窗口三取法 }
振当日:(H-L)/REF(C,1);
振均N:MA((H-L)/REF(C,1),N);
振区间:(HHV(H,N)-LLV(L,N))/REF(C,N);
同一个 N 换档,结果集会跟着换。N 取 5 时窗口短,均值和区间累计都贴合最近的几根 K 线;N 取 20 时窗口最长,单根大波动被摊薄,均振幅的数值被拉低,区间累计的最大最小差反而被拉大。落到结果集上,N 越大,符合条件的 K 线越少,曲线越平滑。
| 窗口 | 度量的东西 | N 增大时的走向 |
|---|---|---|
| 当日 | 单根 K 线的波动幅度 | 不受 N 影响,逐根独立 |
| N 日均 | 窗口内波幅的平均水平 | 更平滑,数值被拉低,命中减少 |
| 区间累计 | 区间内最高到最低的总铺开 | 极差拉大,命中减少 |
三种取法不必二选一。可以先写一条当日振幅卡当根的瞬时波动,再写一条 N 日均振幅卡这段时间的整体水平。串的时候窗口参数要对齐,混用 N=5 与 N=20 时,记录里要标清哪一条用了哪一档。
三、与换手率的组合:两个维度的叠加
通达信振幅选股公式本身只度量价格这一路。把它与换手率放在一起,是在两个维度上各加一道条件:振幅是价格波幅,换手率是成交占流通盘的比例,前者看波动,后者看成交。两个维度互不替代。
叠加的方式是把两条判定用 AND 连起来,各自给一个阈值。波动这一路用振幅条件,成交这一路用换手率条件,两者同时成立才算命中。得到的结果集是两者的交集,比单用振幅收窄一层。
叠加的顺序不影响交集大小,影响的是排查路径。宽条件先放,例如只判 VOL>0 排除无成交的 K 线;窄条件后放,例如换手率的区间判定。
还有一层要留意:两条条件的窗口要对齐。振幅用 20 周期时,换手率的均线窗口也取同一档;一边用 5、一边用 20,结果集里会混进「短期活跃但长期平淡」与「长期活跃但短期平淡」两类,实际口径已经不一致。
四、结果集复核:先挂副图,再逐条对
条件选股跑完,结果集只是一行行的代码。要确认它真的对上,把振幅条件挂到副图上看。做法是自己画一条振幅线,用 : 输出,让它变成副图上一条可见的曲线;再把条件写得窄一点,只让振幅落在区间内的 K 线取真值,一条真假线同样输出。两条线叠在同一张副图上,就能看到命中信号落在哪几根 K 线上。
{ 副图复核用:一条振幅线 + 一条真假线 }
振值:(H-L)/REF(C,1);
达标线:振值>0.03 AND 振值<0.08;
读这张副图时看三件事:真假线取真值的位置是不是落在振幅曲线的区间里;区间的上下沿是不是你设定的那个数;相邻两根 K 线之间有没有整段的空白。
接下来与条件选股的结果集逐条对照。把副图上取真值的那几根 K 线的日期抄下来,再去条件选股的结果列表里比对,两边同一天的根数应当一致。对不上时,问题出在三个位置:窗口参数、数据范围、复权设置。
| 不一致的表现 | 先查哪一处 | 核对办法 |
|---|---|---|
| 副图上一段连续 K 线都达标,选股结果里只有零散几根 | 窗口参数 | 对比副图用的 N 与选股公式里的 N 是否为同一档 |
| 某段时间副图有值、选股结果里整段空白 | 数据范围是否含停牌 | 看那段区间有没有停牌日,停牌日的 K 线在选股里是否被排除 |
| 同一根 K 线两边数值对不上 | 是否复权 | 把副图与选股的复权设置统一,再重跑一次 |
数据范围这一项容易被跳过。条件选股里可以限定市场、板块与上市时间,这些限定同样会改动结果集;副图不带这些限定,两边不对等时,先看条件选股的范围设置。复权设置同理:前复权与不复权跑同一组条件,最高价与最低价的取值不同,振幅跟着变。
五、边界声明:阈值是过滤口径的选择
把上面几层收一收。通达信振幅选股公式的用法,归到一句话:先定分母,再定窗口,最后把参数写进记录。三处里任何一处改动,结果集都会换一批。振幅是波动幅度的度量,它回答的只有一个问题:这段价格有没有落在你设定的波动区间里。阈值定得宽还是窄,是过滤口径的选择,跟任何标的都没有关系。
条件成立与否,说的是波动落在区间内还是区间外,不指向方向。参数这一层要写得住:同一段行情里,当日振幅与 20 日均振幅给的是两套数,一个逐根跳动、一个抹平抖动。把 N 的取值、分母的取法、组合里其余条件的窗口一起记下来,换一台机器重跑,才能得到同一批结果。
下面这段把三种写法与一组组合条件放在一起,可以整段贴进公式编辑器编译。三处除法都做了防零:REF(C,1) 为 0 时用 IF 兜住,分母换成一个极小值,避免除零结果把整条线打成空值。
{ 通达信振幅选股公式:三种窗口 + 组合条件 }
N:=20;
基准:=MAX(REF(C,1),0.001);
振当日:(H-L)/基准;
振均N:MA((H-L)/基准,N);
振区间:(HHV(H,N)-LLV(L,N))/MAX(REF(C,N),0.001);
振达标:振均N>0.02 AND 振均N<0.06;
选条件:振达标 AND VOL>0;
四种表达式里,前三条分别对应当日、N 日均与区间累计三取法,第四条把均振幅的区间判定与成交量非零的判定连起来。要落到条件选股里跑,把最后一行改成一行布尔表达式;要挂副图看曲线,保留前面的 : 输出行。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内相关内容:通达信选股公式与预警(条件筛选、结果集复核与预警用法)、通达信指标原理(口径、均值与分母的取法)、通达信信号拆解(把条件拆成中间量逐级核对)。
