A:
spec、specdate、specall仅对该语句有效。
1、如果临时设置系统股票,可用spec,例如:
setsysparam(pn_stock(),'SH000300');
setsysparam(pn_date(),20151109T);
c0:=close();
c1:=spec(close(),'SH600000'); //浦发银行当天的价格
return array('沪深300':c0,'个股':c1);
2、如果临时设置系统时间,可用specdate,例如:
setsysparam(pn_stock(),'SH000300');
setsysparam(pn_date(),20151109T);
c0:=close();
c1:=specdate(close(),20181109T); //20181109日当前股票的价格
return array(20151109:c0,20181109:c1);
3、spec与specdate可嵌套使用,例如:
setsysparam(pn_stock(),'SH000300');
setsysparam(pn_date(),20151109T);
c0:=close();
c1:=specdate(close(),20181109T); //20181109日当前股票的价格
c2:=spec(close(),'SH600000');//SH600000在当前时间的价格
c3:=spec(specdate(close(),20181109T),'SH600000');//SH600000在指定日的价格
return array(c0,c1,c2,c3);
4、如果需要同时临时更改多个或其他,用specAll,例如:
setsysparam(pn_stock(),'SH000300');
setsysparam(pn_date(),20151109T);
c0:=close();
//取浦发银行在20190628日14点钟的价格
c1:=specall(close(),array(pn_stock():'SH600000',pn_cycle():cy_1m(),pn_date():20190628.14T));
return array(c0,c1);
5、如果需要临时更改系统参数,并计算多个指标,则应使用with *,array(...) do 的方式,例如:
setsysparam(pn_stock(),'SH000300');
setsysparam(pn_date(),20151109T);
c0:=close();
with *,array(pn_stock():'SZ000001',pn_rate():1,pn_rateday():0) do
begin // 取 SZ000001的前复权收盘价与10日均价
c1:=close();
c2:=ma(close(),10);
end
c3:=ma(close(),10); //与c0的系统环境一致:取SH000300的10日均价
return array(c0,c1,c2,c3);
注:以上这段代码,用with ... do 临时设置了当前的股票、复权方式、复权基准日,仅对begin...end封装的语句有效。