股票选股公式编写教程
第一讲:公式编写的基础函数
打开技术指标公式,我们最常见的,它的组成不外乎两种情况,一是 K线,二是均线。其他诸如柱状线,彩带,分段线等等,都是在 K线或均线基础上的延伸或变形。为此,我们先熟悉一下构成这两种状态的基本函数。
一、 K线函数
非常简单,大家都可能熟知。作为基础,还是说明一下。
1、开盘价: OPEN可简写为 O
2、最高价: HIGH可简写为 H
3、最低价 :LOW可简写为 L
4、收盘价 :CLOSE可简写为 C
有了这 4个函数,就可构成一根 K线了。比如:收盘价小于开盘价,即阴线: C<O;收阳线则互为相反。
那么长下影的光头阳线,即 T形线呢?理解了原理,也很简单。一要以最高价收盘(否则有上影),二要开盘价大于最低价。所以有如下表示: C=H AND O>L;这里我们没有考虑下影的长度和 T字上边一横(实体部分)的宽度。
习题:一根光头阳线,实体部分小于 5分钱,下影超过实体的两倍,如何表述?
特别提示:编辑指标必须在英文状态下输入。其中运用的数学符号,包括加减乘除、分号,引号等( + -* / ; "" ''><#)也必须在英文状态下输入。
二、均线函数
单根 K线的形态是相当枯燥的。尤其在主图里。配合以均线等形式就会丰富多采,或者更利于我们从中发现规律和分析问题。这就需要均线函数来解决了。最常见的:
1、MA(X,N),求 X的 N周期简单移动平均值。
算法: (X1+X2+X3+...+Xn)/N
例如 :MA(CLOSE,20),表示求 20日均价。
2、EMA(X,N),求 X的 N周期指数平滑移动平均。
算法 :若 Y=EMA(X,N)则 Y=[2*X+(N-1)*Y']/(N+1),其中 Y'表示上一周期 Y值。
例如 :EMA(CLOSE,20),表示求 20日指数平滑均价。
3、SMA(X,N,M),求 X的 N周期移动平均, M为权重。
算法 :若 Y=SMA(X,N,M)则 Y=(M*X+(N-M)*Y')/N,其中 Y'表示上一周期 Y值,N必须大于 M。
例如 :SMA(CLOSE,20,1),表示求 20日移动平均价。
这三个均线函数在股软中是通用的。关于它们的区别,开始学习时不必深究。其实数值区别也不是很大。要均线真实反映每天的价格变化,用 MA,适当圆滑些,用 EMA或 SMA。
三、常用连接函数有了上述基本函数,可以表述出 K线和均线了,但实际应用中要复杂得多,还要一些函数把他们连接起来。大致有这么几个:
1、AND就是 “和”的意思。如: A AND B;就是 A和 B两个条件要同时成立。
2、OR “或”,“或者 ”的意思。如: A OR B;就是 A和 B两个条件有其中一个成立就行。
3、IF根据条件取不同的值。如: IF(X,A,B),若 X不为 0则返回 A,否则返回 B。实例 :IF(C<O,L,H),表示收阴返回最低价,否则返回最高价。
4、CROSS交叉函数。 CROSS(A,B),表示 A从下方向上穿过 B。
5、REF向前引用。引用若干周期前的数据。例如 :REF(CLOSE,1),
表示昨收的收盘价。那么前天的最高价呢,就是: REF(H,2)。四、成交量 VOL表示每天的成交量。因以后会经常用到,所以先交待给大
家。上面这几个函数是最常用的,希望大家记住,不知怎么写也要知道其表述的意思。当然,记不住也不要紧,《公式编辑器》中全有。
习题: 10日均线与 20日均线金叉和涨幅超过百分之三,且成交量比昨天放大一倍。
习题:一根光头阳线,实体部分小于 5分钱,下影超过实体的两倍,如何表述?
c=h and c-o<0.05 and o-l>(c-o)*2; STICKLINE(c=handc-o<0.05and o-l>(c-o)*2,o,c,8,1),COLORRED; STICKLINE(c=handc-o<0.05and o-l>(c-o)*2,o,l,1,0),COLORRED;
习题: 10日均线与 20日均线金叉和涨幅超过百分之三,且成交量比昨天放大一倍。
aa10:=ma(c,10);
aa20:=ma(c,20);
zf:=if((c-ref(c,1))/ref(c,1)*100>3,1,0);
av:=v>=ref(v,1)*2;
CROSS(aa10,aa20) and zf and av;
以上作业请老师批阅老师批改如下此句 zf:=if((c-ref(c,1))/ref(c,1)*100>3,1,0);
如下表述更简练些: zf:=c/ref(c,1)>0.03;
其实,有时编写公式就这么简单。以上就可看做是两个选股公式。此句 zf:=if((c-ref(c,1))/ref(c,1)*100>3,1,0);如下表述更简练些: zf:=c/ref(c,1)>0.03;
单独提出此句,是告诉大家。编写公式和数学解题一样,有很多时候可能有多种方法,殊途同归。这也是有时对于同一求助问题,不同的人有不同的回复一样。这个习题,运用了第二讲中的内容: 1,涨幅,就是收盘价与昨天的收盘价之比。
2,昨天的表示符号(向前引用函数)和其他运算符号。
用户习题:10日均线与 20日均线金叉和涨幅超过百分之三,且成交量比昨天放大一倍。答: CROSS(MA(CLOSE,10),MA(CLOSE,20)) AND C/REF(CLOSE,1)>3/100 AND VOL/REF(VOL,1)=2
习题:10日均线与 20日均线金叉和涨幅超过百分之三,且成交量比昨天放大一倍。答:CROSS(MA(CLOSE,10),MA(CLOSE,20)) AND C>0.03*REF(CLOSE,1)AND VOL>=2*VOLREF(VOL,1);
基本正确。用一句话概括,精简。需要指出的是最后一句: “成交量比昨天放大一倍 ”,这句话的表述。老兄用的是: VOL/REF(VOL,1)=2,应该是非常准确。但在实际应用中,却是行不通的。正好等于 2倍是极难遇到的,所以编写公式变通的办法,或者说应该用的是: VOL/REF(VOL,1)>=2,更符合实际。增加一个大于号,成为问题的关键所在。提出这个问题,并非小题大作,应该看做以后编写时的注意事项。