公式平台
gsjc.jsp

公式教程

1.1 前言

安信行情系统有四个子栏目需要运用到公式管理器
技术指标:用于定义技术指标公式。
选股公式:用于定义智能选股公式。
智能买卖公式:用于定义智能买卖公式。
K线模式库:用于定义K线模式公式。
这四种公式是相互独立的公式,它们可以名称相同,但其内容和作用是不同的。选股公式与智能买卖公式往往通过将技术指标公式稍加变形得到。
系统提供公式管理器来统一管理这四类公式,公式的新建、修改、删除,均通过公式管理器进行。
系统已预先准备好了几十种技术指标公式,若干种智能选股公式和智能买卖公式,三十多种K线模式公式。如果这些公式不能满足您的需要,您可以修改原有的,或者自编一个全新的。编写公式要遵守一些特定的语法,因此请您花费一点时间阅读本章。

1.2 如何编技术指标公式

1.2.1 最简单的公式

这里我们举例说明如何编写公式。要说明的是,例子中的技术指标公式我们都预先写好存在系统中了。 例1 十日移动平均线指标(MA)
移动平均线指标是求股票收市价的移动平均线,编写公式的第一步,是到提供的基本函数(参看附录2.1.2)中去查一查,看那些函数能帮忙。
我们查到:函数CLOSE的功能是求当日收市价,函数MA(X,N)的功能是求X的N日移动平均线,所以10日均线指标的公式这样写: 
MA10=MA(CLOSE,10)
您也可以方便地在公式中引入加减乘除运算,请看下例。

例2 乖离率指标(BIAS)
乖离率指标是求收市价与移动平均价的差,计算10日乖离的公式这样写:
  BIAS =100* (CLOSE-MA(CLOSE,10))/MA(CLOSE,10);
由此可见,编写公式并不难。上面两个例子都是在一个图上只绘一条指标线,如果您想在同一个图上绘多条指标线,请看下例。

例3 同图绘制5日、10日、20日和60日均线
  做起来非常简单,您只需用分号将各技术指标公式隔开就行了。公式这样写:
  MA5=MA(CLOSE,5);
  MA10=MA(CLOSE,10);
  MA20=MA(CLOSE,20);
  MA60=MA(CLOSE,60);
  这个公式包含四个小公式,小公式间以分号隔开,我们称这种公式为组合公式。

例4 如何在图上区分多条指标线
  我们可以为每一条指标线取一个名字,这样就可以在图上区分它们。具体方法是在技术指标公式前写上名称并加一个冒号,这样写:
  MA5= MA(CLOSE,5);
  MA10= MA(CLOSE,10);
  MA20=MA(CLOSE,20);
  MA60=MA(CLOSE,60)
  当一条指标线有了名字以后,其后面的指标线就可以将该指标线作为一个函数来使用。

例5 指标线的名字可以当函数名用
  求收市价的5日移动平均价的10日移动平均线,本应写为:
  MM=MA(MA(CLOSE,5),10)
  如果给收市价5日移动平均线取个名字,我们又可以这样写:
  MA5= MA(CLOSE,5);
  M510=MA(MA5,10);
  与前者不同的是,后者同图绘出两条指标线.

1.2.2 较复杂的公式

上面所介绍的技术指标公式都是不带变量的,这里我们要举一个带变量的技术指标公式的例子。对于带变量(又叫参数)的指标线,我们可以调整变量的值,并同步观察到指标线形状的变化。

每个公式中最多可以有4个变量,每个变量有最小值、最大值和缺省值,每个变量必须有自己的名字。

例1,给技术指标公式加入变量
MTM动力指标是当日收市价减去几日前的收市价,设置一个变量N,其最小值、最大值、缺省值分别定为1日,50日,6日,技术指标公式写为:
MTM=CLOSE-REF(CLOSE,N)
在编写一套新技术指标公式时,可能需要多次引用同一个技术指标公式,且希望这个指标线不要绘出来,解决办法就是将这个技术指标公式设置为中间公式。
中间公式与一般的公式的区别在于:中间公式必须有一个名字,中间公式不使用冒号而是使用冒号等号":="来定义名字,如 ABC:=MA(CLOSE,10)就是一个中间公式,它仅供别的公式引用,不会在图上画出。

例2 加入中间公式
计算真实波幅,即在最高价与最低价的差、最高价与昨收的差、最低价与昨收的差中找到最大的。这里两处用到了昨收,可以将其设为中间公式,因此,
计算真实波幅的公式写为:
LC := REF(CLOSE,1);
FF=MAX(MAX(HIGH-LOW,ABS(HIGH-LC)),ABS(LOW-LC))

合理使用中间公式,不仅可以使计算速度加快,而且可以使您写出的公式更简洁易懂。

1.3 公式举例

例1 MACD指数平滑异同移动平均线 完整公式表示如下:

DIFF=EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA= EMA(DIFF,MID);
MACD=DIFF-DEA,COLORSTICK;

注意
[1]. 该套公式绘制三条指标线,第一条名为DIFF,是收市价短期(SHORT)指数滑动平均与长期(LONG)指数滑动平均的差;第二条名为DEA,是DIFF的MID天指数平滑平均;第三条为MACD,是DIFF与DEA的差。
[2]. 该套公式带三个变量(参数)SHORT、LONG、MID。
[3]. COLORSTICK画线参数加入到MACD指标线中,表示MACD要画成柱状线,并用不同颜色区分上涨与下跌。

例2 CR能量指标
完整公式表示如下:

MID:=(HIGH+LOW)/2;
UP:=MAX(HIGH-REF(MID,1),0);
DN:=MAX(REF(MID,1)- LOW,0);
CR= SUM(UP,N)/SUM(DN,N)*100;

注意
[1]. 该套公式中的头三个公式都是中间公式,实际上只绘一条指标线CR。
[2]. MID为中价,即最高价与最低价的平均值。
[3]. UP为上升值,若今天最高价高于昨天中价,那么上升值为今天最高价与昨天中价的差;否则上升值为0。这本应写为
UP:=IF(HIGH-REF(MID,1)>0,HIGH-REF(MID,1),0)
进一步思考一下,可看出该式等价于
UP:=MAX(HIGH-REF(MID,1),0)
[4]. DN为下跌值,若昨天中价高于今天最低价,那么下跌值为昨天中价与今天最低价的差;否则下跌值为0。
[5]. CR为上升值的N日累加值与下跌值的N日累加值的比。

例3 OBV指标
完整公式如下:

M:=CLOSE-REF(CLOSE,1);
MV:= IF(M>0,VOL,IF(M<0,-VOL,0));
OBV=SUM(MV,0)

注意
[1]. M为今日收市价与昨日收市价之差,为正表示股价涨,为零表示平盘,为负表示股价跌。
[2]. 当股价上涨时,成交量记为正,下跌则成交量记为负,平盘记为0,用了两个IF来实现这个逻辑,后一个IF嵌套在前一个IF中。先看第一个IF,若M>0(股价涨),则MV等于VOL,否则转入第二个IF(此时可以肯定M<=0),若M<0(股价跌),则MV等于-VOL,否则(此时可肯定M=0,即平盘)MV等于0。
[3]. OBV为每日正负成交量的累加,注意累加天数为零,表示从上市第一天开始累加。

1.4 智能选股公式

技术指标公式稍加变形,就可变为智能选股公式。
智能选股就是将满足条件的股票挑选出来,显然智能选股公式中要用到逻辑值,为真则选中该股,为假则不选中。与技术指标公式相比,智能选股公式可以有若干个中间公式,最后总是以一个返回逻辑值的公式收尾。
例如,MACD指标中,MACD线由下向上穿越0线为买入信号,由上向下穿越0线为卖出信号。若要挑出当天适合买入的股票,可将智能选股公式写为:

DIFF:=EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA:= EMA(DIFF,MID);
MACD:=DIFF-DEA;
BUY=CROSS(MACD,0)

