说明:个股涨幅可通过stockzf等模型计算,要统计市场涨幅的分布情况,需要根据自定义的涨幅区间进行分类统计得到,这里针对这类统计做了一个实现范例,供用户参考。
FAQ:
StockZf3
需求说明:下面是实现指定日所有A股个股涨幅的一个分布统计。
统计规则为:下跌(<0%),上涨分为 0-1%, 1-5%,5%以上。
实现代码一:指定日的实现
//取数
endt:=20240219T;
stocks:=getAbkbydate("A股",endt);
setsysparam(Pn_date(),endt);
setsysparam(pn_cycle(),cy_day());
stockdata:=select thisrow as '代码',spec(stockzf3(),thisrow) as '涨幅(%)'
from stocks where spec(istradeday(endt),thisrow) end;
//统计
lambda:=function(v) //匿名函数,实现统计规则
begin
Case v of //前开后闭
-inf to 0:return "<0%";
0 to 1:return "0-1%";
1 to 5:return "1-5%";
5 to inf:return "5+%";
end;
end;
//查看每个个股的一个所属分布可通过下面代码实现
// t:= select *,lambda.do(['涨幅(%)']) as '类别' from stockdata end;
//直接统计分类的个数-->比分组统计效率高
r:=array();
for i:=0 to length(stockdata)-1 do
r[lambda.do(stockdata[i]['涨幅(%)'])]++;
return r[array("<0%","0-1%","1-5%","5+%")];
返回如:
实现代码二:多日市场的结果展示
将实现一中的实现过程封装成独立函数,然后,取时间序列进行循环调用,合并结果即可
实现如下:
第一步:封装函数getAZFDisTrib(endt)
function getAZFDisTrib(endt);
begin
//取数
//endt:=today();
stocks:=getAbkbydate("A股",endt);
setsysparam(Pn_date(),endt);
setsysparam(pn_cycle(),cy_day());
stockdata:=select thisrow as '代码',spec(stockzf3(),thisrow) as '涨幅(%)'
from stocks where spec(istradeday(endt),thisrow) end;
//统计
lambda:=function(v) //匿名函数,实现统计规则
begin
Case v of //前开后闭
-inf to 0:return "<0%";
0 to 1:return "0-1%";
1 to 5:return "1-5%";
5 to inf:return "5+%";
end;
end;
// t:= select *,lambda.do(['涨幅(%)']) as '类别' from stockdata end;
r:=array();
r["日期"]:=datetostr(endt);//增加指定日的返回,便于上层调用
for i:=0 to length(stockdata)-1 do
r[lambda.do(stockdata[i]['涨幅(%)'])]++;
return r[array("日期","<0%","0-1%","1-5%","5+%")];
end
第二步:执行调用
tim:=MarketTradeDayQk(20240201T,20240220T);//取区间市场交易日序列
r:=array();
for i:=0 to length(tim)-1 do
r[i]:=getAZFDisTrib(tim[i]);
return r;
返回展示:
