FAQ > 金融建模 > 建模问题 > 其他

Q:如何在天软客户端同时返回多个结果集窗口    

  • A:用户可通过函数sendrunningdata返回任意窗口,与return 返回有所区别,具体表现如下:
    1、Return是结束当前函数后返回变量结果,而sendrunningdata只是返回变量结果,无结束程序的功能。
    2、Return的结果受当前设置的精度影响(即PN_Precision()),而sendrunningdata不受此影响,返回的总是原始精度的数值,若需要保留精度,得提前对数据进行处理后返回。
    3、函数只能return 一个数据,而sendrunningdata可以返回任意个变量数据。

    sendrunningdata函数说明:
    定义:SendRunningData(Data:Any,NWdow:string):any
    说明:程序中将变量的值返回到客户端窗口
    参数:
    Data:任意类型数据,可以是实数,表格,图型等任意数据类型。
    NWdow:字符串,窗口名称,可不给,则默认函数结果集窗口,若重名,则会覆盖。
    返回:窗口中返回变量的值

    应用范例:实时监控中展示选定股票的盘中信息,及市场指数的盘中数据,分两个窗口

    //实时返回选定股票的盘中信息
    //股票
    stocks:=array("SH600000","SH600004","SH600009","SH600010","SH600011","SH600015",
    "SH600016","SH600018","SH600019");
    //指数
    indexs:=array("SH000001","SH000016","SH000300","SH000905","SH000852");
    T0:=strtotime('15:01:00'); //收盘时间点
    Arr1:=select thisrow as '代码',stockname(thisrow) as '名称' from stocks end;
    Arr2:=select thisrow as '代码',stockname(thisrow) as '名称' from stocks end;

    //盘中取数
    while timeof(now())<T0 do
    begin
      for i:=0 to length(Arr1)-1 do
      begin
        setsysparam(pn_stock(),Arr1[i]['代码']);
        Arr1[i,'当前价']:=rd(6);
        Arr1[i,'5分钟涨幅(%)']:=rd(9);
        Arr1[i,'当前成交金额']:=rd(7);
      end
      sendrunningdata(Arr1,'盘口-股票');//窗口1

      for i:=0 to length(Arr2)-1 do
      begin
        setsysparam(pn_stock(),Arr2[i]['代码']);
        Arr2[i,'当前价']:=FloatN(rd(6),2);  //保留2位小数
        Arr2[i,'5分钟涨幅(%)']:=FloatN(rd(9),2);
        Arr2[i,'当前成交金额']:=FloatN(rd(7),2);
      end
      sendrunningdata(Arr2,'盘口-市场'); //窗口2
      sleep(5*1000);    //5秒刷一次
    end
    return '非交易时间段';

    窗口展示:
    窗口一:盘口-股票

    窗口二:盘口-市场 相对于上一个窗口有处理数据小数精度