
同花顺公式编写规则和方法(一).doc
49页同花顺公式编写规则和方法(一)语言规范:在自定义公式里面的各种符号(如,“;” )只能用半角不能用全角关键字if else while break continue return (无大小写之分)常数浮点数、整数、字符串分隔符“ ” ‘ ' ( ) ; { } 注释标识符由字母和数字组成,由字母开头,不分大小写运算符(优先级从高到低排列,同级同行)* /+ -== != > = ”其含义分别为“赋值”、 “赋值”、“赋值并输出数值或字符串”、“赋值并输出图形”注意:“=”和“:=”两个运算符的意义、用法完全相同这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件条件语句:其一般形式为: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 xx)A="Good";ELSEB="Bad";对于上述情况, 规定: ELSE 语句与最近的一个 IF 语句匹配, 上例中的 ELSE 与 IF(yx)相匹配为了使 ELSE 与 IF(x>20 OR x20 OR xx)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 语句联在一起 即满足条件时便跳出循环注意:1、break 语句对 if-else 的条件语句不起作用2、在多层循环中, 一个 break 语句只向外跳一层continue 语句continue 语句的作用是跳过循环本中剩余的语句而强行执行下一次循环continue 语句只用在 while 循环体中, 常与 if 条件语句一起使用, 用来加速循环函数调用:调用函数的基本方式为:函数名(参数,参数,…)其返回值为函数里面的 return 语句规定的返回值若无 return 语句,则返回被调用函数里,以函数名命名的变量的值若无以函数名命名的变量,则返回最后一个输出的值若无输出的值,则返回最后一个被调用的语句的值例如:调用 KDJ 指标KDJ 函数的名称为 kdj,其参数和内容如下:参数名 最小值 最大值默认值N1 1 100 9M1 2 40 3M2 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)的时候,相当于计算 N1=8,M1=6,M2=6 时的 J 值,并把这个值赋给 a。
注意:1、当传递的参数数目不等于被调用函数设置的参数数目时a、没有传递参数则采用原来设置的默认参数计算b、传递参数少于被调用函数设置的参数数目则将参数传过去,依次改变前面同样数目参数的值,后面其它的参数采用原来设置的默认参数计算c、传递参数大于被调用函数设置的参数数目则将参数传过去,依次改变被调用函数的参数值,多余的参数不起作用2、函数名称不区分大小写3、新建的函数,其函数名可能与其它以存在的函数里面的内部变量重名这样在调用那个函数时,那个内部变量将变成对这个新建函数的函数调用,从而产生错误所以,在新建函数起名时要注意返回值:自定义公式里面如果有多数据项输出,则调用此函数的时候返回值默认为最后一个输出如果希望确定某项输出则可用 return,或者将函数名指定为其中一项输出关于“空”:所谓“空”即指没有数据在某些情况下,一些数据项可能取不到数据,这时返回值为“空”例如,yearrep(&jlr,4),其含义为取该公司 3 年前年报的净利润如果某家公司上市时间较短,而无三年前的年报数据,则其值为“空”1、“空”与任何数据作计算时,相应计算被取消例如:7×NULL(即“空”)得到的结果为 7。
2、“空”与任何数据比较大小时,“空”较小例如:-7>NULL(即“空”)得到的结果为 1(即条件满足)这样的结果可能与您原来希望得到的数值不符,如果您想避免这种情况可以用 ISNULL函数来判断某个数据是否为“空”(相关说明见后面的系统函数说明部分)公式编写规则代码与周期:由于证券市场里的各项数据都与代码、时间密切相关,所以在这里的各项数据都只能用于特定的一类或几类代码及相应的一个或几个周期注意:同一个数据项可能适用于多类代码及多个周期,其具体的数值也将不同代码的分类:个股(含债券)沪深指数(仅 1A0001(统计上海 A、B 股基金)、1A0002(统计上海 A 股)、1A0003(统计上海 B 股)、399001(统计深圳 A、B 股基金)、399002(统计深圳 A 股)、399003(统计深圳 B 股)六个指数)周期分类:实时(记录当前传过来的数据)、成交明细(记录每一笔成交的数据)、分时(记录每分钟成交的数据)、分钟 K 线(以 1 分钟为单位的 K 线数据)、日 K 线(以1 个交易日为单位的 K 线数据)注意:一、分时与分钟 K 线的区别在于:分钟 K 线数据较多,包含了与 K 线相关的高、开、低、收、成交次数等数据。
二、沪深指数没有成交明细周期的数据三、适用于分钟 K 线、日 K 线周期的所有数据,都同时适用于个股与沪深指数,只不过其数据内容不同而已由于行情数据和财务数据同属于基本数据项,即其数值是主站端直接发过来,所以他们自身并不带周期而其它计算项,即由客户端编写公式计算得到的数据项都是带有周期的也就是说在编写一个公式的时候我们需要确定一个周期(由于分钟 K 线、日 K 线周期里的各项数据仅有微小差别,所以统称为技术分析周期),并且想清楚这个公式里调用的各项基本数据在这个周期下的具体含义以后只有在这个周期下才能调用这个公式注意:基本数据项自身并不带周期,也就是说编写公式的时候,如果所选用的周期不在此数据项的适用范围内,测试公式的时候系统是不会报错的,但这个数据项的数值将为“空”,即取不到任何数据注意:所有的基本数据项都可以直接拖到表格里,它将依照表格的代码、周期而显示相应的数值也都可以直接拖到窗口里作为一个曲线输出,但一般不推荐这样做,如果要画曲线最好新编写一个“曲线公式”另外,各个数据项用于期货时的意义另文说明通用数据项:NEW(现价)含义:用于个股时为最近一笔成交的价格用于沪深指数时为最近一次从交易所传来的指数值。
用于:个股的实时、成交明细周期沪深指数的实时周期NEWVOL(现手)含义:用于个股时为最近一笔成交的成交量用于沪深指数时为对应市场的所有股票的最后一笔成交量之和用于:个股的实时、成交明细周期沪深指数的实时周期INVOL(内盘)、OUTVOL(外盘)含义:内盘、外盘(又称为主动性抛盘、主动性买盘)成交量判断依据为若某笔成交,其价格小于等于前一次传过来的买一的价格,则称为内盘;若其价格大于等于前一次传过来的卖一的价格,则称为外盘注意,内外盘之和一般不等于总成交量)在周期为“实时”、“分时”时,为当日的内、外盘在周期为“分钟 K 线”和“日 K 线”时,分别为某一分钟和某一日的内、外盘用于指数时指所有相应股票的内、外盘之和用于:个股的实时、分时、分钟 K 线、日 K 线周期沪深指数的实时、分时、分钟 K 线、日 K 线周期OPEN(开盘)、HIGH(最高)、LOW(最低)含义:在实时周期时,为当日的开盘价、最高价、最低价在分钟 K 线、日 K 线周期时,分别为当周期的开盘价、最高价、最低价用于:个股的实时、分钟 K 线、日 K 线周期沪深指数的实时、分钟 K 线、日 K 线周期CLOSE(收盘)含义:当周期的收盘价。
用于:个股的分钟 K 线、日 K 线周期沪深指数的分钟 K 线、日 K 线周期PRE(昨收)含义:上一交易日的收盘价注意,在分钟 K 线周期,也是昨日收盘价,而不是上一周期的收盘价如果当天有除权,则其值为除权之后的昨日收盘价例如:某股票昨天收盘 20 元,今天除权,10 送 10则今日 PRE 值为 10 元用于:所有类型、所有周期MONEY(金额)含义:在实时、分时周期时代表当日的成交金额只和在分钟 K 线、日 K 线周期时代表那一个周期的成交金额只和当用于指数时,指此指数所包含所有交易品种成交金额之和用于:个股的实时、分时、分钟 K 线、日 K 线周期沪深指数的实时、分时、分钟 K 线、日 K 线周期VOL(总手)含义:在实时、分时、成交明细周期时代表当日的成交量只和在分钟 K 线、日 K 线周期时代表那一个周期的成交量只和当用于指数时,指此指数所包含所有交易品种成交量之和用于:个股的实时、分时、成交明细、分钟 K 线、日 K 线周期沪深指数的实时、分时、分钟 K 线、日 K 线周期注意,VOL 与 MONEY 相比多了一个成交明细周期OPENVOL(开盘量)含义:开盘时第一笔成交的成交量。
当用于指数时,指此指数所包含所有交易品种开盘集合竞价成交量之和用于:个股的实时、日 K 线周期沪深指数的实时、日 K 线周期ZQMC(名称)、CODE&TYPE(代码)含义:证券的名称、代码用于:个股的所有周期沪深指数的所有周期DATETIME(时间)含义:显示时间当用于不同周期的时候,系统会自动传送相应的时间类型而具体的显示方案则在“窗口属性”的“时间坐标”项里的“时间格式”一栏里选择用于:个股、沪深指数所有的周期VALIDBEGIN(起始)、VALIDEND(终止)含义:区间统计的起始、终止时间当用于不同周期的时候,系统会自动传送相应的时间类型而具体的显示方案则在“窗口属性”的“时间坐标”项里的“时间格式”一栏里选择与 DATETIME(时间)的用法类似用于:个股、沪深指数所有的周期仅用于个股的数据项:FIVEDAYVOL(五日总量)含义:过去五日各交易成交量之和用于:个股的所有的周期主要用来计算量比)BUYPRICE1(买一)、BUYPRICE2(买二)、BUYPRICE3(买三)、SELLPRICE1(卖一)、SELLPRICE2(卖二)、SELLPRICE3(卖三)、BUYCOUNT1(买一。












