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

Q:如何实现盘中监控    

【简述】盘中定时刷新行情数据的实现
  • 说明:SendRunningData、Sleep 的监控应用,与 while do 语句结合构成简单的监控程序应用,实现盘中监控的功能。其结构如下:

    while 条件 do
    Begin
    构造监控数据 Data;
    sendrunningdata(Data);//输出数据
    Sleep(1000*N); //暂停 N 秒
    End;

    应用案例:

    //实时返回选定股票的盘中信息   
    stocks:=array("SH600000","SH600004","SH600009","SH600010","SH600011","SH600015",
    "SH600016","SH600018","SH600019");
    T0:=strtotime('15:01:00'); //收盘时间点
        //盘前处理
    Arr:=select thisrow as '代码',stockname(thisrow) as '名称' from stocks end;
    while timeof(now())<T0 do
    begin//盘中取数
       for i:=0 to length(Arr)-1 do
        begin
           setsysparam(pn_stock(),Arr[i]['代码']);
           Arr[i,'当前价']:=rd(6);
           Arr[i,'5分钟涨幅(%)']:=rd(9);
           Arr[i,'当前成交金额']:=rd(7);
        end
        sendrunningdata(Arr); //返回数据
        sleep(5*1000);        //5秒刷一次
     end
     return '非交易时间段';
    弹出对话框:

       TCDStr:='需要预警时显示的内容,比如:
       AAA:1234
       BBB:2344';
       bstr:="MessageBox('"$TCDStr$"','预警信息',mb_YesNo().| mb_SystemModal());";
       SendToClient("do",bstr,'',nil,array(),10);
       return 1;
    //显示结果:

    盘中监控-预警方式-弹出对话框案例:

    Function DoYuJInInRD();
    Begin
       //实时返回选定股票的盘中信息
        stocks:=array("SH600000","SH600004","SH600009","SH600010","SH600011","SH600015","SH600016","SH600018","SH600019");
        T0:=strtotime('15:01:00'); //收盘时间点
        //盘前处理
        Arr:=select thisrow as '代码',stockname(thisrow) as '名称' from stocks end;
        while timeof(now())<T0 do
        begin
           for i:=0 to length(Arr)-1 do
           begin
              setsysparam(pn_stock(),Arr[i]['代码']);
              Arr[i,'当前价']:=rd(6);
              Arr[i,'5分钟涨幅(%)']:=RoundTo(rd(9),-3);
              Arr[i,'成交金额']:=rd(7);
           end
    //---预警实现
           // 5分钟涨幅(%)大于1的弹出预警消息
           t:=select ['代码'],['5分钟涨幅(%)'],['成交金额'] from Arr where ['5分钟涨幅(%)']>-0.5 end;
          //编辑显示串
           mst:=mcols(t,1);
           Tstr:='';
           for j:=0 to length(t)-1 do
           begin
               for i:=0 to length(mst)-1 do
                  Tstr:=Tstr+mst[i]+':'+tostn(t[j,mst[i]])+' ';
               Tstr+='\r\n';
           end
           if trim(Tstr)<>'' then//执行预警提示
              doMessgeBox(Tstr);
           sendrunningdata(Arr); //返回数据 -程序不结束
           sleep(5*1000);        //5秒刷一次
        end
        return '非交易时间段';
    End;
    function doMessgeBox(TCDStr);//弹出对话框
    begin
    //TCDStr为字符串
         bstr:="MessageBox('"$TCDStr$"','预警信息',mb_YesNo().| mb_SystemModal());";
         SendToClient("do",bstr,'',nil,array(),10);
    end
    //结果展示