分享

股票公式编写规则

 镜馨苑 2016-08-14

公式编写规则

语言规范:

在自定义公式里面的各种符号(如,“;” )只能用半角不能用全角。

关键字

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语句匹配, 上例

中的ELSE与IF(y<=100 AND y>x)相匹配。为了使ELSE与IF(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语句联在一起。 即满足条件时便跳出循环。

注意:

1、break语句对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)的时候,相当于计算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(买一量)、BUYCOUNT2(买二量)、BUYCOUNT3(买三量)、SELLCOUNT1(卖一量)、SELLCOUNT2(卖二量)、SELLCOUNT3(卖三量)

含义:委托买入、卖出价格一、二、三及对应的委托数量。

用于:个股的实时周期。

VOLAMOUNT(成交次数)

含义:在周期为“实时”时,为当日的成交次数。在周期为“分钟K线”和“日K线”时,分别为某一分钟和某一日的成交次数。

用于:个股的实时、分钟K线、日K线周期。

VOLCLASS(成交量分类)

含义:其数值与该笔成交的价位关系为:“3”为“成交价<=买三价”,“2”为“买三价<成交价<=买二价”,“1”为“买二价<成交价<=买一价”,“0”为“买一价<成交价<卖一价”,“5”为“卖一价<=成交价<卖二价”,“6”为“卖二价<=成交价<卖三价”,“5”为“卖三价<=成交价”。(注意,这里的买卖盘的价格都是指上一次传过来的价格,与内外盘原理相同。也可以将“成交量分类”视为划分更为详细的内外盘。)

用于:个股的实时、分时、成交明细。

SELLPRICE(卖出)、BUYPRICE(买入)

含义:本次成交时的委托卖出、买入价。即用于成交明细的买一价、卖一价。

用于:个股的成交明细周期。

仅适用于大盘的数据项:

SELLCOUNT(委卖)、BUYCOUNT(委买)

含义:当前本类指数所有股票的卖出数量、买入数量之和。

用于:沪深指数的实时、分时周期。

FALLTREND(下跌趋势)、RISETREND(上涨趋势)

含义:当前本类指数所有下跌、上涨股票的最新价之和除以本类指数所有股票的最新价之和。

用于:沪深指数的实时、分时周期。

FALLCOUNT(下跌家数)、RISECOUNT(上涨家数)

含义:当前本类指数所有下跌、上涨股票的家数之和。

用于:沪深指数的实时、分时周期。

INDEXLEAD(领先指标)

含义:即不加权的指标涨跌幅再乘以10000。具体地说就是,设A=“当前本类指数所有股票的最新价之和”,B=“当前本类指数所有股票的昨日收盘价”。那么INDEXLEAD=(A-B)/B×10000。

用于:沪深指数的实时、分时周期。

TOTALSTOCK(本类股票总数)

含义:本类股票家数之和。

用于:沪深指数的实时周期。

其它数据项:

CODETYPE(证券类型)

含义:指明当前商品的类型。当返回值是0时为指数、1是A股、2是B股、3是债券、4是基金。

用于:个股、指数的各种周期。

MARKETTYPE(市场类别)、INDEXTYPE(指数种类)

这两个数据项属于保留数据项,目前暂时没用,可能会在以后用到。

财务数据说明

这里的财务数据项都是根据财政部制定的《企业会计制度》(于2001年1月1日起执行)里面规定的季报、中报、年报的各种报表里面的项目编列的。每一项的具体含义都与《企业会计制度》(2001)里面的规定完全相同。另外我们还依照上市公司的特性将十大股东的名称、持股数,股东人数,股本结构,权息资料都列在财务数据项中。

由于数据众多(公司、基本有1300多家,几乎每家的数据项都达400多项,且每项又分不同的时期)所以这个数据库相当庞大,检索起来较慢且消耗大量系统资源。因此我们设立了“常用数据项”目录,这里面有100项左右常用的财务数据,含盖了股民在绝大多数情况下的需求。这些数据被放在一个特殊的数据文件里面检索速度很快且系统资源占用量较小。所以大家一般编写公式就在“常用数据项”目录里面找相关的数据就可以了。而其它的那些数据都是用SQL数据库检索,建议只提供给少数重要客户。

注意: 用纯财务数据写的计算项放在表格里面的时候,周期要选择日线,否则无法显示。而在其它情况下,财务数据项适用于任何周期。

条件语句 ”。

引用函数:

1、满足条件的周期数:统计满足条件的周期数。

用法:COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。例如:COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数。

2、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。

用法:BARSSINCE(X):第一次X不为0到现在的天数。例如:BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数。

3、上一次条件成立到当前的周期数:上一次条件成立到当前的周期数。

用法:BARSLAST(X),上一次X不为0到现在的天数。例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1,1)表示上一个涨停板到当前的周期数。

4、有效周期数:求总的周期数。

用法:BARSCOUNT(X),第一个有效数据到当前的天数。

5、向前赋值:将当前位置到若干周期前的数据设为1。

用法:BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0。

6、求和:求总和。

用法:SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。例如:SUM(VOL,5)周期设为日线时,表示最近5个交易日的成交量之和。SUM(VOL,0)表示从传数据过来第一天起的成交量总和,具体如在区间统计里统计“总手” SUM(VOL,0)即是指全区间的成交量之和。

7、移动平均:求移动平均。

用法: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,30,1)表示求30日移动平均价。

8、向前引用:引用若干周期前的数据。

用法:REF(X,A),引用A周期前的X值。例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收。

9、简单移动平均:求简单移动平均。

用法:MA(X,N),求X的N日移动平均值。算法:(X1+X2+X3+,,,+Xn)/N。例如:MA(CLOSE,10)表示求10日均价。

10、最低值:求最低值。

用法:LLV(X,N),求N周期内X最低值,N=0则从第一个有效值开始。例如:LLV(LOW,0)表示求历史最低价。

11、最高值:求最高值。

用法:HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始。 例如:HHV(HIGH,30)表示求30日最高价。

12、指数平滑移动平均:求指数平滑移动平均。

用法:EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。例如:EMA(CLOSE,30)表示求30日指数平滑均价。

13、动态移动平均:求动态移动平均。

用法:DMA(X,A),求X的动态移动平均。算法: 若Y=DMA(X,A)则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价。

14、最高值周期数:求上一高点到当前的周期数。

用法:HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。例如:HHVBARS(HIGH,0)求得历史新高到到当前的周期数。

15、最低值周期数:求上一低点到当前的周期数。

用法:LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。例如:LLVBARS(HIGH,10)求得10日最低点到当前的周期数。

16、加权移动平均:求加权移动平均。

用法:WMA(X,A),求X的加权移动平均。

算法:若Y=WMA(X,A) 则Y=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*XN)/(N+(N-1)+(N-2)+...+1) X0表示本周期值,X1表示上一周期值...。

例如:WMA(CLOSE,20)表示求20日加权均价。

17、求和:向前累加到指定值到现在的周期数。

用法:SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数。

时间函数:

1、总开盘分钟:求当前代码类型的开市交易时间。

用法:TRADETIME。返回交易时间,单位为分钟。目前一般市场都返回242,与日期或具体的股票无关。

2、距开盘分钟:求当前时刻距开盘有多长时间。

用法:FROMOPEN。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回31。

3、距午夜秒:求当前时刻距开盘有多长时间。

用法:FROMNIGHT。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回36000。

4、时间格式:转换时间格式。

用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。

5、时间差:计算两个时间之间的差。

用法:COUNTTIME(N,L,K)。N、L为时间,其格式为YYYYMMDD。K为1、2或者3。当K为1时返回第二个之间比第一个时间晚多少年。当K为2时返回第二个之间比第一个时间晚多少月。当K为3时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME(20000808,19990606,2)其返回值为-2。注意:这里返回值有正负号。

算术函数:

1、绝对值:求绝对值。

用法:ABS(X)返回X的绝对值。例如:ABS(-34)返回34。

2、介于:介于两个数之间。

用法:BETWEEN(A,B,C)表示A处于B和C之间时返回1,否则返回0

例如:BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间。

3、最大值:求最大值。

用法:MAX(A,B)返回A和B中的较大值。例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0。

4、最小值:求最小值。

用法:MIN(A,B)返回A和B中的较小值。例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值。

5、求模运算:求模运算。

用法:MOD(A,B)返回A对B求模。例如:MOD(26,10)返回6。

6、求逻辑非:求逻辑非。

用法:NOT(X)返回非X,即当X=0时返回1,否则返回0。例如:NOT(5>3)返回0。

7、范围:介于某个范围之间。

用法:RANGE(A,B,C)表示A大于B同时小于C时返回1,否则返回0。例如:RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收盘价大于5日均线并且小于10日均线。

8、求相反数:求相反数。

用法:REVERSE(X)返回-X。 例如REVERSE(CLOSE)返回-CLOSE。

9、余弦值:求余弦值。

用法:COS(X)返回X的余弦值。

10、正弦值:求正弦值。

用法:SIN(X)返回X的正弦值。

11、平方根:开平方。

用法:SQRT(X)为X的平方根。例如:SQRT(CLOSE)收盘价的平方根。

12、上穿:两条线交叉。

用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0。例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉。

13、维持:两条线维持一定周期后交叉。

用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0。例如:LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉。

14、空:判断是否为空。

用法:ISNULL(A)表示如果A为空(即没有数据)则返回1,否则返回0。

15、幂:求幂。

用法:POW(X,Y)。求X的Y次幂。例如:POW(2,3)为8。

统计函数:

1、标准差:求标准差。

用法:STD(X,N)为X的N日估算标准差。

2、商品数据:求与具体某种商品相关的数据。

用法:INDEXDATA(“N”,&X,K)。N为商品代码。X为数据项。K为周期数(可以不加)。INDEXDATA(“1A0001”,&LOW,3)为3天前上证指数的最低点位。

3、线性回归斜率:求某个数据的线性回归。

用法:SLOPE(X,N)为X的N周期线性回归线的斜率。例如:SLOPE(CLOSE,10)表示求10周期线性回归线的斜率

4、线性回归预测值:以某个数据的线性回归斜率向后延伸一个周期得到的数值。

用法:FORCAST(X,N)为X的N周期线性回归预测值。例如:FORCAST(CLOSE,10)表示求10周期线性回归预测本周期收盘价。

5、总体标准差:求总体标准差

用法:STDP(X,N)为X的N日总体标准差。

6、估算样本方差:求估算样本方差。

用法:VAR(X,N)为X的N日估算样本方差。

7、总体样本方差:求总体样本方差。

用法:VARP(X,N)为X的N日总体样本方差。

“技术指标” 下面的“曲线”目录里面。

“智能分析”

“技术指标简介”

交易系统就是设定某种买卖条件,当满足条件的时候就在 K 线上画出买入、卖出的提示箭头,用于分析买卖策略的一种工具。从某种意义上说交易系统也是一种绘图曲线,也是通过编写公式完成的,这里列出了“同花顺” 提供的各种交易系统。

编写交易系统的方法与编写一般曲线类似,是不过一般曲线是连续的输出,而交易系统是满足买卖条件的时候输出买入、卖出的曲线标志而已。输出曲线标志用“ :> ”。

例如, MACD 交易系统的公式内容如下:

DIFF= EMA ( CLOSE ,SHORT) - EMA ( CLOSE ,LONG);

DEA = EMA (DIFF,M);

MACD1 = 2 *(DIFF-DEA);

IF ( CROSS (diff,dea))

a :> "buy" ;

IF ( CROSS (dea,diff))

b :> "sell" ;

五彩 K 线是依照一定规则将普通 K 线标成多种不同的颜色,以突出某种 K 线形态的曲线公式。这里列有早晨之星、黄昏之星、十字星、长十字星、红绿灯等各种五彩 K 线。

五彩 K 线的编写方法与一般 K 线类似。只是一般 K 线公式以开盘价、收盘价为颜色判断的依据,而五彩 K 线则采用各种不同的形态为颜色判断依据。下面列出普通 K 线公式与“三红兵”五彩 K 线公式:

普通 K 线公式:

IF ( CLOSE > OPEN )

RETURN " 阳 " ;

ELSE IF ( CLOSE < OPEN )

RETURN " 阴 " ;

ELSE IF ( CLOSE == OPEN AND OPEN >= CLOSE [ 1 ])

RETURN " 阳 " ;

ELSE IF ( CLOSE == OPEN AND OPEN <= CLOSE [ 1 ])

RETURN "阴" ;

“三红兵”五彩 K 线公式:

IF ( CLOSE [ 2 ]> OPEN [ 2 ] AND CLOSE [ 1 ]> OPEN [ 1 ] AND CLOSE > OPEN AND

CLOSE [ 1 ]> CLOSE [ 2 ] AND CLOSE > CLOSE [ 1 ])

{ RETURN BACKSET ( "colorred" , 2 );}

ELSE RETURN "colorgreen" ;

公式编写规则

语言规范:

在自定义公式里面的各种符号(如,“;” )只能用半角不能用全角。

关键字

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语句匹配, 上例

中的ELSE与IF(y<=100 AND y>x)相匹配。为了使ELSE与IF(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语句联在一起。 即满足条件时便跳出循环。

注意:

1、break语句对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)的时候,相当于计算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(买一量)、BUYCOUNT2(买二量)、BUYCOUNT3(买三量)、SELLCOUNT1(卖一量)、SELLCOUNT2(卖二量)、SELLCOUNT3(卖三量)

含义:委托买入、卖出价格一、二、三及对应的委托数量。

用于:个股的实时周期。

VOLAMOUNT(成交次数)

含义:在周期为“实时”时,为当日的成交次数。在周期为“分钟K线”和“日K线”时,分别为某一分钟和某一日的成交次数。

用于:个股的实时、分钟K线、日K线周期。

VOLCLASS(成交量分类)

含义:其数值与该笔成交的价位关系为:“3”为“成交价<=买三价”,“2”为“买三价<成交价<=买二价”,“1”为“买二价<成交价<=买一价”,“0”为“买一价<成交价<卖一价”,“5”为“卖一价<=成交价<卖二价”,“6”为“卖二价<=成交价<卖三价”,“5”为“卖三价<=成交价”。(注意,这里的买卖盘的价格都是指上一次传过来的价格,与内外盘原理相同。也可以将“成交量分类”视为划分更为详细的内外盘。)

用于:个股的实时、分时、成交明细。

SELLPRICE(卖出)、BUYPRICE(买入)

含义:本次成交时的委托卖出、买入价。即用于成交明细的买一价、卖一价。

用于:个股的成交明细周期。

仅适用于大盘的数据项:

SELLCOUNT(委卖)、BUYCOUNT(委买)

含义:当前本类指数所有股票的卖出数量、买入数量之和。

用于:沪深指数的实时、分时周期。

FALLTREND(下跌趋势)、RISETREND(上涨趋势)

含义:当前本类指数所有下跌、上涨股票的最新价之和除以本类指数所有股票的最新价之和。

用于:沪深指数的实时、分时周期。

FALLCOUNT(下跌家数)、RISECOUNT(上涨家数)

含义:当前本类指数所有下跌、上涨股票的家数之和。

用于:沪深指数的实时、分时周期。

INDEXLEAD(领先指标)

含义:即不加权的指标涨跌幅再乘以10000。具体地说就是,设A=“当前本类指数所有股票的最新价之和”,B=“当前本类指数所有股票的昨日收盘价”。那么INDEXLEAD=(A-B)/B×10000。

用于:沪深指数的实时、分时周期。

TOTALSTOCK(本类股票总数)

含义:本类股票家数之和。

