FAQ > 金融建模 > 应用案例 > 图形实现

Q:盘中实时展示指标走势曲线图    

简述
本案例中,主要展示在盘中如何实时刷新走势图。
以股指基差曲线图为例,提供两个案例:
一是:实时刷新当日盘中分钟线的走势图
二是:实时展示包括历史高频指标的走势图
  • 实现1:盘中实时刷新股指期货基差曲线图
    要点说明:
    1、取数,组织数据结构包括'time'列与指标列,本例中为"基差"列
    2、画图(为了保证图形的时间序列不变,通过tsperiod获取今日的理论时间序列,在画图前进行合并补充还未有数据的时间点)
    3、盘中监控,可参考:FAQ:Q:如何实现盘中监控
    实现代码:
    begT:=today()+6/24;
    endt:=today()+16/24;
    cy:=cy_1m();
    stockid:="IF00";
    indexid:="SH000300";
    T0:=StrToTime('15:01:00');
    //-生成理论时间序列
    TArr:= select datetimetostr(thisrow) as gftime() from tsperiod(stockid,cy,today()) end;
     while TimeOf(Now()) < T0 do
     begin
      SetSysParam(PN_Stock(),stockid);
      SetSysParam(pn_cycle(),cy);
      setsysparam(pn_date(),endt);
      N:=tradedays(begT,endt);
      t:=Nday(N,gftime(),datetimetostr(sp_time()),"基差",spec(close(),stockid)-spec(close(),indexid));
      gt:=TArr|t; //并上今日理论时间序列
      g:=graph(gtline(),'基差走势',gt); //画图
      sendrunningdata(g,"基差走势图"); //窗口中输出图形|数据
      Sleep(0.5*1000); //半秒种刷新一次
     end
     return '非交易时段';

    盘中实时运行(上午10点33分)结果:


    实现2:升级版-添加历史走势一起展示
    说明:展示最近1个月内某股指基差的曲线图,若为分钟线,数据点较多,画出来的图形点数过于密集,为了美观,将分钟线变更为15分钟线进行展示。
    实现代码如下:
    //-变量
     cy:=cy_15m();
     stockid:='IF00';
     Indexid:='SH000300';
     ex:=@spec(close(),stockid)-spec(close(),Indexid);//表达式
     exName:="基差";
     begt:=incMonth(today(),-1)+16/24; //最近1个月
     endt:=today()+16/24;

    //--当前系统参数
     SetSysParam(PN_Stock(),stockid);
     SetSysParam(pn_cycle(),cy);
    //--历史数据提取
     //-历史时间区间-高频下应该精确到时分秒
     hbegt:=begt;
     hendt:=endt-1+16/24; //不包括今日
     setsysparam(pn_date(),hendt);
     N:=tradedays(hbegt,hendt);
     ht:=Nday(N,gftime(),datetimetostr(sp_time()),exName,eval(ex));
    //-今日盘中数据提取
     //-今日时间区间
     tbegT:=today();
     tendt:=endt;
     T0:=StrToTime('15:01:00');
     //-生成今日理论时间序列
     TArr:= select datetimetostr(thisrow) as gftime() from tsperiod(stockid,cy,today()) end;
     //--循环提取今日实时数据
      while TimeOf(Now()) < T0 do
      begin
       setsysparam(pn_date(),tendt);
       N:=tradedays(tbegT,tendt);
       t:=Nday(N,gftime(),datetimetostr(sp_time()),exName,eval(ex));
       gt:=TArr|t; //并上今日理论时间序列
       //并上历史数据
       gt:=ht union gt;
      // return gt;
       g:=graph(gtline(),'基差走势',gt);
       sendrunningdata(g,"基差走势图");
       Sleep(0.5*1000);
      end
      return '非交易时段';

    盘中实时运行(上午10点49分)结果: