自定义指标语法

自定义指标语法:

自定义指标的语法以语句为单位,每个语句都需要以“;”(半角)结束。在自定义指标的语法中,有三种语句:赋值语句、条件跳转语句和循环语句。

注释部分

在自定义指标文本中,可以使用注释来标识某些语句的具体意义。注释以“//”开始到本行的结束。在指标文本窗口中注释以绿色字体显示。

指标的引用:自定义指标中需要引用其他指标。指标的引用分为两类:

1.  作为参数的指标引用(出现在等号右边的指标)

这类引用包括引用参数指标和结果返回指标。

引用参数指标时的一般形式是:指标名称[引用日期](参数列表)。引用日期是指需要引用当前天往前几天的指标数值,如果为0则表示引用当前天的指标数值,1则表示当前天往前1天的指标数值,依次类推;参数列表则标示所引用的指标的参数,如果所引用的指标没有参数则不能写该项,如果指标有多个参数,则中间用逗号(半角)分割。例如需要引用前两天的CYF22的值应该表述为:CYF[2](22);需要引用当前天的收盘价则是:CLOSE[0]或者CLOSE。

引用结果返回指标的一般形式是:指标名称[引用日期]。注意此时不能有参数列表,因为本软件自定义指标的语法中默认引用结果返回指标时的参数列表就是“输入参数”栏中标识的参数列表。

2.  保存结果的指标引用(出现在等号左边的指标)

这类引用只能是引用结果返回指标。而且引用时只能出现结果返回指标的名称,不能出现引用日期和参数列表,一般形式是:指标名称。

赋值语句

赋值语句的语法非常简单,没有关键字。型如“a = b + c”的语句都是赋值语句,赋值语句中的“加、减、乘、除”分别用“+、—、*、/”表示 (注意都是半角的)。

条件跳转语句

条件跳转语句有4个关键字:IF (表示如果)、THEN (表示则)、ELSE (表示否则)、ENDIF (表示条件语句结束)。条件跳转语句的形式是:

IF 条件

    THEN

        语句1;

        语句2;

        ……

    ELSE

        语句1;

        语句2;

        ……

    ENDIF

“条件”的形式是型如 “a > b”、“a < b”、“a = b”(注意这里的“=”是相等而不是赋值的意思),也可以用与和或把简单条件串连起来,型如:“(a > b) & ( b > c)”、“(a = b) | (b < c)”。

“语句1”、“语句2”可以是任何语句,包括赋值、条件跳转或者循环语句。

注意条件跳转语句必须包含“THEN”分支,但是可以没有“ELSE”分支,型如:

IF 条件

    THEN

        语句1;

        语句2;

        ……

    ENDIF;

    循环语句

循环语句有3个关键字:LOOPBEGIN (表示开始循环)、LOOP (表示返回上一个LOOPBEGIN处继续执行)、BREAK (表示结束循环)。循环语句的一般形式是:

    LOOPBEGIN

        语句1;

        语句2;

        ……

    LOOP;

循环语句一般是在满足一定条件时退出循环,所以循环语句一般都需要和条件语句组合使用,型如

LOOPBEGIN

        IF  条件

        THEN    BREAK;

        ENDIF;

        语句1;

        语句2;

        ……

LOOP;

一个例子

下面结合ABCR指标说明本软件自定义指标的语法。

指标名称:ABCR

指标注释:(空)

默认值:0

输入参数:M

局部变量:V1, V2, V3, V4, V5, V6, AV, I

参数指标:开盘价, 最高价, 最低价, 收盘价

结果指标:AR, BR, CR

指标文本:

———————————————————

V1 = 0;

V2 = 0;

V3 = 0;

V4 = 0;

V5 = 0;

V6 = 0;

I = 0;

开始循环;

        如果    I = M

        则 结束循环;       ////////////////////////////哈哈

        结束如果;

V1 = V1 + 最高价[I] 开盘价[I];

V2 = V2 + 开盘价[I] 最低价[I];

        如果    最高价[I] > 收盘价[I+1]

        则  V3 = V3 + 最高价[I] 收盘价[I+1];

        结束如果;

        如果    开盘价[I] > 收盘价[I+1]

        则  V4 = V4 + 开盘价[I] 收盘价[I+1];

        结束如果;

        AV = (最高价[I+1] + 最低价[I+1]) / 2;

        如果    最高价[I] > AV 则

            V5 = V5 + 最高价[I] AV;

        结束如果;

        如果    AV > 最低价[I] 则

            V6 = V6 + AV 最低价[I];

        结束如果;

        I = I + 1;

循环;

AR = V1 / V2;

BR = V3 / V4;

CR = V5 / V6;

———————————————————

文本的开始是7条赋值语句,分别把7个局部初始化为0;

V1 = 0;

V2 = 0;

V3 = 0;

V4 = 0;

V5 = 0;

V6 = 0;

I = 0;

接下来是一个循环体,这个循环体一直到I等于参数M时结束

开始循环;

如果  I = M

则结束循环;////////////////////////////哈哈

结束如果;

……

循环

在循环体中有4条赋值语句和5条条件判断语句我们举例说明:

V1 = V1 + 最高价[I] 开盘价[I];

是说把当前天往前第I天的最高价和开盘价的差值加到局部变量V1中。

V2 = V2 + 开盘价[I] 最低价[I];

是说把当前天往前第I天的开盘价和最低价的差值加到局部变量V2中。

如果  最高价[I] > 收盘价[I+1]

  V3 = V3 + 最高价[I] 收盘价[I+1];

结束如果;

是说如果当前天往前第I天的最高价大于第I+1天的收盘价,则把当前天往前第I天的最高价和第I+1天的收盘价的差值加到局部变量V3中。

AV = (最高价[I+1] + 最低价[I+1]) / 2;

是说把前天往前第I+1天的最高价和最低价的平均值赋给局部变量AV;

I = I + 1;

注意,这句话是让局部变量I加1,这句话是控制循环的次数用的,如果没有这句话,指标将会变成死循环,无法退出。

最后是三句赋值语句,分别给三个结果返回指标赋值。

AR = V1 / V2;

BR = V3 / V4;

CR = V5 / V6;