用于:沪深指数的实时周期。

其它数据项:

CODETYPE(证券类型)

含义:指明当前商品的类型。当返回值是0时为指数、1是A股、2是B股、3是债券、4是基金。

用于:个股、指数的各种周期。

MARKETTYPE(市场类别)、INDEXTYPE(指数种类)

这两个数据项属于保留数据项,目前暂时没用,可能会在以后用到。

财务数据说明

这里的财务数据项都是根据财政部制定的《企业会计制度》(于2001年1月1日起执行)里面规定的季报、中报、年报的各种报表里面的项目编列的。每一项的具体含义都与《企业会计制度》(2001)里面的规定完全相同。另外我们还依照上市公司的特性将十大股东的名称、持股数,股东人数,股本结构,权息资料都列在财务数据项中。

由于数据众多(公司、基本有1300多家,几乎每家的数据项都达400多项,且每项又分不同的时期)所以这个数据库相当庞大,检索起来较慢且消耗大量系统资源。因此我们设立了“常用数据项”目录,这里面有100项左右常用的财务数据,含盖了股民在绝大多数情况下的需求。这些数据被放在一个特殊的数据文件里面检索速度很快且系统资源占用量较小。所以大家一般编写公式就在“常用数据项”目录里面找相关的数据就可以了。而其它的那些数据都是用SQL数据库检索,建议只提供给少数重要客户。

注意: 用纯财务数据写的计算项放在表格里面的时候,周期要选择日线,否则无法显示。而在其它情况下,财务数据项适用于任何周期。

条件语句 ”。

引用函数:

1、满足条件的周期数:统计满足条件的周期数。

用法:COUNT(X,N),统计N周期中满足X条件的周期数,若N=0则从第一个有效值开始。例如:COUNT(CLOSE>OPEN,20)表示统计20周期内收阳的周期数。

2、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。

用法:BARSSINCE(X):第一次X不为0到现在的天数。例如:BARSSINCE(HIGH>10)表示股价超过10元时到当前的周期数。

3、上一次条件成立到当前的周期数:上一次条件成立到当前的周期数。

用法:BARSLAST(X),上一次X不为0到现在的天数。例如:BARSLAST(CLOSE/REF(CLOSE,1)>=1,1)表示上一个涨停板到当前的周期数。

4、有效周期数:求总的周期数。

用法:BARSCOUNT(X),第一个有效数据到当前的天数。

5、向前赋值:将当前位置到若干周期前的数据设为1。

用法:BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1。例如:BACKSET(CLOSE>OPEN,2)若收阳则将该周期及前一周期数值设为1,否则为0。

6、求和:求总和。

用法:SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。例如:SUM(VOL,5)周期设为日线时,表示最近5个交易日的成交量之和。SUM(VOL,0)表示从传数据过来第一天起的成交量总和,具体如在区间统计里统计“总手” SUM(VOL,0)即是指全区间的成交量之和。

7、移动平均:求移动平均。

用法: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,30,1)表示求30日移动平均价。

8、向前引用:引用若干周期前的数据。

用法:REF(X,A),引用A周期前的X值。例如:REF(CLOSE,1)表示上一周期的收盘价,在日线上就是昨收。

9、简单移动平均:求简单移动平均。

用法:MA(X,N),求X的N日移动平均值。算法:(X1+X2+X3+,,,+Xn)/N。例如:MA(CLOSE,10)表示求10日均价。

10、最低值:求最低值。

用法:LLV(X,N),求N周期内X最低值,N=0则从第一个有效值开始。例如:LLV(LOW,0)表示求历史最低价。

11、最高值:求最高值。

用法:HHV(X,N),求N周期内X最高值,N=0则从第一个有效值开始。 例如:HHV(HIGH,30)表示求30日最高价。

12、指数平滑移动平均:求指数平滑移动平均。

用法:EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。例如:EMA(CLOSE,30)表示求30日指数平滑均价。

13、动态移动平均:求动态移动平均。

