《同花顺编程.pdf》由会员分享,可在线阅读,更多相关《同花顺编程.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.同花顺编程同花顺编程一、公式编写规则一、公式编写规则1 1、语言规范:、语言规范:在自定义公式里面的各种符号(如,“;”)只能用半角不能用全角。直接访问数据项的函数直接访问数据项的函数例如:例如:OPENtOPENt 为为 t t 周期之前的开盘价周期之前的开盘价所有行情数据项(CLOSE 等)都与此相同。2 2、标识符:、标识符:标识符在表达式中只存名称,值保留在符号表。标识符包括函数名、参数名和变量名。函数名用来传递函数返回值;参数名用于函数调用时的参数传递;变量名在计算中存储中间计算结果。3 3、分隔符:、分隔符:4 4、赋值语句:、赋值语句:;.其一般形式为:a=b;含义为将 b 的
2、值付给 a。几个运算符“”“:=”“:”“:”。其含义分别为“赋值”、“赋值”、“赋值并输出数值或字符串”、“赋值并输出图形”。注意:“”和“:=”两个运算符的意义、用法完全相同。这样做主要是为了更好地兼容市场上目前的各种带有公式编辑功能的分析软件。5 5、条件语句:、条件语句:其一般形式为:IF(逻辑表达式)语句 1;ELSE 语句 2;上述结构表示:如果逻辑表达式的值为非 0(TURE)即真,则执行语句 1,执行完语句 1 从语句 2 后开始继续向下执行;如果表达式的值为 0(FALSE)即假,则跳过语句 1 而执行语句 2。注意:注意:(1)、条件执行语句中ELSE 语句 2;部分是选择
3、项,可以缺省,此时条件语句变成:IF(逻辑表达式)语句 1;表示若逻辑表达式的值为非0 则执行语句 1,否则跳过语句 1 继续执行。(2)、如果语句 1 或语句 2 有多于一条语句要执行时,必须使用和 把这些语句包括在其中,此时条件语句形式为:IF(逻辑表达式)语句体 1;ELSE 语句体 2;这里语句体指多个语句,每个语句都必须以“;”结尾。(3)、条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个 IF 对应哪个 ELSE。例如:IF(x20 OR x-10)IF(yx)AGood;ELSE BBad;对于上述情况,规定:ELSE语句与最近的一个IF语句匹配
4、,上例中的ELSE与 IF(yx)相匹配。为了使 ELSE 与 IF(x20 OR x20 OR x-10)IF(yx)A=Good;ELSE B=Bad;(4)、可用阶梯式 IF-ELSE-IF 结构。阶梯式结构的一般形式为:IF(逻辑表达式 1)语句 1;ELSE IF(逻辑表达式 2)语句 2;ELSE IF(逻辑表达式 3)语句 3;6 6、循环语句:、循环语句:while 循环的一般形式为:while(条件)语句;while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。注意注意:(1)、可以有多层循环嵌套。(2)、语句可以是语句体,此时必须
5、用和括起来。break 语句 break 语句通常用在循环语句中。当 break 语句用 while 循环语句中时,可使程序终止循环而执行循环后面的语句,通常 break 语句总是与 if 语句联在一起。即满足条件时便跳出循环。注意注意:(1)、break 语句对 if-else 的条件语句不起作用。(2)、在多层循环中,一个 break 语句只向外跳一层。continue 语句 continue 语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue 语句只用在 while 循环体中,常与 if 条件语句一起使用,用来加速循环。7 7、函数调用:、函数调用:调用函数的基本方
6、式为:函数名(参数,参数,);.其返回值为函数里面的 return 语句规定的返回值。若无return 语句,则返回被调用函数里,以函数名命名的变量的值。若无以函数名命名的变量,则返回最后一个输出的值。若无输出的值,则返回最后一个被调用的语句的值。例如:调用 KDJ 指标。KDJ 函数的名称为 kdj,其参数和内容如下:函数内容为:函数内容为: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*DJ:3*K-2*D则当您在其它函数里输入a=KDJ(8,6,6)的时候,相
7、当于计算 N18,M16,M26 时的 J 值,并把这个值赋给a。注意:注意:(1)、当传递的参数数目不等于被调用函数设置的参数数目时。1)、没有传递参数。则采用原来设置的默认参数计算。2)、传递参数少于被调用函数设置的参数数目。则将参数传过去,依次改变前面同样数目参数的值,后面其它的参数采用原来设置的默认参数计算。3)、传递参数大于被调用函数设置的参数数目。则将参数传过去,依次改变被调用函数的参数值,多余的参数不起作用。(2)、函数名称不区分大小写。(3)、新建的函数,其函数名可能与其它以存在的函数里面的内部变量重名。这样在调用那个函数时,那个内部变量将变成对这个新建函数的函数调用,从而产生
8、错误。所以,在新建函数起名时要注意。返回值:自定义公式里面如果有多数据项输出,则调用此函数的时候返回值默认为最后一个输出。如果希望确定某项输出则可用return,或者将函数名指定为其中一项输出。8 8、关于“空”的问题:、关于“空”的问题:所谓“空”即指没有数据。在某些情况下,一些数据项可能取不到数据,这时返回值为“空”。例如,yearrep(&jlr,4),其含义为取该公司 3 年前年报的净利润。如果某家公司上市时间较短,而无三年前的年报数据,则其值为“空”。(1)、“空”与任何数据作计算时,相应计算被取消。例如:7NULL(即“空”)得到的结果为 7。(2)、“空”与任何数据比较大小时,“
9、空”较小。例如:-7NULL(即“空”)得到的结果为 1(即条件满足)。这样的结果可能与您原来希望得到的数值不符,如果您想避免;.这种情况可以用 ISNULL 函数来判断某个数据是否为“空”(相关说明见后面的系统函数说明部分)。二、系统函数说明二、系统函数说明1 1、板块函数:、板块函数:(1)、板块平均:求板块里某一数据项的平均值。用法:BLOCKAVG(&N),N 表示选择的数据项。例如:BLOCKAVG(&NEW)表示这个板块里所有股票当前时刻的平均价。(2)、板块最小值:求板块里某一数据项的最小值。用法:BLOCKMIN(&N),N 表示选择的数据项。例如:BLOCKMIN(&LOW)
10、表示这个板块里所有股票当天的最低价。(3)、板块最大值:求板块里某一数据项的最大值。用法:BLOCKMAX(&N),N 表示选择的数据项。例如:BLOCKMAX(&HIGH)表示这个板块里所有股票当天的最高价。(4)、板块求和:求板块里某一数据项的和。用法:BLOCKSUM(&N),N 表示选择的数据项。例如:BLOCKSUM(&VOL)表示这个板块里所有股票当前时刻的总成交手数。(5)、取板块领先股票:取板块指数的所属个股中数据X 最大的股票的数据 Y。适用于板块指数。用法:BLOCKLEAD(&X,&Y)取板块指数中个股数据 X 最大的股票的数据 Y。例如:BLOCKLEAD(&VOL,&
11、ZQMC)取该板块指数中成交量最大的股票名称。2 2、财务函数:、财务函数:(1)、季报:调用季报数据项。用法:QUARTERREP(&N,K,L),N 为财务数据项,K 可以是 1(表示最近一次的季报)、2(表示上一次的季报)、3、4 等或者直接输入希望调用的年份,L 可以是 1 或 3 即第一季度或第三季度的季报。注意 L 仅在 K 选择年份的时候适用。(2)、年报:调用年报数据项。用法:YEARREP(&N,K),N 为财务数据项,K 可以是 1(表示最近一次的年报)、2(表示上一次的年报)、3、4 等或者直接输入希望调用的年份。注意:N 要为基本的财务数据项,而不能是编写的计算项目,即
12、 N 为功能树里公式栏里面的“财务数据”目录下面的数据项。(3)、中报:调用中报数据项。用法:MIDREP(&N,K,L),N 为财务数据项,K 可以是 1(表示最近一次的中报)、2(表示上一次的中报)、3、4 等或者直接输入希望调用的年份。(4)、同期报表:调用最近一次报表或与其同类型报表的数据项。用法:REP(&N,K)N 为财务数据项,K 为 1(表示最近一次公布的报表)、2(表示去年与最近一次公布报表同类型报表)、3、4 等。(5)、取报表日期:取某个财务数据项的报表日期。;.用法:REPDATE(&N,M,K),N财务数据项。M引用周期数,与 YEARREP 等的调用相同。K1、一季
13、度报表,2、中报,3、三季度报表,4、年报。如 REPDATE(&ZGB,1,4),表示取最近总股本年报的报表日期。3 3、指标函数:、指标函数:(1)、成本:成本分布情况。用法:COST(10),表示10%获利盘的价格是多少,即有10%的持仓量在该价格以下,其余 90%在该价格以上,为套牢盘。该函数仅对日线分析周期有效。(2)、分价函数:用来制作分价表。用法:在制作分价表的时候选择多数据项输出,然后直接将这个函数拖进数据项选择框就可以了。(3)、成本分布:用于画成交分布云。用法:用于画成交分布云。例如CM(0,1,2,0)。参数含义:1、计算天数,0 表示计算全部天数。2、当日成本算法:0=
14、平均分布,1=三角分布。3、精度:一般是2。4、起始位置:0 是从当天开始计算,1 是从前一天开始算,类推。5、换手:缺省是 3,即 300%换手。参数 5可以没有。基本原理:我们对历史筹码是依后面的换手率而递减的。我们相信这样基本反应了一个事实即历史越悠久的成交,对当前的影响越小。比如说,1000 万的盘子,前天均价为10元,成交量为200 万,也就是20%换手率;昨天以均价11 元又成交 300 万,也就是30%换手率;那前天的 200 万成交量怎么样了呢?成本分析假定,前天的200 万在昨天也以 11 元被30%换手了,那么,前天以10 元成交的成交量还剩了200*(1-30%)=140
15、 万;若今天以均价12 元又成交了 400 万,同理可算,现在的筹码分布是:10 元筹码为 200*(1-30%)*(1-40%)=84万,11 元的筹码为 300*(1-40%)=180万,12 元的筹码是 400 万。(4)、之字转向。用法:ZIG(K,N),当价格变化量超过N%时转向,K 表示 0:开盘价,1:最高价,2:最低价,3:收盘价。例如:ZIG(3,5)表示当前收盘价超过上次ZIG 转向输出值的+5%或-5%,则输出当前收盘价并 ZIG 转向。(5)、获利盘:表示获利盘比例。用法:WINNER(CLOSE),表示以当前收市价卖出的获利盘比例。例如返回 0,1 表示 10%获利盘
16、;WINNER(10,5)表示 10,5 元价格的获利盘比例。该函数仅对日线分析周期有效。(6)、抛物转向:计算抛物转向。用法:SAR(N,S,M),N 为计算周期,S 为步长,M 为极值。例如,SAR(10,2,20)表示计算 10日抛物转向,步长为 2%,极限值为 20%。(7)、远期获利盘比例:计算远期获利盘比例。用法:PWINNER(10,CLOSE)表示10天前的那部分成本以当前收市价卖出的获利盘比例,例如返回 0.2 表示 20%获利盘;该函数仅对日线分析周期有效。4 4、逻辑函数:、逻辑函数:(1)、条件函数:根据条件求不同的值。;.用法:IF(X,A,B)若 X 不为 0 则返
17、回 A,否则返回 B。例如:IF(CLOSEOPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值。参见“条件语句”。5 5、引用函数:、引用函数:(1)、满足条件的周期数:统计满足条件的周期数。用法:COUNT(X,N),统计 N 周期中满足 X 条件的周期数,若 N=0 则从第一个有效值开始。例如:COUNT(CLOSEOPEN,20)表示统计 20 周期内收阳的周期数。(2)、第一个条件成立到当前的周期数:统计第一个条件成立到当前的周期数。用法:BARSSINCE(X):第一次 X 不为 0 到现在的天数。例如:BARSSINCE(HIGH10)表示股价超过 10 元时到
18、当前的周期数。(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(CLOSEOPEN,2)若收阳则将该周期及前一周期数值设为1,否则为 0。(6)、求和:求
19、总和。用法: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)、向前引用:引
20、用若干周期前的数据。用法: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,
21、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)、最高值周
22、期数:求上一高点到当前的周期数。用法: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
23、)*X2)+.+1*XN)/(N+(N-1)+(N-2)+.+1)X0表示本周期值,X1表示上一周期值.。例如:WMA(CLOSE,20)表示求 20 日加权均价。(17)、求和:向前累加到指定值到现在的周期数。用法:SUMBARS(X,A):将 X 向前累加直到大于等于 A,返回这个区间的周期数。例如:SUMBARS(VOL,CAPITAL)求完全换手到现在的周期数。5 5、时间函数:、时间函数:(1)、总开盘分钟:求当前代码类型的开市交易时间。用法:TRADETIME。返回交易时间,单位为分钟。目前一般市场都返回242,与日期或具体的股票无关。(2)、距开盘分钟:求当前时刻距开盘有多长时间
24、。用法:FROMOPEN。返回当前时刻距开盘有多长时间,单位为分钟。例如:当前时刻为早上十点,则返回 31。(3)、距午夜秒:求当前时刻距开盘有多长时间。用法:FROMNIGHT。返回当前时刻距午夜有多长时间,单位为秒。例如:当前时刻为早上十点,则返回 36000。(4)、时间格式:转换时间格式。用法:FORMATTIME(N)。目前只支持 N=1 把当前时间转换成距开盘分钟数返回。例如:分时中的量比曲线公式:(VOL*(TRADETIME+1)*5)/(FORMATTIME(1)*FIVEDAYVOL)。(5)、时间差:计算两个时间之间的差。;.用法:COUNTTIME(N,L,K)。N、L
25、 为时间,其格式为YYYYMMDD。K 为 1、2 或者 3。当 K为 1 时返回第二个之间比第一个时间晚多少年。当 K 为 2 时返回第二个之间比第一个时间晚多少月。当K 为 3 时返回第二个之间比第一个时间晚多少日。例如:COUNTTIME 其返回值为-2。注意:这里返回值有正负号。6 6、算术函数:、算术函数:(1)、绝对值:求绝对值。用法:ABS(X)返回 X 的绝对值。例如:ABS(-34)返回 34。(2)、介于:介于两个数之间。用法:BETWEEN(A,B,C)表示 A 处于 B 和 C 之间时返回 1,否则返回 0例如:BETWEEN(CLOSE,MA(CLOSE,10),MA
26、(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(
27、53)返回 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
28、)收盘价的平方根。(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)表示如果
29、 A 为空(即没有数据)则返回 1,否则返回 0。(15)、幂:求幂。用法:POW(X,Y)。求 X 的 Y 次幂。例如:POW(2,3)为 8。7 7、统计函数:、统计函数:(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 日总体样本方差;.