FAQ > 金融建模 > 应用案例 > 指标或功能实现

Q:如何汇总概念板块每日成交数据    

  • A:汇总概念板块每日成交数据,可参考StockGNbkDailySummary模型,需导入后使用。
    天软概念板块说明:FAQ:Q:天软是否有概念板块?
    实现范例
      //获取20230613概念板块成交汇总,以‘平均涨跌幅(%)’字段降序返回
      return StockGNbkDailySummary(20230613t,"平均涨跌幅(%)",0);

    部分结果


    实现模型
    附件:StockGNbkDailySummary.fun
    Function StockGNbkDailySummary(endt,sortfield,sortdir);
    Begin
    {**
     %% @explain(说明)每日按概念板块统计板块内的相关指标及成交情况
       包括:公司家数:指定日板块成分股个数
         平均价格:指定日成分股收盘价的平均数
         平均涨跌额:指定日成分股涨跌额的平均数
         平均涨跌幅(%):指定日成分股涨跌幅的平均数
         总手:指定日成分股成交手数之和,成交手数=成交量/100,不满一手的按一手统计
         总成交金额:指定日成分股成交金额之和
         领涨股:指定日涨幅最大的成分股
         当前价:指定日领涨股的收盘价
         涨跌额:指定日领涨股的涨跌额
         涨跌幅(%):指定日领涨股的涨跌幅(%)
       参考:https://q.stock.sohu.com/cn/bk.shtml

     %% @param(endt)(DateT) 指定日
     %% @param(sortfield)(string) 排序字段
     %% @param(sortdir)(bool) 排序方向,0:降序,1:升序
     %% @return(array) 概念板块每日成交数据汇总
    **}
      ov:=BackupSystemParameters2();
      if not endt then endt:=today();
      if not sortfield then sortfield:="平均涨跌幅(%)";
      SetSysParam(pn_stock(),endt);
      indexs:= GetGNBKByDate(endt);
      rt:=array();
      for i,index in indexs do
      begin
        stocks:=GetBKByDate(index,endt);
        data:=select thisrow as "代码",
               StockNameEndT(thisrow,endt) as "名称",
               spec(close(),thisrow) as "当前价",
               spec(ceil(vol()/100),thisrow) as "手",
               spec(amount(),thisrow) as "成交金额",
               spec(StockPriceZd3(),thisrow) as "涨跌额",
               spec(stockzf3(),thisrow) as "涨跌幅(%)"
           from stocks end;
           
        rs:=select StockName(index) as "板块",
              countof(["名称"]) as "公司家数",
              avgof(["当前价"]) as "平均价格",
              avgof(["涨跌额"]) as "平均涨跌额",
              avgof(["涨跌幅(%)"]) as "平均涨跌幅(%)",
              sumof(["手"]) as "总手",
              sumof(["成交金额"]) as "总成交金额"
          from data end;

        hzf:=MaxValue(data[:,"涨跌幅(%)"]);
        rs|=select drange(0 to 0) ["名称"] as "领涨股",["当前价"],["涨跌额"],["涨跌幅(%)"]
          from data where ["涨跌幅(%)"]=hzf end;
        
        rt&=rs;
      end
      SortTableByField(rt,sortfield,sortdir);
      rt:=select thisrowindex+1 as "排行",* from rt end;
      return rt;
    End;

    Function GetGNBKByDate(endt);
    Begin
    {
      指定日所有在市的概念指数
    }
      indexs:=getbk("概念板块") union2 sselect thisrow from getbk("退市其它") where thisrow like '^GN' end;
      info:= select 0 to 1,
             minof(["入选日期"],["入选日期"]) as "上市日",
             countof(not ["剔除日期"])?inf:maxof(["剔除日期"]) as "退市日"
          from infotable 752 of indexs group by ["StockID"] end;
      endt:=datetoint(endt);
      result:= sselect ["StockID"] from info where endt>=["上市日"] and endt<=["退市日"] end;
      return result;
    End;