电子现货网

打印 上一主题 下一主题

[飞狐] 学编飞狐公式—F10资料查找

2017-7-12 18:36:27 1027 0

[复制链接]
跳转到指定楼层
楼主
周士 发表于 2017-7-12 18:36:27 回帖奖励 |倒序浏览 |阅读模式

周士 楼主

2017-7-12 18:36:27

看到网上有许多朋友问飞狐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资料查找公式了


学编飞狐公式—F10资料查找.doc

31.5 KB, 下载次数: 0

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 |

返回列表 本版积分规则

用户组 : 管理员
邮   箱 :469398345@qq.com
手   机 :未填写
Q   Q : 未填写
性别 : 就不告诉你
主页 :未填写
个人介绍 :未填写

主题

帖子

积分20577

 
 
网站咨询
软件咨询
点击这里给我发消息
工作时间
9:00-21:00