学编飞狐公式——F10资料查找【祝五一节快乐】

来源:百度文库 编辑:神马文学网 时间:2024/04/25 10:26:45
学编飞狐公式——F10资料查找【祝五一节快乐】
五一节到了,这是普天下劳动人民的节日,在此祝大家节日快乐。
仅以下文略表衷心的祝福!有许多朋友问飞狐F10资料查找的问题,但F10有很多种,每人用的不同、要求也不同,任谁回答都会头痛。我的口号历来是:求人不如求己。当你仔细阅读下文后,相信自己你也行……一、常用的函数——大多属于字符串函数类: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下标的数值观察结果。第四步,处理显示问题将临时的显示语句改变一下,加上你喜欢的颜色标注,调正好显示的位置,一个公式就诞生了。全部公式如下:
复制内容到剪贴板
代码:
{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;//计算前后股东位置的差
   IF WT>120 THEN BEGIN//当差超过一定标准时执行下面语句
      TW:=F10FIND('│',GDW+75),LINETHICK;//确定所差字符的起点位置
      T:=F10TEXT(TW+2,26);//截取所差字符
      GDT:=RTRIM(GDT)+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;你试一试,你也可以随心所欲地编写F10资料查找公式了