再例如,要挑出连跌三天的股票,智能选股公式可以这样写:

DOWN3=CLOSE<REF(CLOSE,1) &&
REF(CLOSE,1)<REF(CLOSE,2) &&
REF(CLOSE,2)<REF(CLOSE,3)

1.5 智能买卖公式

技术指标公式稍加变形,再附上一些额外卖出条件,就变为智能买卖公式。

智能买卖公式用于指示买卖、参数优化和公式比较,这就要求它能准确描述买入和卖出信号,对于期货则描述做空和做多信号。

和智能选股公式一样,智能买卖公式也必须包含返回逻辑值的公式,用于指示买入、卖出信号。指示买入信号的公式在买入条件窗中输入,指示卖出信号的公式在卖出条件窗中输入,二者一定要成对出现。若您只需要一个信号,可将另一个信号设成恒为假,例如 0>100。智能买卖公式所包含的中间公式在中间公式输入窗中输入。

在做买卖指示功能时,智能买卖公式的一组参数(又叫变量)取缺省值。

在计算收益时,每次买入都假定使用全部资金买入,买入价为系统发出买入信号时第二天的开市价。卖出时将全部股票卖出,卖出价为系统发出卖出信号时第二天的开市价。收益率的计算是将每一次买卖的利润进行连乘,如果选择周期的最后一天还持有股票,则该股票的价值按最后一天的收市价计算。当连续出现相同的信号时,仅考虑第一个信号。本系统在计算收益时暂不考虑手续费。但用户可通过换手次数对总手续费进行估算(按目前的手续费标准,换手一次的手续费约为股票价值的1.5%左右)。

在参数优化时,智能买卖公式的一组参数从最小值到最大值取遍所有可能的组合,从中找出收益最大的一组参数值。

下面举例说明如何编写智能买卖公式。仍以MACD指标为例,其智能买卖公式这样写:

中间公式:
DIFF:=EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA:= EMA(DIFF,MID);
MACD:=DIFF-DEA;
多头买入:
BUY=CROSS(MACD,0);
多头卖出:
SELL=CROSS(0,MACD);

注意
[1]. 测试步长在参数优化、公式比较时用到。前面讲过,这二者在实际计算过程中,都要遍历参数组合。若步长为一,则遍历所有可能组合。若步长不为一,则会跳过一些组合。前者得到的结果更精确,但遍历范围大,耗时长。后者结果稍粗略,但遍历范围小,节省时间。
[2]. 买入条件为MACD由负变正,卖出条件则反过来。

1.6 K线模式公式

特殊的K线模式往往具有非常准确的指示作用。以往我们靠人工在K线图上搜索特殊的K线形态,这一工作非常繁琐。如果能用公式语言来描述这些特殊的K线形态,便有望让计算机来替我们工作。
K线模式公式就是用前面介绍的语法来描述特定的K线形态。请看下面的例子。
K线模式"早晨之星",往往指示已见底,后市看好。
早晨之星由三个交易日的K线组成:
第一日,在下跌市势中,出现一支身体修长的阴烛。
第二日,跳空下跌,蜡烛线身体长度缩短,形成星的主体部分,它可以是阴烛,也可以是阳烛。
第三日,出现一支阳烛,回升到第一支烛线的范围之内。

我们用下面的公式来描述早晨之星: REF(CLOSE,2)/REF(OPEN,2)<0.95 &&
REF(OPEN,1)< REF(CLOSE,2) &&
ABS(REF(OPEN,1)-REF(CLOSE,1))/REF(CLOSE,1)<0.03 &&
COLSE/OPEN >1.05 &&
CLOSE >REF(CLOSE,2)

第一个条件限制前天的K线为阴线,且收盘价与开盘价比较,跌幅在5%以上。第二个条件限制昨天较前天跳空下跌。第三个条件限制昨天开盘价与收盘价的差幅在3%以内。第四个条件限制当天的K线为阳线,且收盘价与开盘价比较,升幅在5%以上。第五个条件限制当天的收盘价高于前天的收盘价。