For K=1 to StkSum do
begin
dm:=StkFromBlk(bk,K);
tempZF:=StkIndi(dm,ZFGS,0,6);//取上涨幅度
tempLB:=StkIndi(dm,LBGS,0,6);
IF (tempZF[K]>100) then
begin
MakeUpNum:=MakeUpNum+1;
MakeUp:=MakeUp+tempZF[K]-100;
// UpAmountRatio:=UpAmountRatio+tempLB[K];
end;
IF (tempZF[K]<100) then
begin
ComeDownNum:=ComeDownNum+1;
ComeDown:=ComeDown+100-tempZF[K];
//DownAmountRatio:=DownAmountRatio+tempLB[K];
end;
end;
AvgUpAmountRatio:=UpAmountRatio/MakeUpNum;//上涨股的平均量比
//AvgDnAmountRatio:=DownAmountRatio/ComeDownNum;//下跌股的平均量比
AvgMakeUp:=MakeUp/MakeUpNum;//上涨股平均涨幅
AvgComeDown:=ComeDown/ComeDownNum;//下跌股平均跌幅
Variable: MakeUpNum=0*c;
Variable: ComeDownNum=0*c;
Variable: MakeUp=0*c;
Variable: ComeDown=0*c;
Variable: UpAmountRatio=0*c;
Variable: DownAmountRatio=0*c;
ZFGS:='涨幅指数.ZF';
LBGS:='量比指标.VRatio';
bk:='A股板块';
StkSum:=StkCount('A股板块');
variable:dm[StkSum]='';
dm[1]:=StkFromBlk(bk,1);
tempLB:=StkIndi(dm[1],LBGS,0,6);
For J=LBound(tempLB) to datacount do
begin
For K=1 to StkSum do
begin
dm[K]:=StkFromBlk(bk,K);
tempZF:=StkIndi(dm[K],ZFGS,0,6);//取上涨幅度
tempLB:=StkIndi(dm[K],LBGS,0,6);//取量比指标
IF (tempZF[K]>100) then
begin
MakeUpNum[J]:=MakeUpNum[J]+1;
MakeUp[J]:=MakeUp[J]+tempZF[K]-100;
UpAmountRatio[J]:=UpAmountRatio[J]+tempLB[K];
end;
IF (tempZF[K]<100) then
begin
ComeDownNum[J]:=ComeDownNum[J]+1;
ComeDown[J]:=ComeDown[J]+100-tempZF[K];
DownAmountRatio[J]:=DownAmountRatio[J]+tempLB[K];
end;
end;
AvgUpAmountRatio[J]:=UpAmountRatio[J]/MakeUpNum[J];//上涨股的平均量比
AvgDnAmountRatio[J]:=DownAmountRatio[J]/ComeDownNum[J];//下跌股的平均量比
AvgMakeUp[J]:=MakeUp[J]/MakeUpNum[J];//上涨股平均涨幅
AvgComeDown[J]:=ComeDown[J]/ComeDownNum[J];//下跌股平均跌幅
end;
上涨股平均量比:AvgUpAmountRatio;
下跌股平均量比:AvgDnAmountRatio;
上涨股平均涨幅:AvgMakeUp;
下跌股平均跌幅:AvgComeDown;
For J=LBound(tempLB) to datacount do
begin
For K=1 to StkSum do
连续循环了。
nihs (2008-7-28 12:33:18)
QUOTE:
原帖由 joneslee 于 2008-7-28 06:34 发表
For J=LBound(tempLB) to datacount do
begin
For K=1 to StkSum do
连续循环了。
是二个循环,一个是对K线数循环,一个是对股票数循环,应该没错呀?
joneslee (2008-7-28 18:42:12)
这个还未解决吗?
nihs (2008-7-29 20:26:02)
在5楼我写的代码大致没错
第一处
有一句: IF (tempZF[K]>100) then 及 IF (tempZF[K]<100) then 其中的K应改为J
第二处:
For J=LBound(tempLB) to datacount do
如果LBound(tempLB) 改为datacount,即只计算最新一个K线的数据, 是可行的.
问题还是在LBound(tempLB)上.
诚如所言.先遍历所有A股,再遍历所有K线,非常费时间.
我将遍历的板块改为"自选股",里面只有100只股票,再将循环改为
For J=datacount-100 to datacount do
即只计算最后100个K线数据,花了大约十分钟才做出来.
好在真正有意义的一般是最后一个K线,所以J只要取datacount值就可以了
LBound(tempLB)应取什么值才不会出现数组下标越界或超出有限范围错误,尚不清楚
最新回复
nihs (2008-7-05 18:04:09)
Variable: MakeUpNum=0;
Variable: ComeDownNum=0;
Variable: MakeUp=0;
Variable: ComeDown=0;
Variable: UpAmountRatio=0;
Variable: DownAmountRatio=0;
ZFGS:='涨幅指数.ZF';
//LBGS:='量比指标.VRatio';
bk:='A股板块';
StkSum:=StkCount('A股板块');
For K=1 to StkSum do
begin
dm:=StkFromBlk(bk,K);
tempZF:=StkIndi(dm,ZFGS,0,6);//取上涨幅度
tempLB:=StkIndi(dm,LBGS,0,6);
IF (tempZF[K]>100) then
begin
MakeUpNum:=MakeUpNum+1;
MakeUp:=MakeUp+tempZF[K]-100;
// UpAmountRatio:=UpAmountRatio+tempLB[K];
end;
IF (tempZF[K]<100) then
begin
ComeDownNum:=ComeDownNum+1;
ComeDown:=ComeDown+100-tempZF[K];
//DownAmountRatio:=DownAmountRatio+tempLB[K];
end;
end;
AvgUpAmountRatio:=UpAmountRatio/MakeUpNum;//上涨股的平均量比
//AvgDnAmountRatio:=DownAmountRatio/ComeDownNum;//下跌股的平均量比
AvgMakeUp:=MakeUp/MakeUpNum;//上涨股平均涨幅
AvgComeDown:=ComeDown/ComeDownNum;//下跌股平均跌幅
cwy (2008-7-06 08:07:57)
http://www.chcj.net/blog.php?tid=986824
nihs (2008-7-06 14:05:28)
范例是求一个股票对所有K线的技术指标横向统计.然后遍历所有股票
我的做法(横向统计的标准做法)是对所有股票的技术指标横向统计,然后遍历所有K线.
为什么不用飞狐的横向统计管理功能呢,是因为它太慢了,而且要每天更新才能用.有时我感觉它计算的结果不对.
飞狐公式的调试真是很困难,不能单步运行,不知公式是不是按照所想像的在跑.有时只能解盘输出来看.各位老师没有没好的办法
大智慧二代有一个调试界面,可是有很多函数都没有,如stkinblock,stkcount.
我正在修改.成功后贴出来,给希望用横向统计的朋友一个帮助.
如果有那位朋友先改出来了,也请不要吝啬贴出来给大伙瞄瞄.
nihs (2008-7-06 14:31:37)
Variable: MakeUpNum=0*c;
Variable: ComeDownNum=0*c;
Variable: MakeUp=0*c;
Variable: ComeDown=0*c;
Variable: UpAmountRatio=0*c;
Variable: DownAmountRatio=0*c;
ZFGS:='涨幅指数.ZF';
LBGS:='量比指标.VRatio';
bk:='A股板块';
StkSum:=StkCount('A股板块');
variable:dm[StkSum]='';
dm[1]:=StkFromBlk(bk,1);
tempLB:=StkIndi(dm[1],LBGS,0,6);
For J=LBound(tempLB) to datacount do
begin
For K=1 to StkSum do
begin
dm[K]:=StkFromBlk(bk,K);
tempZF:=StkIndi(dm[K],ZFGS,0,6);//取上涨幅度
tempLB:=StkIndi(dm[K],LBGS,0,6);//取量比指标
IF (tempZF[K]>100) then
begin
MakeUpNum[J]:=MakeUpNum[J]+1;
MakeUp[J]:=MakeUp[J]+tempZF[K]-100;
UpAmountRatio[J]:=UpAmountRatio[J]+tempLB[K];
end;
IF (tempZF[K]<100) then
begin
ComeDownNum[J]:=ComeDownNum[J]+1;
ComeDown[J]:=ComeDown[J]+100-tempZF[K];
DownAmountRatio[J]:=DownAmountRatio[J]+tempLB[K];
end;
end;
AvgUpAmountRatio[J]:=UpAmountRatio[J]/MakeUpNum[J];//上涨股的平均量比
AvgDnAmountRatio[J]:=DownAmountRatio[J]/ComeDownNum[J];//下跌股的平均量比
AvgMakeUp[J]:=MakeUp[J]/MakeUpNum[J];//上涨股平均涨幅
AvgComeDown[J]:=ComeDown[J]/ComeDownNum[J];//下跌股平均跌幅
end;
上涨股平均量比:AvgUpAmountRatio;
下跌股平均量比:AvgDnAmountRatio;
上涨股平均涨幅:AvgMakeUp;
下跌股平均跌幅:AvgComeDown;
cwy (2008-7-07 20:33:40)
QUOTE:
看结果有什么不同。从速度考虑,自选股只加入二支股票“600000”和“600001”。“为什么不用飞狐的横向统计管理功能呢,是因为它太慢了”
这个功能如计算的股票太多也很慢的。
2008-07-07_202215.png
nihs (2008-7-07 21:41:09)
QUOTE:
结果是不同的."求一个股票对所有K线的技术指标横向统计",例如一个股票一个月内的平均价格
"对所有股票的技术指标横向统计",例如,某一天所有股票的平均价格.
是完全不同的两码事.
你的图片是用我的公式得到的图吗?
nihs (2008-7-08 20:20:36)
涨幅指数:
zf:(c/ref(c,1))*100;
量比指标:
VRatio:vol/(MA(vol,10));
joneslee (2008-7-11 22:59:06)
joneslee (2008-7-11 23:08:54)
joneslee (2008-7-18 08:11:42)
nihs (2008-7-27 23:08:22)
fv:=v;ma2:=0*c;
x:=SETLBOUND(ma2,2);
for i=datacount downto 2 do {i终点已经是2了,干吗还用SETLBOUND来控制呢?}
ma2:(fv[i-1]+fv)/2;
Fc:=close;
答(hx817):
1、去掉 x:=SETLBOUND(ma2,2); 看看输出是什么结果就知道了
我试了一下去掉这句话,输出结果没有变化.
为什么要设定SetLBound?在什么情况下设定?能否解答一下.
对于遍历股票后进行比较,判断要考察的股票这个指票在股票群中处于什么位置?偏高?偏低?这是一个常见的问题.
感觉到要比较的指标是一个二维数组,一方面是时间上,一方面是指所遍历的股票上.这两个关系没弄清楚,所以会出现数组下标越界或超出有效范围的错误.
还请大家努力找到错误的原因,
[ 本帖最后由 nihs 于 2008-7-27 23:10 编辑 ]
joneslee (2008-7-28 06:34:47)
begin
For K=1 to StkSum do
连续循环了。
nihs (2008-7-28 12:33:18)
QUOTE:
是二个循环,一个是对K线数循环,一个是对股票数循环,应该没错呀?joneslee (2008-7-28 18:42:12)
nihs (2008-7-29 20:26:02)
第一处
有一句: IF (tempZF[K]>100) then 及 IF (tempZF[K]<100) then 其中的K应改为J
第二处:
For J=LBound(tempLB) to datacount do
如果LBound(tempLB) 改为datacount,即只计算最新一个K线的数据, 是可行的.
问题还是在LBound(tempLB)上.
诚如所言.先遍历所有A股,再遍历所有K线,非常费时间.
我将遍历的板块改为"自选股",里面只有100只股票,再将循环改为
For J=datacount-100 to datacount do
即只计算最后100个K线数据,花了大约十分钟才做出来.
好在真正有意义的一般是最后一个K线,所以J只要取datacount值就可以了
LBound(tempLB)应取什么值才不会出现数组下标越界或超出有限范围错误,尚不清楚
Vielen Danke, Herr joneslee.
fffffffv (2008-8-01 13:51:38)
第二个卖报人,站在十字路口,红绿灯带给热血江湖外挂不少便利。一旦乘车的人被红灯所阻,他就前前后后地在停下的车队旁奔跑着,大声叫喊着他所卖报纸的名字。我有几次试图从魔域外挂那里买一份报纸,但都未能如愿,因为他总是忙于奔跑,很难锁定他的位置。我招手、喊叫,但他似乎从来就没有注意到我。
第三个卖报人,则总是固定地站在繁华街道的中央。双腿略微分开,以保持他的站姿。他的手中拿着几份报纸放在胸前,以使司机和乘客从征途外挂身边驶过的时候,能够瞥一眼大字标题。他从来不随着车辆走动,他总是等着他的惊天动地外挂驶向他的身边。他用使人愉快的“早上好”问候每一个从他身边过去的赤壁外挂,当有人慢下来打算购买报纸时,他的脸上绽放出灿烂的笑容。他友好的态度给QQ自由幻想外挂留下了深刻印象。当我驾车离开时,他在后面大声说道:“谢谢你!祝你有快乐的一天!明天见!”他总是设法在卖出报纸的几秒钟内,把这些话语说得清清楚楚,又悦耳动听。
没错,第三个卖报人是我最喜欢的。想必诛仙外挂会说,这也没什么大不了,不就是卖出一张报纸吗?但是我们完全可以从3个卖报人身上体会到很多东西:
你的工作可能并非你理想的工作,但你完全可以凭借苍天外挂今天所做的一切使自己感到充实和快乐。
即使是几秒钟的短暂时间也同样能给他人留下深刻的印象,所以不要因为时间太短暂,就忽略自己的言行。
你所做的美好行为不可能都有美好的回报,但糟糕的行为一定会导致糟糕的返还。
一颗懂得感恩的心,一个甜美的笑容,一句简短的问候,尽管都是最细微不过的表现,但日久天长,它们所带给封神榜2外挂,的回报会远远超出你的想象。
战胜竞争对手最好的方法,就是提供更好的服务。
这天早上,又下雨了。第一个卖报人不知道躲到哪里去了。第二个卖报者,拿着湿漉漉的报纸继续在车流中来回奔跑。第三个卖报人,依旧站在他的位置上,身穿一件鲜亮的黄色雨衣,胸前的报纸被严严实实地遮挡在透明的塑料布下面,报纸一点没湿,人们仍然能看到醒目的大字标题,更能清晰地看到他脸上洋溢着的灿烂的笑容。