用法:DMA(X,A),求X的动态移动平均。算法: 若Y=DMA(X,A)则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。例如:DMA(CLOSE,VOL/CAPITAL)表示求以换手率作平滑因子的平均价。

14、最高值周期数:求上一高点到当前的周期数。

用法:HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。例如:HHVBARS(HIGH,0)求得历史新高到到当前的周期数。

15、最低值周期数:求上一低点到当前的周期数。

用法:LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。例如:LLVBARS(HIGH,10)求得10日最低点到当前的周期数。

16、加权移动平均:求加权移动平均。

用法:WMA(X,A),求X的加权移动平均。

算法:若Y=WMA(X,A) 则Y=(N*X0+(N-1)*X1+(N-2)*X2)+...+1*XN)/(N+(N-1)+(N-2)+...+1) X0表示本周期值,X1表示上一周期值...。

例如:WMA(CLOSE,20)表示求20日加权均价。

17、求和:向前累加到指定值到现在的周期数。

用法:SUMBARS(X,A):将X向前累加直到大于等于A,返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数。

时间函数:

1、总开盘分钟:求当前代码类型的开市交易时间。

用法:TRADETIME。返回交易时间,单位为分钟。目前一般市场都返回242,与日期或具体的股票无关。

2、距开盘分钟:求当前时刻距开盘有多长时间。

用法:FROMOPEN。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回31。

3、距午夜秒:求当前时刻距开盘有多长时间。

用法:FROMNIGHT。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回36000。

4、时间格式:转换时间格式。

用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。

5、时间差:计算两个时间之间的差。

用法:COUNTTIME(N,L,K)。N、L为时间,其格式为YYYYMMDD。K为1、2或者3。当K为1时返回第二个之间比第一个时间晚多少年。当K为2时返回第二个之间比第一个时间晚多少月。当K为3时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME(20000808,19990606,2)其返回值为-2。注意:这里返回值有正负号。

算术函数:

1、绝对值:求绝对值。

用法:ABS(X)返回X的绝对值。例如:ABS(-34)返回34。

2、介于:介于两个数之间。

用法:BETWEEN(A,B,C)表示A处于B和C之间时返回1,否则返回0

例如:BETWEEN(CLOSE,MA(CLOSE,10),MA(CLOSE,5))表示收盘价介于5日均线和10日均线之间。

3、最大值:求最大值。

用法:MAX(A,B)返回A和B中的较大值。例如:MAX(CLOSE-OPEN,0)表示若收盘价大于开盘价返回它们的差值,否则返回0。

4、最小值:求最小值。

用法:MIN(A,B)返回A和B中的较小值。例如:MIN(CLOSE,OPEN)返回开盘价和收盘价中的较小值。

5、求模运算:求模运算。

用法:MOD(A,B)返回A对B求模。例如:MOD(26,10)返回6。

6、求逻辑非:求逻辑非。

用法:NOT(X)返回非X,即当X=0时返回1,否则返回0。例如:NOT(5>3)返回0。

7、范围:介于某个范围之间。

用法:RANGE(A,B,C)表示A大于B同时小于C时返回1,否则返回0。例如:RANGE(CLOSE,MA(CLOSE,5),MA(CLOSE,10))表示收盘价大于5日均线并且小于10日均线。

8、求相反数:求相反数。

用法:REVERSE(X)返回-X。 例如REVERSE(CLOSE)返回-CLOSE。

9、余弦值:求余弦值。

用法:COS(X)返回X的余弦值。

10、正弦值:求正弦值。

用法:SIN(X)返回X的正弦值。

11、平方根:开平方。

用法:SQRT(X)为X的平方根。例如:SQRT(CLOSE)收盘价的平方根。

12、上穿:两条线交叉。

用法:CROSS(A,B)表示当A从下方向上穿过B时返回1,否则返回0。例如:CROSS(MA(CLOSE,5),MA(CLOSE,10))表示5日均线与10日均线交金叉。

13、维持:两条线维持一定周期后交叉。

