FAQ > 金融建模 > 建模问题 > 系统参数

Q:怎么临时设置系统参数?    

  • 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封装的语句有效。