FAQ > 金融建模 > 建模问题 > 平台使用

Q:天软自定义多选参数类型的功能与用法说明    

简述
在封装函数的过程中,有些场景可能需要通过一个参数设置多个可选项,此时就可以通过“自定义多选”类型进行实现。
  • “自定义多选”参数类型
    功能说明:在函数的参数类型中新增“自定义多选”类型,此类型适用于需要进行多项勾选的情景

    用法:参数类型设置为“自定义多选”类型后,参数定义的操作类似于自定义参数的设置,但是对于各项的取值有特别要求。

    在参数定义中,各项取值应该设置为1、2、4、8、16这种2^n次方模式。

     单选时,参数值取的是对应被选项的值。
     多选时,参数值取的是多项被选项值的或(即各项值的和)。


    用户在使用中,需要对该参数值进行解析到对应位数(二进制)的值对应到各项上,单项上1表示被选定,0表示没有被选定

    这样子描述可能比较抽象,下面我们提供一个范例,进行辅助理解。

    范例:封装函数Test_CDSParam2,实现根据勾选项输出指定日上证50成份股的行情指标
    Function Test_CDSParam2(Endt,outField);
    Begin
     {//返回上证50成份股在指定日的指定行情指标数据
     可选指标outField:
     1:名称 对应二进制1
     2:收盘价 对应二进制10
     4:成交量 对应二进制100
     8:最高价 对应二进制1000
     16:最低价 对应二进制10000
     32:开盘价 对应二进制100000
     // return array(outField.&1,outField.&2,outField.&4,outField.&8,outField.&16,outField.&32);

     }
      ov:=BackUpSystemParameters2();
      setsysparam(pn_date(),Endt);
      stocks:=select thisrow as "StockID" from GetBKByDate("SH000016",Endt) end;//取指数在指定日的成份股
      if outField.&1 then //输出名称--借助位与运算进行判断是否被勾选
        stocks:=select *,StockNameEndT(['StockID'],Endt) as '名称' from stocks end;
      if outField.&2 then //输收盘价
        stocks:=select *,spec(close(),['StockID']) as '收盘价' from stocks end;
      if outField.&4 then //输出成交量
        stocks:=select *,spec(vol(),['StockID']) as '成交量' from stocks end;
      if outField.&8 then //输出最高价
        stocks:=select *,spec(high(),['StockID']) as '最高价' from stocks end;
      if outField.&16 then//输出最低价
        stocks:=select *,spec(low(),['StockID']) as '最低价' from stocks end;
      if outField.&32 then//输出开盘价
        stocks:=select *,spec(open(),['StockID']) as '开盘价' from stocks end;   
      return stocks;
    End;

    参数outField的设置如下:


    执行调用:输出“证券名称”,“收盘价”,“成交量”,“开盘价”这四个指标,选项如下

    执行结果: