找回密码
 立即注册

QQ登录

只需一步,快速开始

广告载入中...
查看: 224|回复: 9

指标编写问答159学习的宝藏

[复制链接]
发表于 2022-1-15 12:23 | 显示全部楼层 |阅读模式

马上注册,享用更多功能,让你轻松玩转本论坛。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
696.问:
       在飞狐和分析家公式编写中,怎样编写对某指标进行指标排序后,取其排序后前十名上榜 股票的选股公式?不知大家懂了没有?比如指标OBV进行指标排序后,只取其排序后前十名上榜股票,求这样的选股公式的编写方法??? 拿指标OBV举个例子,可以吗?
     答(bajatje):
       转帖 作者:南客

       飞狐新增函数应用:股票代码遍历与横向排序

       一、如何进行板块股票代码遍历:

bk:='A股板块'; //bk赋值为字符串'A股板块'
stksum:=STKCOUNT(bk); //板块所包含证券数量
variable:dmstr[stksum]=''; //定义一个字符串数组用于记录股票代码,元素个数为stksum,初始值为空
for k=1 to stksum do //以下循环,循环计数器k从1开始每次递增1,直到stksum
begin
dm:=stkfromblk(bk,k);//板块bk中第k只证券的证券代码,赋值到字符串变量dm
dmstr[k]:=dm; //股票代码,记录到字符串数组dmstr的第k个元素中
end;

       //以下是一些字符串函数及运算的综合应用
       EXPLAIN(1,dmstr[1]); //在解盘中,输出深圳A股第1只股票的代码
       EXPLAIN(1,stknameex(dmstr[2]));//第2只股票的名称
       EXPLAIN(1,dmstr[3]+stknameex(dmstr[3]));//第3只股票的代码及名称
       EXPLAIN(1,bk+'第4只股票的代码是:'+dmstr[4]);
       EXPLAIN(1,stkname+'最后收盘价:'+numtostr(close,2));
       EXPLAIN(1,bk+'共有股票:'+numtostr(stksum,0)+'只');

        二、横向排序:
        //本公式输出结果,请在解盘中查看,由于大量引用了其它指标,因此运算时间会稍长

       bk:='A股板块'; //bk赋值为字符串'A股板块'
       yygs:='macd.diff';//引用的指标,此处可修改为引用其它的指标

       stksum:=STKCOUNT(bk); //板块所包含证券数量
       dcount:=datacount; //K线图上,最后一根K线的位置
       variable:dmstr[stksum]='',var_px[stksum]=0,var_indi[stksum]=0; //定义一个字符串 数组用于记录股票代码,元素个数为stksum,初始值为空
       for k=1 to stksum do //以下循环,循环计数器k从1开始每次递增1,直到stksum
       begin
       dm:=stkfromblk(bk,k);//板块bk中第k只证券的证券代码,赋值到字符串变量dm
       dmstr[k]:=dm; //股票代码,记录到字符串数组dmstr的第k个元素中
       temp1:=stkindi(dm,yygs,0,-1); //引用其它个股的指标
       var_px[k]:=temp1[dcount]; //记录最后一个周期的指标值,此处可以使用参数,以便得  到其它周期的排序
       var_indi[k]:=temp1[dcount]; //同上,但准备用于记录排序后的位置
       end;

       Num1:=sortpos(var_indi,1,1,stksum); //计算排序后,按大小排列的位置
       dm_max1:=var_indi[1]; //最大值的对应位置
       dm_max2:=var_indi[2]; //次大值的对应位置
       dm_max3:=var_indi[3];
       dm_max4:=var_indi[4];
       dm_max5:=var_indi[5];
       dm_max6:=var_indi[6];
       dm_min1:=var_indi[stksum]; //最小值的对应位置
       dm_min2:=var_indi[stksum-1];

       max1:=var_px[dm_max1];
       max2:=var_px[dm_max2];
       max3:=var_px[dm_max3];
       max4:=var_px[dm_max4];
       max5:=var_px[dm_max5];
       max6:=var_px[dm_max6];
       min1:=var_px[dm_min1];
       min2:=var_px[dm_min2];

       explain(islastbar,yygs+'前6名:'),colorred;
