查看完整版本: 学编飞狐公式——F10资料查找

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]

bajatje 2006-1-10 21:43

非常好!谢谢!

股市骑兵00 2006-1-10 22:16

谢谢!:clap:

千里快哉风 2006-1-10 23:59

谢谢:cool:

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:

joneslee 2006-1-14 15:52

谢谢!

6406753 2006-2-13 20:02

0000000000

lhl311 2006-2-20 14:39

谢谢!

流光之星 2006-2-20 18:58

顶上去。

hxx816 2006-4-7 23:14

[size=8][font=华文琥珀]
[color=red]谢谢提供[/color][/font][/size]

sxsy 2006-10-15 16:28

学习,谢谢!

hylhjz 2007-1-11 20:58

谢谢!!!

li8fengbing 2007-4-16 16:26

怎么发表新主题

zhangmeng 2007-5-18 16:54

学习,学习,再学习!

jsw945 2007-9-21 21:38

请问老师,巨灵F10的该如何写呢?谢谢谢谢了!!!!!

cyzpp 2008-4-14 00:26

谢谢!:smokin: :):
页: [1]
查看完整版本: 学编飞狐公式——F10资料查找