
常用的逻辑函数有4个:CROSS,UPNDAY,EXIST,EVERY;
选择函数1个:IF;
数学函数2个:MAX,MIN;
一、逻辑函数
1、CROSS 表示上穿,两条线交叉,CROSS(A,B) 表示当A从下方向上穿过B时返回1,否则返回0。例如股价上穿20日均线:
CROSS(C,MA(C,20));
如果要写股价下穿20日均线,也就是20日均线上穿股价:
CROSS(MA(C,20),C);
始终记住,CROSS函数表示的方向是一条线上穿另外一条线。
2、UPNDAY
UPNDAY返回是否连涨周期数。 函数UPNDAY(CLOSE,M) 表示连涨M个周期 , M为常量。
函数UPNDAY(CLOSE,M)主要用于编写选股器,例如3连阳:
UP3:UPNDAY(CLOSE,3);
如果用其他函数编写3连阳也是可以的,例如用COUNT函数:
UP3:COUNT(C>O,3)=3;
这种写法包括了低开收阳的阳线,实际是比前一交易日是下跌的,如果要去除这类阳线就这样写:
UP3:COUNT(C>O AND C>REF(C,1),3)=3;
这里主要说明的是编写公式需要考虑你所写的条件包含的范围和你所期望的是否一致。
3、EXIST
EXIST表示存在, 是否存在。例如:
EXIST(C>O,10);
表示前10日内存在着阳线 , 第2个参数为常量。
函数EXIST常用在编写好了选股公式,查看历史出现的相同条件,可以选出多少天内存在该条件的个股,从而实例检查选股器是否有效。
例如编写5连板:
N:=5; ZT:=C/REF(C,1)>1.095 AND C=H; LZT:=COUNT(ZT,N)=N AND COUNT(ZT,N+1)=N; XG:=LZT AND FINANCE(42)>360; EXIST(XG,200);
FINANCE(42)>360表示交易自然天数大于360天,当前5连扳还是比较少,你就可以选择EXIST(XG,200);200天存在5连扳的股票,去除了刚上市的新股5连扳,选出来的股票,你就可以研究他们在起板前的走势分析,比一个个股票翻阅存5连扳自选股简单多了,节省很多时间。
4、EVERY
EVERY表示一直存在。 函数EVERY(X,N)的用法:
EVERY(CLOSE>OPEN,10);
表示前10日内一直阳线,N应大于0,小于总周期数,N支持变量。我们用之前引用函数BARSLAST举的例子:
最近一个向上突破20日均线;
目前的周期数大于等于4天;
而且一直保持再20日均线上方的选股器。
B:=CROSS(C,MA(C,20)); QT:=BARSLAST(B)>=4; A1:=EVERY(C>MA(C,20),BARSLAST(B)); XG:A1 AND QT;
这句:
A1:=EVERY(C>MA(C,20),BARSLAST(B));
函数EVERY(X,N)引用的N就是一个变量BARSLAST(B),条件X就是C>MA(C,20)。
二、选择函数:IF
IF表示逻辑判断,根据条件求不同的值。用法: IF(X,A,B) 若X不为0则返回A,否则返回B。
我们可以这样理解:函数公式=IF(X条件判断,A(条件为真时执行),B(条件为假时执行));
例如:
(1)阳线返回最高值,否则返回最低值:
IF(CLOSE>OPEN,HIGH,LOW);{周期收阳则返回最高值,否则返回最低值}
(2)KDJ指标J值在100~0之间显示:
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:=3*K-2*D; IF(J>100,100,IF(J<0,0,J));
IF(J>100,100,IF(J<0,0,J));当J>100即条件为真,输出值100;
当J>100条件为假,也就是J小于100,执行IF(J<0,0,J),这是一个嵌套,还要做判断:
J<0条件为真,输出值为0,J<0条件为假,也就是J是大于0的,就输出J,
这样J值就一直在100~0之间显示。效果如下图:

三、数学函数:MAX,MIN
1、MAX
MAX表示较大值,求最大值。函数MAX(A,B) 返回A和B中的较大值。
例如:
MAX(C,O);{表示比较开盘价和收盘价的大小,获取较大值。收盘价大于开盘价,获取的值就是收盘价。}
MAX(CLOSE-OPEN,0);{若收盘价大于开盘价返回它们的差值,否则返回0。}
2、MIN
MIN表示较小值,求最小值。 函数MIN(A,B) 返回A和B中的较小值。
例如:
MIN(CLOSE,OPEN);{返回开盘价和收盘价中的较小值。}











发表评论