EXPLAINex(islastbar,'1:'+dmstr[dm_max1]+STKNAMEEX(dmstr[dm_max1])  +':',max1,2,0),colorred;
EXPLAINex(islastbar,'2:'+dmstr[dm_max2]+STKNAMEEX(dmstr[dm_max2])  +':',max2,2,0),colorred;
EXPLAINex(islastbar,'3:'+dmstr[dm_max3]+STKNAMEEX(dmstr[dm_max3])  +':',max3,2,0),colorred;
EXPLAINex(islastbar,'4:'+dmstr[dm_max4]+STKNAMEEX(dmstr[dm_max4])  +':',max4,2,0),colorred;
EXPLAINex(islastbar,'5:'+dmstr[dm_max5]+STKNAMEEX(dmstr[dm_max5])  +':',max5,2,0),colorred;
EXPLAINex(islastbar,'6:'+dmstr[dm_max6]+STKNAMEEX(dmstr[dm_max6])  +':',max6,2,1),colorred;

       explain(islastbar,yygs+'后2名:'),colorgreen;
EXPLAINex(islastbar,'2:'+dmstr[dm_min2]+STKNAMEEX(dmstr[dm_min2]) +':',min2,2,0),colorgreen;
EXPLAINex(islastbar,'1:'+dmstr[dm_min1]+STKNAMEEX(dmstr[dm_min1]) +':',min1,2,0),colorgreen;

       这里给出的代码示例,请下载飞狐0916测试版后使用,否则将会出现语法等错误。
     从上面代码示例可以看出,板块股票代码的遍历是基础,有了这个横向遍历,就可以实现         横向排序、横向统计。
     上面未给出横向统计的示例,大家可以参照上面示例,根据自己的需要进行设计。
     几个关键函数:stkfromblk(),sortpos(),可进入公式编辑器,查看函数注释。
     飞狐的循环、条件控制语句,可以任意访问的数据,将给处理问题带来极大的方便。
     下面,再给一段代码,是利用循环、判断语句,设计一个鬼变脸的公式代码:
          源码:  
        sensitivy:=-c;
        direction:=c;
        towero:=o;
        towerc:=c;
        fc:=c;
        i:=2;
        while i<=datacount do begin
        if towerc>towero and not(between(sensitivy,towero,towerc)) then
        direction:=1;
        else if towerc<towero and not(between(sensitivy,towero,towerc))  then
        direction:=0;
        else direction:=direction[i-1];
        if not(between(sensitivy[i-1],towero[i-1],towerc[i-1])) then begin
        towero:=towerc[i-1];towerc:=fc;
        sensitivy:=towero[i-1];
        end else begin
        towero:=towerc[i-1];towerc:=fc;
        sensitivy:=sensitivy[i-1];
        end;
        i:=i+1;
        end;
        tj:=between(sensitivy,towero,towerc);
        stickline(tj,max(towero,towerc),sensitivy,7,0), colorred;
        stickline(tj,min(towero,towerc),sensitivy,7,0), colorgreen;
        stickline(sensitivy<towerc and not(tj),towero,towerc,7,0), colorred;
        stickline(sensitivy>towerc and not(tj),towero,towerc,7,0), colorgreen;
        stickline((towerc=towero or sensitivy=towerc) and direction=1,towero,towerc,7,0),colorred;
        stickline((towerc=towero or sensitivy=towerc) and direction=0,towero,towerc,7,0),colorgreen;
           







发表于 2022-1-15 20:10 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 08:18 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 08:20 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 08:48 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 08:57 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 09:52 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 10:39 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

发表于 2022-1-16 11:10 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|股海明灯官网 ( 京ICP备18020431号 )

GMT+8, 2024-11-23 03:01 , Processed in 0.096355 second(s), Total 11, Slave 11 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表