|
|
向论坛内真正的高手求助:一个公式算法的实现
来自:MACD论坛(bbs.shudaoyoufang.com)
作者:18982136530
浏览:28809
回复:16
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
还是上次我说的那个问题:怎样访问市场全部股票的历史数据?
现在看一段代码:
涨幅:=(c/ref(c,1)-1)*100;
换手率:=v/capital*100;
上市天数:=datacount;
m:=0;
n:=0;
b:=0;
for i:=2 to 上市天数-1 do //对当前股票进行纵向搜索,统计符合条件后,次日的涨跌情况。
begin
条件:=BETWEEN(涨幅,涨幅[上市天数]+0.1,涨幅[上市天数]-0.1) //历史上,涨幅及换手率和今天相似。
and BETWEEN(换手率,换手率[上市天数]*0.9,换手率[上市天数]*1.1);
if 条件 then //统计符合条件的数量,及次日涨跌平均值。
begin
m:=m+涨幅[i+1];
n:=n+1;
if 涨幅[i+1]>0 then
b:=b+1;
end;
end;
采样数:n;
上涨天数:b;
明日涨幅:m/n;
现在回来,以上代码只是实现了单只股票的搜索,也就是说只实现了纵向搜索。
要实现全市场搜索还早呢,继续看下面代码:
//取得当前股票的即时数据。
当前涨幅:=(c/ref(c,1)-1)*100;
当前换手:=v/capital*100;
当前天数:datacount;
//用数组储存股票数据。
A股:='A股板块';
A股数量:=stkcount(A股);
k线数量:='我的指标.上市天数';
股票涨幅:='我的指标.涨幅';
股票换手:='我的指标.换手率';
variable:A股代码[A股数量]='',
上市天数[A股数量]=0,
当日涨幅[A股数量]=0,
当日换手[A股数量]=0,
A股涨幅[6000]=0,
A股换手[6000]=0,
m:=0,
n:=0;
//实现市场全搜索
for b:=1 to A股数量 do //横向循环
begin
dm:=stkfromblk(A股,b);
A股代码:=dm; //取得第b支股票的代码。
k线数:=stkindi(A股代码,k线数量,0,6);
上市天数:=k线数[datacount]; //取得第b支股票的上市天数。
历史涨幅:=stkindi(A股代码,股票涨幅,0,6); //取得第b支股票的涨幅序列变量。
历史换手:=stkindi(A股代码,股票换手,0,6); //取得第b支股票的换手序列变量。
for d:=2 to 上市天数-1 do //纵向循环,将数据读入内存,逐一比较。
begin
条件:=历史涨幅[d]=当前涨幅[datacount]
and 历史换手[d]=当前换手[datacount];
if 条件 then
begin
m:=m+历史涨幅[d]; //m用于累加涨幅。
n:=n+1; //计数器,n用于记录满足条件的样本个数。
end;
end;
end;
采样天数:n;
平均上涨:m/n;
以上代码编译能通过,现在问题出来了:进行循环算法时,总是出现数组越界。估计问题出现在: 历史涨幅:=stkindi(A股代码,股票涨幅,0,6); 这段代码上,等号两边序列变量上界不相等,造成内循环时,出现数组越界。
请论坛内的高手出来讨论一下,怎样实现全搜索算法,在此先谢谢诸位高手,静待佳音。 |
|
|