ahfyxl 2006-1-10 17:09
学编飞狐公式——F10资料查找
[code]
一、常用的函数——大多属于字符串函数类:
1.主要函数:2个
(1)F10FIND(S,N)——F10资料查找
将从当前股票的F10资料的第N个字符开始查找字符串S,返回找到的位置,返回-1表示未找到
(2)F10TEXT(N,M)——F10资料子字符串
将得到当前股票的F10资料中从第N个字符开使的M个字节长的字符串,M=0表示一直取到行尾
2.辅助函数:
(1)字符串截取:
①STRLEFT(STR,N)——字符串的左部,返回字符串STR的左边N个字符
②STRMID(STR,N,M)——字符串的中部,返回字符串STR的第N个字符开始的长度为M个字符的字符串,M为0则取到末尾
③STRRIGHT(STR,N)——字符串的右部,返回字符串STR的右边N个字符
④LTRIM(STR)——除去开始空格
⑤RTRIM(STR)——除去尾部空格
(2)字符串转换:
①STRTONUM(STR)——字符串转化为数字,将STR转化为数字
②NUMTOSTR(N,M)——数字转化为字符串,将N转化为字符串返回,精确到小数点后M位
3.显示函数:
(1)绘图函数类:
①DRAWTEXT(COND,PRICE,TEXT)——在图形上显示文字,当COND条件满足时,在PRICE位置书写文字TEXT,可用'\n'换行,可ALIGN0-5定义对齐方式。
②DRAWNUMBER(COND,PRICE,NUMBER,PRECISION)——在图形上显示数字,当COND条件满足时,在PRICE位置书写数字NUMBER(可以为常数或数组序列),PRECISION为小数显示位数(取值范围0-7),可ALIGN0-5定义对齐方式。
(2)解盘函数类:也是显示文字与显示数字两种。
二、公式的编写:
由于此类公式是查找F10的资料,因此随着F10资料提供者的不同及其格式的改变,都会影响公式的使用,在编写中需要我们自己逐步进行查找、调试。
1.首先要根据自己所使用F10资料及准备查找的对象进行。假定是鹏博F10资料,准备制作查找“十大流通股东”的公式(下同):
第一步,打开F10资料,找到其所在位置,将其复制后,在公式中写下:GDW0:F10FIND('【十大流通股东】',200); 这一句的意思是找到【十大流通股东】所在位置;
注意函数中的参数S字符串要用半角字符的单引号括起来(下同),参数N可先预设一个,这里先取200。然后将公式编译保存后,选取一个新股或次新股(因其资料较少位置较为靠前,假定选择002047成霖股份)将指标调出来看一下所显示的数值,如果与前面所设的200相距较大,则在指标显示区点击右键,选中“修改指标公式”,打开公式编辑(下同),把参数调正一下,现在改为30000,这时这一句变成:
GDW0:F10FIND('【十大流通股东】',30000);
然后根据【十大流通股东】与所需资料的位置情况,再写:GDW1:F10FIND('1',GDW0+100); 这里查找的“1”是股东情况的序号,后面的参数GDW0+100是从GDW0向后加上一个估计数,然后再观察一下查找情况,如果没有问题则把第一句的冒号后面加上等号使其成为中间变量,在第二句的尾部加上,LINETHICK使其不显示在图中,然后进行下一步;
第二步,开始查找所需资料,写下:GDT1:=F10TEXT(GDW1,26); ——参数26的确定是数出一行有13个汉字,每个汉字占两个字节的位置。这一句的冒号后面一定要加上等号(因为这时变量中是字符串而非数值),否则会造成“输出数据类型非法”的提示,在用绘图函数写下一句临时语句:DRAWTEXT(SYSPARAM(2)=BARPOS,5,GDT1); 这样再保存后就可以在图中看到所取得的字符串。
第三步,调整所取的字符串:将第二步语句中的GDW1后移3个字节,改成GDT1:=F10TEXT(GDW1+3,26)后点击“应用于图”,可看到修改后的变化,如果仍不合适就再次调正,直到显示正确,至此第一家流通股东选取完毕。然后返回到GDW1下面,加上一行写下:GDW2:F10FIND('2',GDW1+75),LINETHICK; 在GDT1下面写下:GDT2:=F10TEXT(GDW2+3,26); 然后把DRAWTEXT(SYSPARAM(2)=BARPOS,5,GDT1)里面的GDT1改为GDT2,查看第二家股东的选取情况。
如果看到截取的流通股东名称并不完整,需要继续完善,添加语句如下:
W12:=GDW2-GDW1;
IF W12>120 THEN BEGIN
W:=F10FIND('│',GDW1+75),LINETHICK;
T:=F10TEXT(W+2,26);
GDT1:=RTRIM(GDT1)+LTRIM(T);
END;
这里使用了去除尾部和开始空格的函数,目的是为了使字符串的衔接更加严密。
此时的公式语句为:
GDW0:=F10FIND('【十大流通股东】',30000);
GDW1:F10FIND('1',GDW0+100),LINETHICK;
GDW2:F10FIND('2',GDW1+75),LINETHICK;
W1:=GDW2-GDW1;
GDT1:='1.'+F10TEXT(GDW1+3,26);
GDT2:=F10TEXT(GDW2+3,26);
IF W12>120 THEN BEGIN
W:=F10FIND('│',GDW1+75),LINETHICK;
T:=F10TEXT(W+2,26);
GDT1:=RTRIM(GDT1)+LTRIM(T);
END;
DRAWTEXT(SYSPARAM(2)=BARPOS,5,T);
DRAWTEXT(SYSPARAM(2)=BARPOS,4,GDT1);
0,COLORBLACK;
这时我们发现,如果十家流通股东的查找全部这样写,实际上有很多重复的语句,怎样简化呢?——可以使用循环语句。
在第一行前面写上VARIABLE:GDW[10]=0,GDT[10]='STR'; 将其中的部分变量设定为数组,前半部分为:
VARIABLE:GDW[10]=0,GDT[10]='STR';
GDW0:=F10FIND('【十大流通股东】',30000);
GDW[1]:=F10FIND('1',GDW0+100),LINETHICK;
GDT[1]:='1.'+F10TEXT(GDW[1]+3,26);
FOR j=2 TO 10 DO BEGIN
XH:=RTRIM(LTRIM(NUMTOSTR(j,0)));//将j转换为字符的序号
GDW[j]:=F10FIND(' '+XH+'│',GDW[1]+75);//取字符串所在位置
IF j<10 THEN GDT[j]:=XH+'.'+F10TEXT(GDW[j]+4,26);//取字符串
END;
后面的补充字符串部分变为:
//补未取全的字符串
FOR i=1 TO 9 DO BEGIN
WT:=GDW[i+1]-GDW;//计算前后股东位置的差
IF WT>120 THEN BEGIN//当差超过一定标准时执行下面语句
TW:=F10FIND('│',GDW+75),LINETHICK;//确定所差字符的起点位置
T:=F10TEXT(TW+2,26);//截取所差字符
GDT:=RTRIM(GDT)+LTRIM(T);//前后字符合并
END;
END;
并通过逐一改变DRAWTEXT(SYSPARAM(2)=BARPOS,4,GDT[10])显示语句中GDT下标的数值观察结果。
第四步,处理显示问题
将临时的显示语句改变一下,加上你喜欢的颜色标注,调正好显示的位置,一个公式就诞生了。全部公式如下:
CODE:[Copy to clipboard]{F10十大流通股东}
VARIABLE:GDW[10]=0,GDT[10]='STR';
GDW0:=F10FIND('【十大流通股东】',30000);
IF GDW0<0 THEN EXIT;
GDW[1]:=F10FIND('1',GDW0+100),LINETHICK;
GDT[1]:='1.'+F10TEXT(GDW[1]+3,26);
FOR j=2 TO 10 DO BEGIN
XH:=RTRIM(LTRIM(NUMTOSTR(j,0)));//将j转换为字符的序号
GDW[j]:=F10FIND(' '+XH+'│',GDW[1]+75);//取字符串所在位置
IF j<10 THEN GDT[j]:=XH+'.'+F10TEXT(GDW[j]+4,26);//取字符串
END;
//补未取全的字符串
FOR i=1 TO 9 DO BEGIN
WT:=GDW[i+1]-GDW[i];//计算前后股东位置的差
IF WT>120 THEN BEGIN//当差超过一定标准时执行下面语句
TW:=F10FIND('│',GDW[i]+75),LINETHICK;//确定所差字符的起点位置
T:=F10TEXT(TW+2,26);//截取所差字符
GDT[i]:=RTRIM(GDT[i])+LTRIM(T);//前后字符合并
END;
END;
GDT[10]:='10.'+F10TEXT(GDW[10]+5,26);
DRAWTEXT(SYSPARAM(2)+2=BARPOS AND GDW[1]>1,10,GDT[1]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+2=BARPOS AND GDW[2]>1,8,GDT[2]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+2=BARPOS AND GDW[3]>1,6,GDT[3]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+2=BARPOS AND GDW[4]>1,4,GDT[4]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+2=BARPOS AND GDW[5]>1,2,GDT[5]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+55=BARPOS AND GDW[6]>1,10,GDT[6]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+55=BARPOS AND GDW[7]>1,8,GDT[7]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+55=BARPOS AND GDW[8]>1,6,GDT[8]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+55=BARPOS AND GDW[9]>1,4,GDT[9]),COLOR74AFFF;
DRAWTEXT(SYSPARAM(2)+55=BARPOS AND GDW[10]>1,2,GDT[10]),COLOR74AFFF;
0,COLORBLACK;
假如你需要将其显示在解盘中,可使用解盘函数:EXPLAIN(GDW[1]>1,GDT[1]),COLOR74AFFF;
[/code]
whz18 2006-1-11 16:05
请教公式高手,如何修改这段公式?
──────────────────┬────────────────
序号 股东名称 │ 持股数量(万股) 比例(%) 备注
──────────────────┼────────────────
1 中国工商银行-上证50交易型开放式│
指数证券投资基金 │ 648.12 0.41 流通A股
2 国泰君安-建行-香港上海汇丰银行有│
限公司 │ 300.99 0.19 流通A股
3 中国建设银行-博时裕富证券投资基 │
金 │ 156.57 0.10 流通A股
4 国际金融-渣打-CITIGROUP GLOBAL│
MARKETS LIMITED │ 132.57 0.08 流通A股
5 全国社保基金一一二组合 │ 94.74 0.06 流通A股
6 全国社保基金零零二组合 │ 79.88 0.05 流通A股
7 重庆路桥股份有限公司 │ 67.00 0.04 流通A股
8 中国工商银行-华安上证180指数增 │
强型证券投资基金 │ 66.70 0.04 流通A股
9 杨荔雯 │ 64.20 0.04 流通A股
10 严荣贵 │ 61.00 0.04 流通A股
把类上F10显示,现公式为:
tt:=F10FIND('序号 股东名称 │ 持股数量(万股) 比例(%) 备注',1);
bb1:=f10find(' 1 ',tt);
bb2:=f10find(' 2 ',tt);
bb3:=f10find(' 3 ',tt);
bb4:=f10find(' 4 ',tt);
bb5:=f10find(' 5 ',tt);
bb6:=f10find(' 6 ',tt);
bb7:=f10find(' 7 ',tt);
bb8:=f10find(' 8 ',tt);
bb9:=f10find(' 9 ',tt);
bb10:=f10find('10 ',tt);
drawtext(SYSPARAM(2)=BARPOS,10,f10text(tt,0)) coloryellow;
drawtext(SYSPARAM(2)=BARPOS,0,f10text(bb1,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-10,f10text(bb2,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-20,f10text(bb3,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-30,f10text(bb4,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-40,f10text(bb5,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-50,f10text(bb6,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-60,f10text(bb7,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-70,f10text(bb8,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-80,f10text(bb9,0)) colorwhite;
drawtext(SYSPARAM(2)=BARPOS,-90,f10text(bb10,0)) colorwhite;
但此式不能显出1,2,3,8条的第二行,即
指数证券投资基金 │ 648.12 0.41 流通A股
限公司 │ 300.99 0.19 流通A股
金 │ 156.57 0.10 流通A股
请问如何改公式解决这类问题,谢谢!
qwe_rty_uio 2006-1-12 19:59
谢谢!:cool:
hxx816 2006-4-7 23:14
[size=8][font=华文琥珀]
[color=red]谢谢提供[/color][/font][/size]
li8fengbing 2007-4-16 16:26
怎么发表新主题
zhangmeng 2007-5-18 16:54
学习,学习,再学习!
jsw945 2007-9-21 21:38
请问老师,巨灵F10的该如何写呢?谢谢谢谢了!!!!!