公式编写指南
公式5.0版说明
公式编写说明如下:
一、公式的格式
1、每个公式命令必须占1行,命令不能分开,不能有空格。
2、每行公式最后,可以用“//”来注释说明。
3、变量名必须以字母或汉字开头。
4、公式命令不分大小写字母,自动转为大写字母处理。即X1和x1是一样的。
5、变量赋值使用“:=”,或者“=”,默认中间变量。例如: a1:=12
6、变量赋值命令后面可以跟数字。例如:b1:=20
7、变量赋值命令后面可以是+-*/%运算表达式。例如: aa:=a1+3
8、变量赋值命令后面可以包含括号在内的数学表达式。支持()括号。(4.09版以上取消了表达式中“[],{}”的使用,为了VFP9。)
9、变量可以反复赋值,以最近一次赋值为准。
10、输出型变量赋值用“:”,该变量类型为输出变量,最后可以生成数据库。
11、变量有2种类型,数字型(默认小数点后4位)和字串类型。做公式是要防止类型错误。
12、公式运行有2种模式。
模式1在公式编辑器中单步运行,允许输出信息命令。不允许写库。在模式1中,数据指向最后一期数据。预置变量例如w1,可以用ref(w1,5)等函数,自定义变量使用会因为数据未赋值而出错。
模式2在系统中自动运行,计算全部数据,默认不允许输出信息命令,支持写库或绘图。模式2相当于从彩票库第1期开始执行,到最后一期执行完成结束。
13、函数体内不得出现负常数,如需要使用必须用变量来替代。 函数体内只能是正参数和变量名。
14、函数体内的表达式必须用使用()。例如a=min((-10),(-2*3))
15、模式2中,命令前加#符号,表式该命令只执行一次。一般系统定义函数,没有必要重复执行,可以加#号,例如 #aa1=BJys("colorcff0c0")
16、模式2中,命令前加@符号,表式该命令在循环计算完成后,才执行一次。一般系统定义函数,没有必要重复执行,可以加@号,例如 @aa1=BJys("colorcff0c0")
17、预置变量为[概况表]数据。
18、支持中文命令。
19、增加只运行一次的模式3。模式3数据都预置为最后一期数据。
20、支持编译模式,在编译模式中,公式书写要符合VFP9的语法。解释模式容错功能强大,可以兼容VFP9语法。
二、说明及注释
1、说明有多种方式。命令分别为:说明,*,;,!,//,REM。
2、例如“说明”。
说明:本公式是测试
3、例如“*”。下面命令为说明,不会被执行。
*x3:=A1+B1
//演示
4、例如“//”。
x6:=12+3
//演示
三、简单运算
1、新版公式系统比以前有很大改进,更加自由方便。
2、运算符+加,-减,*乘,/除,\整除,%取余数。
3、字串运算+和&都是连接字串。
4、逻辑运算规定“假”为0,“真”为大于0。
5、比较符为>,>=,<,<=,=。
6、关系符 .或者. , .or. ,.并且. ,.and.
*
7、关系符或比较符参数必须加小括号。例如:a=IIF(((2)>(3)),5,6)
四、函数
(一)数学函数
1、 绝对值: Abs(N)求 N 的绝对值|N|.
2、 符号: Sign(N)或SGN(N)根据 N>0, =0, <0, 返回 1, 0, -1.
3、 上限取整: Ceiling(N)返回 ≥N 的最小整数.
4、 下限取整: Floor(N) 返回 ≤N 的最大整数.
5、 截断取整: Int(N) 截掉 N 的小数 , 只取整数.
6、 四舍五入: Round(N1 , N2) 将 N1 四舍五入保留N2 位小数.
7、 指数: Exp(N)以自然数 e 为底, N 为指数求 eN .
8、 自然对数: Log(N) 求自然对数 Ln N .
9、 正弦: Sin(N) 返回 N 的正弦值 ( N 为弧度 ).
10、 余弦: Cos(N) 返回 N 的余弦值 ( N 为弧度 ).
11、 平方根: Sqrt(N) 求 N 的平方根.
12、 取大值: MAX(X1,X2) 函数返回X1和X2的最大值.
13、 取小值: MIN(X1,X2) 函数返回X1和X2的最小值.
14、 条件选择函数: IIF(X,N1,N2)或IF(X,N1,N2), X〉0,取N1,否则取N2。
*编译模式,X条件必须是逻辑表达式,解释方式默认X数学表达式数值大于0。可以用如下方式保持兼容性。
例如X=12+3
Y=IIF(X,N1,N2)
//解释模式,要保持编译兼容性,必须做下面的修改。解释模式中比较符会用函数替换,所以比较符表达式和参数都需要加“()”来改变运算顺序。
Y=IIF(((X)>(0)),N1,N2)
//解释模式和编译模式都能正确运算。
15、 取余数MOD(N1,N2),返回N1/N2的余数。
16、RAND(N)随机函数
17、BETWEEN(X1,X2,X3)或RANGE(X1,X2,X3), X1小于等于X2,并且X1小于等于X3,返回1,否则返回0。
18、逻辑非NOT(N) N<=0,返回1,否则0
19、REVERSE(N) 取反,返回-N
20、ZHISHU(N) ,判断数字N是否为质数,是1,否0。
21、DY(X1,X2) X1大于X2,返回1,否则返回0。
22、DYDY(X1,X2) X1大于等于X2,返回1,否则返回0。
23、XY(X1,X2) X1小于X2,返回1,否则返回0。
24、XYDY(X1,X2) X1小于等于X2,返回1,否则返回0。
25、XD(X1,X2) X1等于X2,返回1,否则返回0。
26、BDY(X1,X2) X1不等于X2,返回1,否则返回0。
(二)字符函数
1、SUBSTR(S,I,N)在S字符串中的第I个字符起取N个字符.
2、TRIM(S),消除字符串尾部空格。
3、LTRIM(S),消除字符串前部空格。
4、ALLTRIM(S)消除字符串中前和后的所有空格
5、LEFT(S,N)从字符串S左边取N个字符
6、RIGHT(S,N)字符串S右边取N个字符
7、AT(S1,S2)在字符串S2,找字符串S1开始的位置。
8、UPPER(S) 小写字母
9、LOWER(S)写字母
10、LEN(S)求字符串的长度
11、ASC(S)求第一个字符串的ASCII码
12、CHR(N)求ASCII码的字符
13、SUBB(S1,S2),用S2拆分S1取前部分。
14、SUBF(S1,S2),用S2拆分S1取后部分。
15、VAL(S)字符串转换为数值
16、STR(R,L,D)数值转换成字符,L为长度,D为小数位数
17、 输出格式控制函数strgs(x1,x2),strgs1(x1),strgs2(x2)
x1表示数据总长度,x2表示数据小数点位数,函数返回值为0。
18、REPLICATE(S,N) 指定字符S重复指N次返回。
19、SPACE(N),返回N个空格。
20、 2位数字转字符NTOCC(N),例如NTOCC(2),返回"02".
(三)时间函数
1、DATE()当前日期字串。
2、TIME()当前时间字串。
3、YEAR(S)求年份(数值)
4、MONTH(S)求月份(数值)
5、DAY(S)求日期(数值)
6、DOW(S)求星期几(数值)
7、CDOW(S)求星期几(英文)
8、DATETIME(0)求当前日期和时间字串。
9、 HOUR(0) 当前小时
10、MINUTE(0) 当前分钟
11、SECONDS(0) 返回秒
(四)统计及引用函数
1、 平均值ma(变量,N),返回n周期的平均值。公式解释模式下兼容股票语法和VFP语法,编译模式必须修改为标准格式,ma(“变量名”,N)。下面函数均同此。
2、 求和SUM(变量,N),返回n周期值的和。公式解释模式下兼容股票语法和VFP语法,编译模式必须修改为标准格式,SUM(“变量名”,N)。
3、STD(X,N) 返回估算标准差。
4、STDP(X,N) 返回总体标准差。
5、VAR(X,N) 返回估算样本方差。
6、VARP(X,N) 返回总体样本方差。
7、COUNT(S,N),统计变量在N期内数据大于0 的次数。
8、REF(S,N),取变量之后第N位的数据值。
9、REFX(S,N),取变量之前第N位的数据值。
10、HHV(S,N),取变量S在N期内的最大值。
11、HHVBARS(X,N):求N周期内X最高值到当前周期数,N=0表示从第一个有效值开始统计。
12、LLV(S,N),取变量S在N期内的最小值。
13、 LLVBARS(X,N):求N周期内X最低值到当前周期数,N=0表示从第一个有效值开始统计。
14、 DMA(X,A),求X的动态移动平均.
15、SMA(X,N,M):X的N日移动平均,M为权重,如Y=(X*M+Y'*(N-M))/N
16、WMA(X,M):X的M日加权移动平均.算法:Yn=(1*X1+2*X2+...+n*Xn)/(1+2+...+n)
17、EMA(X,M):X的M日指数移动平均.算法:Y=(X*2+Y'*(N-1))/(N+1)
18、MEMA(X,M):X的M日平滑移动平均
19、ZJL()总记录数。
20、DQJL(N)当前数据指针号。N=0,返回指针号;N>0设置新指针。
21、SKIP(N)移动当前数据指针。
22、qhtorn(N) 将N期号转换为记录号。
23、rntoqh(N) 将N记录号转换为期号。
24、HHM()前区或红号最大数。例如双色球为33。
25、LHM()后区或蓝号最大数。例如双色球为16。
26、HHS()前区或红号长度。例如双色球为6。
27、LHS()后区或蓝号长度。例如双色球为1。
28、SHIFO(N1,N2),判断N1数是否在DQJL+N2期彩票前区出现过。没有出现时0,否则为位置号。
29、SHIFOB(N1,N2),判断N1数是否在DQJL+N2期彩票后区出现过。没有出现时0,否则为位置号。
(五)绘图相关函数
1、 BJSY(C) 设置背景颜色,例如 @aa1=BJys("colorcff0c0")
2、QJYS(C)设置前景颜色
3、BTYS(C)设置标题颜色
4、ZJYS(C)设置中间颜色
5、SETNY(N),设置纵轴分割数,默认20.
6、SETNX(N),设置横轴分割数,默认14.
7、SETC(N,C) 设置第N条线的颜色,例如:#LCC=setc(1,"COLORGREEN")
8、SETLBW(N1,N2) 设置第N1条线的线宽N2,默认线宽为2
9、SFYZ(N) 设置缩放因子,N=0,返回缩放因子。N<1放大,N>1缩小。
10、PYY(N) 设置Y轴上下偏移,N=0,返回偏移值。
11、HZZ(N) 设置第N条指标线,画颜色柱子。
12、HZZW(N) 设置画颜色柱子宽度为N,默认为4。
13、HZZS(C) 设置画颜色柱子大于0的颜色,默认"红色"。
14、HZZX(C) 设置画颜色柱子小于0的颜色,默认"蓝色"。
15、ZBXSS(X,N) 设置是否现实第X条指标线。N=1显示,默认。N=0不显示。
16、HGZH(N) 设置是否显示横坐标线。N=1显示,默认。N=0不显示。
17、HGZS(N) 设置是否显示竖坐标线。N=1显示,默认。N=0不显示。
18、KXXTT(X,Y) 设置K线系统。X的值代表,1开盘,2收盘,3最低,4最高。
Y表示捆绑第Y条指标线的值。
例如:aaq1=KXXTT(4,5),表示最高价实用第5条指标线的值。
如不显示第5条指标线,用命令关闭。aa=ZBXS(5,0)
19、HZZK(N) 设置是否显示K线图。N=1显示,默认。N=0不显示。
20、HZZKW(N) 设置K线柱子宽度为N,默认为4。
21、HZZKS(C) 设置K线柱子大于0的颜色,默认"红色"。
22、HZZKX(C) 设置K线柱子小于0的颜色,默认"浅蓝色"。
(六)杂函数
1、GSDBF(S)设置公式默认数据库名。实际名字是"LS"+S,程序运行结束回删除LS开头的数据库文件。
2、BLCD(S,L,D)修改S变量的长度,L为长度,D为小数位数。返回1成功,0失败,变量不存在。
五、语法命令
1、? 输出命令,参数间用“,”分割。(只能在运行模式1中)
?
//输出1空行
?
"字符串",变量,数学表达式
提示:字符串和表达式中间不能出现分割符",",否则会出错。
2、PRINT或PR,功能同“?”。
3、CLEAR 清除信息命令。
4、IF <条件> THEN ...ENDIF条件判断语句。
5、WHILE <条件>
...
ENDW命令语句。
6、CALL <prg程序>
运行外部VFP9程序。
六、特殊命令
1、BLCD 或XGBLCD命令,修改变量长度。变量长度格式会影响写库的字段格式。在写库前可以预先修改1下。只能在运行模式2中使用。例如下面。
blcd "杀1",3,0
2、COPY或COPYTO写库命令,只能在运行模式2中运行。所有数据运算完成,才执行写库操作。
例如:COPYTO shahong
3、TOXLS 将COPYTO生成的dbf数据库,转为xls文件。
例如:
copyto
lss
toxls
数据.xls
解释系统采用流处理方式,无法区分前后运算符的优先关系,因此要加小括号,来提高优先运算顺序。
****************************************************
说明:公式编辑器主要用于彩票分析和统计,兼容股票公式的格式。可以用于数据分析。
也可以当做表达式运算器。
特殊说明:
1、因为采用分割符“,”,因此在PRINT的命令中不能出现带“,”参数的函数,会分解错误。暂时无法判断和改进。
2、解释系统采用流处理方式,无法区分前后运算符的优先关系,因此要加小括号,来提高优先运算顺序。