A:在实际提取指标数据过程中,由于需要实时计算,所以不能进行批量提取,需要循环调用才可实现。
下面我们给三个非常常用的取数案例(用户可对照返回的结果样示找自己合适的):
范例1:取一段时间内A股个股的每日流通市值
逻辑:外层股票循环,内层时间循环,指定股票,指定时间取指标值。
数据结果存放:以时间为行标,证券代码为列标进行存储,优点是取数方便,缺点是一次只能存放一个指标值。
begt:=20210101t;
endt:=20210201t;
bkName:='A股';
//上面三个变量可封装为参数
stocks:=getbk(bkName); //获取股池
setsysparam(pn_cycle(),cy_day()); //周期
dayList:= markettradedayqk(begt,endt); //取区间时间序列
data:=array();
for i:=0 to length(stocks)-1 do //股票循环
begin
setsysparam(pn_stock(),stocks[i]); //设置当前证券代码
IPO:=firstday();
for j:=0 to length(dayList)-1 do //时间循环
begin
dayEnd:=dayList[j];
if IPO>dayEnd then //剔除掉还未上市的
continue;
//获取指标值-股票流通市值
data[datetoint(dayEnd),stocks[i]]:=StockMarketValue(dayEnd);
end;
end;
return data;
结果展示:
范例2:取一段时间内A股个股的每日涨幅与收盘价等指标
逻辑:外层股票循环,内层股票交易日序列的时间循环,取指定股票指定日的指标值
数据存放:行标为自增序列,列标为各指标名,优点是可同时存放多个指标的数据
begt:=20210101t;
endt:=20210112t;
bkName:='A股';
stocks:=getbk(bkName); //获取股池
setsysparam(pn_cycle(),cy_day()); //周期
data:=array();
k:=0;
for i:=0 to length(stocks)-1 do //股票循环
begin
setsysparam(pn_stock(),stocks[i]); //设置当前证券代码
dayList:= stocktradedayqk(begt,endt); //取当前证券的交易时间序列
for j:=0 to length(dayList)-1 do //时间循环
begin
dayEnd:=dayList[j];
setsysparam(pn_date(),dayEnd);//设置当前时间,给不需要时间参数的指标提供指定日
data[k]['StockID']:=stocks[i];
data[k]['StockName']:=stockName(stocks[i]);
data[k]['Date']:=datetostr(dayEnd);
//获取多个指标值
data[k,'收盘价']:=close();
data[k,'成交量']:=vol();
data[k,'涨幅(%)']:=stockzf3();
data[k,'总市值']:=StockTotalValue(dayEnd);
//还可以继续添加其它指标
//data[k,'xxx']:=funcxxx(...);
k++;
end;
end;
return data;
范例3:取一段时间内每日A股个股的每日涨幅与收盘价等指标。
特点:成份股与指定日有关
逻辑:外层市场交易日循环,内层指定日成份股循环,取指定日指定市场成份股的指标值
数据存放:行标为自增序列,列标为各指标名,优点是可同时存放多个指标的数据
begt:=20210101t;
endt:=20210112t;
bkName:='A股';
setsysparam(pn_cycle(),cy_day()); //周期
dayList:=Markettradedayqk(begt,endt); //取市场交易时间序列
data:=array();
k:=0;
for i:=0 to length(dayList)-1 do //时间循环
begin
dayEnd:=dayList[i];
setsysparam(pn_date(),dayEnd);//设置当前时间,给不需要时间参数的指标提供指定日
stocks:=getAbkbydate(bkName,dayEnd); //获取指定日股池--只支持A股等,其它板块通过指数成份股提取
for j:=0 to length(stocks)-1 do //股票循环
begin
stockid:=stocks[j];
setsysparam(pn_stock(),stockid); //设置当前证券代码
data[k]['StockID']:=stockid;
data[k]['StockName']:=stockName(stockid);
data[k]['Date']:=datetostr(dayEnd);
//获取多个指标值
data[k,'收盘价']:=close();
data[k,'涨幅(%)']:=stockzf3();
data[k,'总市值']:=StockTotalValue(dayEnd);
//还可以继续添加其它指标
//data[k,'xxx']:=funcxxx(...);
k++;
end;
end;
return data;