搜索
查看: 79214|回复: 67

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

[复制链接]
发表于 2003-9-16 19:48 | 显示全部楼层

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

来自:MACD论坛(bbs.shudaoyoufang.com) 作者:南客 浏览:79214 回复:67

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

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

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)+'只');
金币:
奖励:
热心:
注册时间:
2001-11-27

回复 使用道具 举报

 楼主| 发表于 2003-9-16 19:49 | 显示全部楼层
二、横向排序:
//本公式输出结果,请在解盘中查看,由于大量引用了其它指标,因此运算时间会稍长

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;
金币:
奖励:
热心:
注册时间:
2001-11-27

回复 使用道具 举报

 楼主| 发表于 2003-9-16 19:50 | 显示全部楼层
  这里给出的代码示例,请下载飞狐0916测试版后使用,否则将会出现语法等错误。
  从上面代码示例可以看出,板块股票代码的遍历是基础,有了这个横向遍历,就可以实现横向排序、横向统计。
  上面未给出横向统计的示例,大家可以参照上面示例,根据自己的需要进行设计。
  几个关键函数:stkfromblk(),sortpos(),可进入公式编辑器,查看函数注释。
  飞狐的循环、条件控制语句,可以任意访问的数据,将给处理问题带来极大的方便。
  下面,再给一段代码,是利用循环、判断语句,设计一个鬼变脸的公式代码:

sensitivy:=-c;
direction:=c;
towero:=o;
towerc:=c;
fc:=c;
i:=2;
while i<=datacount do begin
  if towerc[i]>towero[i] and not(between(sensitivy[i],towero[i],towerc[i])) then
    direction[i]:=1;
  else if towerc[i]<towero[i] and not(between(sensitivy[i],towero[i],towerc[i])) then
         direction[i]:=0;
       else direction[i]:=direction[i-1];
  if not(between(sensitivy[i-1],towero[i-1],towerc[i-1])) then begin
    towero[i]:=towerc[i-1];towerc[i]:=fc[i];
    sensitivy[i]:=towero[i-1];
  end else begin
    towero[i]:=towerc[i-1];towerc[i]:=fc[i];
    sensitivy[i]:=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;
金币:
奖励:
热心:
注册时间:
2001-11-27

回复 使用道具 举报

发表于 2003-9-16 20:07 | 显示全部楼层
3q!!!!!!!!!!!!!!!!!!!!!!!!!!!
金币:
奖励:
热心:
注册时间:
2003-4-16

回复 使用道具 举报

签到天数: 5 天

发表于 2003-9-16 20:54 | 显示全部楼层
学习!
金币:
奖励:
热心:
注册时间:
2002-2-15

回复 使用道具 举报

发表于 2003-9-24 15:49 | 显示全部楼层
这个就方便自己设计指数了~
金币:
奖励:
热心:
注册时间:
2003-9-19

回复 使用道具 举报

发表于 2003-9-28 10:29 | 显示全部楼层
a:=MA(c,2);
b:=MA(c,5);
请教南客先生在解盘中如何显示黄金交叉的值  CROSS(a,b);这个交叉的股票价格如何在解盘中显示。而且是在死叉前一直保留金叉的股票价格数值。
谢谢。
金币:
奖励:
热心:
注册时间:
2003-9-20

回复 使用道具 举报

发表于 2003-10-4 10:24 | 显示全部楼层
为了您和您的家人的幸福请:远离股市,远离毒品.
金币:
奖励:
热心:
注册时间:
2002-6-7

回复 使用道具 举报

发表于 2003-10-5 23:45 | 显示全部楼层
Originally posted by 南客 at 2003-9-16 07:49 PM:
二、横向排序:
//本公式输出结果,请在解盘中查看,由于大量引用了其它指标,因此运算时间会稍长

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



很好!  就是电脑(p1.8g  ddr256   7200  64m)都无法正常运行  占用系统资源太大  乖乖!
金币:
奖励:
热心:
注册时间:
2003-4-6

回复 使用道具 举报

发表于 2003-10-6 16:20 | 显示全部楼层

ok!

金币:
奖励:
热心:
注册时间:
2003-7-18

回复 使用道具 举报

发表于 2003-10-10 01:16 | 显示全部楼层
好,谢谢南客老师
金币:
奖励:
热心:
注册时间:
2002-12-6

回复 使用道具 举报

发表于 2003-10-16 22:13 | 显示全部楼层
谢谢你
金币:
奖励:
热心:
注册时间:
2003-9-16

回复 使用道具 举报

发表于 2003-10-20 09:13 | 显示全部楼层
南客先生:
飞狐公式能否调用个股的版块属性?
如能,什么函数?
金币:
奖励:
热心:
注册时间:
2003-5-26

回复 使用道具 举报

发表于 2003-10-20 16:46 | 显示全部楼层
GOD,

南客来这当版主了,

对于人气大大提升呀!!
金币:
奖励:
热心:
注册时间:
2002-6-4

回复 使用道具 举报

发表于 2003-10-20 16:47 | 显示全部楼层
不过说实话,

这二个函数,

真的不如,使用飞狐的DLL功能,
这样运算起来,又快又好!
金币:
奖励:
热心:
注册时间:
2002-6-4

回复 使用道具 举报

发表于 2003-10-24 22:01 | 显示全部楼层
高手!谢谢!我长见识了!
呵呵。。。。。。
金币:
奖励:
热心:
注册时间:
2003-8-7

回复 使用道具 举报

发表于 2003-10-25 15:38 | 显示全部楼层
good!
金币:
奖励:
热心:
注册时间:
2003-4-8

回复 使用道具 举报

发表于 2003-10-31 08:00 | 显示全部楼层
测试,横向排序不能按指标排序!!!不知哪里出了差错!!!!请南客老师检查!
金币:
奖励:
热心:
注册时间:
2001-12-22

回复 使用道具 举报

发表于 2003-10-31 09:06 | 显示全部楼层
我不懂公式,看不懂!
金币:
奖励:
热心:
注册时间:
2003-10-16

回复 使用道具 举报

发表于 2003-10-31 15:27 | 显示全部楼层
好负责,
好复杂.
金币:
奖励:
热心:
注册时间:
2003-9-1

回复 使用道具 举报

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

本版积分规则

本站声明:MACD仅提供交流平台,请交流人员遵守法律法规。
值班电话:18209240771   微信:35550268

举报|意见反馈|手机版|MACD俱乐部

GMT+8, 2025-4-15 15:14 , Processed in 0.033270 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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