通达信股价大于均线公式在图上看着成立,切到选股结果里却对不上号:同一段行情,副图上标出的位置一个连成一片,另一个只剩零星几个点。这不是软件算错,而是「股价大于均线」这个条件有两种机制不同的写法,输出形态跟着写法走。
下面把两种写法拆开讲,再讲取值时点、取值口径和均线周期分别从哪个方向把结果挪位置。语法以通达信金融终端个人版为准,用 Ctrl+F 打开公式管理器可以新建与查看公式,不同版本的入口位置与提示文字可能有差异。
一、同一个不等式,两种落点
把通达信股价大于均线公式的比较部分单独拎出来,只有一行:CLOSE > MA(CLOSE,N)。这一行做的事是把当根 K 线的收盘价,与当根为止的 N 周期均线值比一次,成立返回真,不成立返回假。
麻烦在于「返回真」有两种用途。一种要知道这根 K 线处在什么状态,另一种要知道状态在哪一根发生了变化。两种用途对应两种写法,条件看起来很像,输出完全不同。
{ 状态式:每一根 K 线各判一次 }
状态: CLOSE > MA(CLOSE,20);
{ 事件式:只取由不成立变为成立的那一根 }
转折: CLOSE > MA(CLOSE,20) AND REF(CLOSE,1) <= REF(MA(CLOSE,20),1);
| 比较方式 | 输出形态 | 适用场合 | 容易踩的地方 |
|---|---|---|---|
| 状态式 | 连续为真的一段 | 描述「处在均线上方」这个状态 | 按信号数量统计时,把一整段逐根数了进去 |
| 事件式 | 离散的单根 | 只标记状态发生改变的那一根 | 只把收盘价挪到上一根,均线仍留在当根 |
| 状态式配上一根的均线 | 连续为真的一段,起止位置整体挪一根 | 想提前一根看到状态变化 | 与事件式混用,相邻两根同时为真 |
| CROSS 写法 | 离散的单根 | 描述收盘价上穿均线 | 与事件式的成立条件并不完全等价,要核对 |
表格里前两行是本文要讲的主体,后两行是同一件事的变体。四行放在一起看,区别都在「哪一根 K 线为真」这一件事上,而不是在均线算得对不对。
二、状态式:成立就是连续的一段
状态式的写法就是 CLOSE > MA(CLOSE,20),不给它加任何前后比较。结果是每一根 K 线各自判断一次,条件成立的那些 K 线连成一段,不成立的连成另一段。
这种写法描述的是位置关系:这根 K 线的收盘价在均线上方,或者不在。价格在均线之上持续多久,这一段就有多长,它不区分「刚上去」和「已经在上面有一段」。要把状态本身画出来,这样写就够了。
直接后果在统计上。把它当成信号去数,数到的是一段里的每一根,而不是一次穿越。后面如果接了计数、排序或者预警,这一点要先说清楚,否则同一个条件在两处统计出的数目对不上,会让人以为是数据出了问题。
三、事件式:只在变化的那一根为真
事件式是在通达信股价大于均线公式的比较式上再加一个前提:上一根不成立。写法是把当根的比较与上一根的比较用 AND 连起来,上一根的取值整体向前挪一根。
{ 上一根参与比较的每一个取值,都要用 REF 挪过去 }
转折: CLOSE > MA(CLOSE,20) AND REF(CLOSE,1) <= REF(MA(CLOSE,20),1);
{ 同一件事的另一种写法 }
转折: CROSS(CLOSE, MA(CLOSE,20));
第二行右边那个均线也要一起挪。只把收盘价挪到上一根、均线还留在当根,判断的内容就变了,变成拿上一根的收盘价与当根的均线比,落点会整体偏一根。这类错误在图上不容易直接看出来,因为柱子还是照常画出来了。
事件式的输出是离散的点。它只关心状态变化的那一根,所以一整段连续为真的行情里只出一个点。价格如果在均线附近来回穿越,这一段就会给出多个点,具体几个要看实际数据,不是公式能事先规定的。
四、取值时点:用当根还是用上一根
把 CLOSE > MA(CLOSE,N) 与 CLOSE > REF(MA(CLOSE,N),1) 摆在一起,差别只在右边的均线取哪一根的值。前者用当根为止算出来的均线,后者用上一根为止算出来的均线。
{ 右边取当根:判定与当根的均线同步 }
A: CLOSE > MA(CLOSE,20);
{ 右边取上一根:均线值整体后移一根 }
B: CLOSE > REF(MA(CLOSE,20), 1);
两个式子算出来都是真或假,差别是落点整体挪一根。哪一根是你要的,取决于这个条件后面接什么:如果接的是「这根 K 线处在什么状态」,右边取当根;如果接的是「这根 K 线相对上一根发生了什么」,就把需要比较的两边都挪到同一个时点,别只挪一边。
同一个道理也适用于左边的收盘价。两边都取当根,或者两边都取上一根,只要时点一致,条件描述的含义就清楚。两边时点不一致时,比较描述的是跨时点的关系,写之前先想清楚这是不是你要表达的那件事。
五、取值口径:复权方式与最左侧的空白
通达信股价大于均线公式的输出,还跟着取值口径变。同一根 K 线,在复权与不复权两种口径下,收盘价与均线值都不是同一个数,比较结果也就未必相同。
这是数据口径问题,不是公式写错。做对照时要么两边都用同一种口径,要么在结论里标明用的是前复权还是不复权。软件里复权设置项在不同版本的入口位置与措辞可能有差异,以官方版本说明为准。
另一处口径是最左侧的空白。均线是 N 周期的,最左侧 N-1 根上算不出均线值,这一段里比较不会给出成立的结果。把 N 调大,这段空白跟着变长,条件成立的区间整体向右挪。
{ N 取 20 时,最左 19 根上均线取不到值
N 取 60 时,最左 59 根上均线取不到值
这一段不是被过滤掉的,是参与比较的取值本身为空 }
六、周期与验证:把两种写法挂到副图对照
把 N 从小调到大,条件成立的区间形态会跟着变。周期短,均线贴得紧,条件在成立与不成立之间切换的位置变多,一整段被切成若干小段;周期长,均线离得远,成立的区间更连续。方向可以预期,具体落点要看数据。
验证的方法是把这个条件挂到副图上,用柱子或标记把落点画出来,再与副图上指标的形态对照。副图怎么挂、主图副图怎么切换,不同版本的入口位置有差异,以自己软件的界面为准。
{ 把成立的那一根画成柱子,柱子就是你眼睛看到的落点 }
STICKLINE(CLOSE > MA(CLOSE,20), 0, 1, 2, 0);
{ 事件式同样画一根,两行叠在一个副图上对照 }
STICKLINE(CLOSE > MA(CLOSE,20) AND REF(CLOSE,1) <= REF(MA(CLOSE,20),1), 0, 1, 2, 0);
叠在一张副图上,哪一行连成一片、哪一行是单根,直接就能看出来。落点与你预期不一致时,先查两边时点是否一致,再查后面是否还接了别的条件,最后才去怀疑均线的算法。
「通达信股价大于均线公式」是站内条目的叫法,软件里没有同名的函数,实际写出来的是一行比较式加一个均线函数。名称不构成任何语法上的东西,换成别的说法,算式还是那一行。
本文讲的是比较方式与取值时点的机制,参数取值、复权设置这些属于公式的设定,不同设定对应不同的落点,不属于行情的结论。本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 通达信指标原理与参数 的条目,公式编写 里讲比较式与函数的写法,主图与副图 里讲条件挂到图上怎么看,可对照查看。
