以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  [求助]悬赏1个金币~求20个不等于0的数值求和..  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=5689)

--  作者:bbking
--  发布时间:2011/3/14 14:04:34
--  [求助]悬赏1个金币~求20个不等于0的数值求和..

一个类似于close一样的序列变量flag=[...1 2 0 -1 0 0 3 0 -1 -2]

我要找前面不等于0的20个数字~求个和值sum~怎么弄?

逐周期模式的...

f:=0;

addsum:=0;
for i=datacount downto 1 do
if not(flag[i]=0) then begin
addsum:=addsum+flag[i];
f:=f+1;//记录不为0的个数
end

if f=20 then break;

s_flag:addsum,linethick0;
=========================

这样好像不行

 

有些是序列模式的写法...需要转换回序列模式..

 

也可以把问题转换一下~

逐周期模式下

求满足前面最近20个不等于0的flag到当前的周期数...

 

 

哪位有好点的算法...??

[此贴子已经被作者于2011-3-14 14:04:58编辑过]

--  作者:阿火
--  发布时间:2011/3/14 15:13:38
--  

首先算出第一次出现20个不为0的开始日期

然后用while语句

 

比如用收盘价,那么从第21根K线开始算起

 

if barpos>20 then begin
 num:=0;
 zongshu:0;
 i:=1;
 while num<20 do begin
  if c[barpos-i]<>0 then begin
   zongshu:=zongshu+c[barpos-i];
   num:=num+1;
  end
  i:=i+1;
 end
end

 


--  作者:guotx2010
--  发布时间:2011/3/23 11:37:56
--  

//将f,addsum两个变量设置为全局变量

variable:f=0,addsum=0;

for i=datacount downto 1 do
if not(flag[i]=0) then begin
addsum:=addsum+flag[i];
f:=f+1;//记录不为0的个数
end

if f=20 then break;

s_flag:addsum,linethick0;
=========================

[此贴子已经被作者于2011-3-23 11:38:14编辑过]