用法:LONGCROSS(A,B,N)表示A在N周期内都小于B,本周期从下方向上穿过B时返回1,否则返回0。例如:LONGCROSS(MA(CLOSE,5),MA(CLOSE,10),5)表示5日均线维持5周期后与10日均线交金叉。

14、空:判断是否为空。

用法:ISNULL(A)表示如果A为空(即没有数据)则返回1,否则返回0。

15、幂:求幂。

用法:POW(X,Y)。求X的Y次幂。例如:POW(2,3)为8。

统计函数:

1、标准差:求标准差。

用法:STD(X,N)为X的N日估算标准差。

2、商品数据:求与具体某种商品相关的数据。

用法:INDEXDATA(“N”,&X,K)。N为商品代码。X为数据项。K为周期数(可以不加)。INDEXDATA(“1A0001”,&LOW,3)为3天前上证指数的最低点位。

3、线性回归斜率:求某个数据的线性回归。

用法:SLOPE(X,N)为X的N周期线性回归线的斜率。例如:SLOPE(CLOSE,10)表示求10周期线性回归线的斜率

4、线性回归预测值:以某个数据的线性回归斜率向后延伸一个周期得到的数值。

用法:FORCAST(X,N)为X的N周期线性回归预测值。例如:FORCAST(CLOSE,10)表示求10周期线性回归预测本周期收盘价。

5、总体标准差:求总体标准差

用法:STDP(X,N)为X的N日总体标准差。

6、估算样本方差:求估算样本方差。

用法:VAR(X,N)为X的N日估算样本方差。

7、总体样本方差:求总体样本方差。

用法:VARP(X,N)为X的N日总体样本方差。

“技术指标” 下面的“曲线”目录里面。

“智能分析”

“技术指标简介”

交易系统就是设定某种买卖条件,当满足条件的时候就在 K 线上画出买入、卖出的提示箭头,用于分析买卖策略的一种工具。从某种意义上说交易系统也是一种绘图曲线,也是通过编写公式完成的,这里列出了“同花顺” 提供的各种交易系统。

编写交易系统的方法与编写一般曲线类似,是不过一般曲线是连续的输出,而交易系统是满足买卖条件的时候输出买入、卖出的曲线标志而已。输出曲线标志用“ :> ”。

例如, MACD 交易系统的公式内容如下:

DIFF= EMA ( CLOSE ,SHORT) - EMA ( CLOSE ,LONG);

DEA = EMA (DIFF,M);

MACD1 = 2 *(DIFF-DEA);

IF ( CROSS (diff,dea))

a :> "buy" ;

IF ( CROSS (dea,diff))

b :> "sell" ;

五彩 K 线是依照一定规则将普通 K 线标成多种不同的颜色,以突出某种 K 线形态的曲线公式。这里列有早晨之星、黄昏之星、十字星、长十字星、红绿灯等各种五彩 K 线。

五彩 K 线的编写方法与一般 K 线类似。只是一般 K 线公式以开盘价、收盘价为颜色判断的依据,而五彩 K 线则采用各种不同的形态为颜色判断依据。下面列出普通 K 线公式与“三红兵”五彩 K 线公式:

普通 K 线公式:

IF ( CLOSE > OPEN )

RETURN " 阳 " ;

ELSE IF ( CLOSE < OPEN )

RETURN " 阴 " ;

ELSE IF ( CLOSE == OPEN AND OPEN >= CLOSE [ 1 ])

RETURN " 阳 " ;

ELSE IF ( CLOSE == OPEN AND OPEN <= CLOSE [ 1 ])

RETURN "阴" ;

“三红兵”五彩 K 线公式:

IF ( CLOSE [ 2 ]> OPEN [ 2 ] AND CLOSE [ 1 ]> OPEN [ 1 ] AND CLOSE > OPEN AND

CLOSE [ 1 ]> CLOSE [ 2 ] AND CLOSE > CLOSE [ 1 ])

{ RETURN BACKSET ( "colorred" , 2 );}

ELSE RETURN "colorgreen" ;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多