附录五 公式说明书
一、公式编写规则
      语言规范:
在自定义公式里面的各种符号(如,“; )只能用半角不能用全角。
关键字
if else while  break  continue  return (无大小写之分)
常数
浮点数、整数、字符串
分隔符
      ( ) ;  {  }  注释/* */
标识符
由字母和数字组成,由字母开头,不分大小写
运算符(优先级从高到低排列,同级同行)
*  /
+  -
==  !=  >  <  >=  <=
And
Or
语句
赋值    a = b
条件    IF (a==b) c=d;
循环    while a==b  c=d;
函数调用    func(a,b)
直接访问数据项的函数
例如:OPEN[t] t周期之前的开盘价
所有行情数据项(CLOSE等)都与此相同。
      标识符:
标识符在表达式中只存名称,值保留在符号表。标识符包括函数名、参数名和变量名。函数名用来传递函数返回值;参数名用于函数调用时的参数传递;变量名在计算中存储中间计算结果。
      分隔符:
符号
含义
引用字符串
 
引用字符
(  )
控制运算的优先级
 ;
每行语句的结束标志
}
将多个语句组合成一个语句体
/* */
注释,无任何实际功能
      赋值语句:
其一般形式为:
      a=b;        含义为将b的值付给a
      几个运算符“=”“:=”“:”“:>”。其含义分别为“赋值”、 “赋值”、“赋值并输出数值或字符串”、“赋值并输出图形”。
      注意:“=”和“:=”两个运算符的意义、用法完全相同。这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件。
      条件语句:
其一般形式为:
    IF(逻辑表达式语句1;
    ELSE  语句2;
上述结构表示: 如果逻辑表达式的值为非0(TURE)即真, 则执行语句1, 执行完语句1从语句2后开始继续向下执行; 如果表达式的值为0(FALSE)即假, 则跳过语句1而执行语句2
注意:
1、条件执行语句中"ELSE 语句2;"部分是选择项, 可以缺省, 此时条件语句变成:
    IF(逻辑表达式语句1;
    表示若逻辑表达式的值为非0则执行语句1 , 否则跳过语句1继续执行。
2、如果语句1或语句2有多于一条语句要执行时, 必须使用"{""}" 把这些语句包括在其中, 此时条件语句形式为:
    IF(逻辑表达式)    {  语句体1;  }
    ELSE    {  语句体2;  }
    这里语句体指多个语句,每个语句都必须以“;”结尾。
3. 条件语句可以嵌套, 这种情况经常碰到, 但条件嵌套语句容易出错 其原因主要是不知道哪个IF对应哪个ELSE
    例如:
    IF(x>20 OR x<-10)
    IF(y<=100 AND y>x)
        A"Good";
    ELSE
        B"Bad";
    对于上述情况, 规定: ELSE语句与最近的一个IF语句匹配, 上例
中的ELSEIF(y<=100 AND y>x)相匹配。为了使ELSEIF(x>20 OR x<-10)相匹配, 必须用花括号。如下所示:
    IF(x>20 OR x<-10)
    {    IF(y<=100 AND y>x)
        A="Good";    }
    ELSE    B="Bad";
4. 可用阶梯式IF-ELSE-IF结构。
  阶梯式结构的一般形式为:
    IF(逻辑表达式1)  语句1;
    ELSE IF(逻辑表达式2)  语句2;
    ELSE IF(逻辑表达式3)  语句3;
      循环语句:
while循环的一般形式为:
      while(条件语句;
    while循环表示当条件为真时, 便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。
      注意:
    1、可以有多层循环嵌套。
    2、语句可以是语句体, 此时必须用"{""}"括起来。
      break语句
break语句通常用在循环语句中。当break语句用while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。 即满足条件时便跳出循环。
      注意:
    1break语句对if-else的条件语句不起作用。
    2、在多层循环中, 一个break语句只向外跳一层。
      continue 语句
continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句只用在while循环体中, 常与if条件语句一起使用, 用来加速循环。
      函数调用:
    调用函数的基本方式为:函数名(参数,参数,…)
      其返回值为函数里面的return语句规定的返回值。若无return语句,则返回被调用函数里,以函数名命名的变量的值。若无以函数名命名的变量,则返回最后一个输出的值。若无输出的值,则返回最后一个被调用的语句的值。
      例如:调用KDJ指标。KDJ函数的名称为kdj,其参数和内容如下:
交易时间字符串是什么
参数名
最小值
最大值
默认值
N1
1
100
9
M1
2
40
3
M2
2
40
3
  函数内容为:
  RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
  K:SMA(RSV,M1,1);
  D:SMA(K,M2,1);
J:3*K-2*D
      则当您在其它函数里输入a=KDJ(8,6,6)的时候,相当于计算N18M16M26时的J值,并把这个值赋给a
注意:
      1、当传递的参数数目不等于被调用函数设置的参数数目时。
              a、没有传递参数。则采用原来设置的默认参数计算。
      b、传递参数少于被调用函数设置的参数数目。则将参数传过去,依次改变前面同样数目参数的值,后面其它的参数采用原来设置的默认参数计算。
c、传递参数大于被调用函数设置的参数数目。则将参数传过去,依次改变被调用函数的参数值,多余的参数不起作用。
2、函数名称不区分大小写。
3、新建的函数,其函数名可能与其它以存在的函数里面的内部变量重名。这样在调用那个函数时,那个内部变量将变成对这个新建函数的函数调用,从而产生错误。所以,在新建函数起名时要注意。
返回值:自定义公式里面如果有多数据项输出,则调用此函数的时候返回值默认为最后一个输出。如果希望确定某项输出则可用return,或者将函数名指定为其中一项输出。
      关于“空”:
  所谓“空”即指没有数据。在某些情况下,一些数据项可能取不到数据,这时返回值为“空”。例如,yearrep(&jlr,4),其含义为取该公司3年前年报的净利润。如果某家公司上市时间较短,而无三年前的年报数据,则其值为“空”。
      1、“空”与任何数据作计算时,相应计算被取消。
      例如:7×NULL(即“空”)得到的结果为7
      2、“空”与任何数据比较大小时,“空”较小。
      例如:-7>NULL(即“空”)得到的结果为1(即条件满足)。
      这样的结果可能与您原来希望得到的数值不符,如果您想避免这种情况可以用ISNULL函数来判断某个数据是否为“空”(相关说明见后面的系统函数说明部分)。
二、行情数据说明
      行情数据指的是从主站直接发过来的各项与行情有关的数据。
      代码与周期:
代码与周期
      由于证券市场里的各项数据都与代码、时间密切相关,所以在这里的各项数据都只能用于特定的一类或几类代码及相应的一个或几个周期。(注意:同一个数据项可能适用于多类代码及多个周期,其具体的数值也将不同。)
      代码的分类:个股(含债券)。沪深指数(仅1A0001(统计上海AB股基金)、1A0002(统计上海A股)、1A0003(统计上海B股)、399001(统计深圳AB股基金)、399002(统计深圳A股)、399003(统计深圳B股)六个指数)。期货。
      周期分类:实时(记录当前传过来的数据)、成交明细(记录每一笔成交的数据)、分时(记录每分钟成交的数据)、分钟K线(以1分钟为单位的K线数据)、日K线(以1个交易日为单位的K线数据)。
注意: 一、分时与分钟K线的区别在于:分钟K线数据较多,包含了与K线相关的高、开、低、收、成交次数等数据。二、沪深指数没有成交明细周期的数据。三、适用于分钟K线、日K线周期的所有数据,都同时适用于个股与沪深指数,只不过其数据内容不同而已。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。