FAQ > 金融建模 > 建模问题 > 行业与板块 > Q: 天软中申万行业的数据处理与使用

Q: 指定日申万行业代码与申万行业指数代码的相互转换    

简述
可通过股票.内部代码与证券代码对照表相互查询
  • 内部代码对照表(136):
    申万行业代码与申万行业指数代码是一一对应的关系,其关系可通过天软的股票.内部代码对照表进行查询,可直接通过天软的接口:StockIndustryIndexID
    具体数据说明:FAQ:内部代码与证券代码对照表
    StockIndustryIndexID
    定义: StockIndustryIndexID(IndustryId:VarChar,EndT:DateT)
    说明: 获取指定代码内部对应的证券代码
    参数:
     IndustryId: VarChar 代码
    endt: DateT 截止日期

    通过StockIndustryIndexID相互转换:
    申万行业代码得到对应的申万行业指数代码
    例:
    return StockIndustryIndexID("SWHY230000",20210426T);//SW801040

     
    申万行业指数代码得到对应的申万行业代码
    例:
    return StockIndustryIndexID("SW801041",20210426T);//SWHY230100


    常见应用:
    应用一:获取科创板股票的申万行业指数
    由于目前为止,科创板还未被纳入申万行业指数中,所以要获取科创板对应的申万行业指数,只能通过申万行业分类的方式,然后再转换成申万行业指数,(实际不属于申万行业指数成份)
    A:获取股票申万行业代码->股票申万行业指数->申万行业指数名称
    参考:FAQ:Q: 如何查询个股在指定日所属申万行业分类代码及名称
    例:获取科创板股票在20210805的申万一级行业指数代码及名称

      endt:=20210805t;
      stocks:=GetAbkbyDate("科创板",endt);
      setsysparam(PN_Date(),endt);
      rt:=array();
      for i,v in stocks do
      begin
       stock:=v;//stocks[i];
       hyid:=spec(StockSWIndustryID1(),stock);
       if ifString(hyid) and hyid<>'' then
       begin
         zsid:=StockIndustryIndexID(hyid,endt);
         zsname:=spec(base(750000),zsid);
       end
       else begin
        zsid:='';
        zsname:='';
       end; 
       rt[i,"代码"]:=stock;
       rt[i,"名称"]:=stockname(stock);
       rt[i,"申万一级行业指数代码"]:=zsid;
       rt[i,"申万一级行业指数名称"]:=zsname;
      end
      return rt;

    部分结果:



    应用二:获取指定日所有A股所对应的申万一级行业指数,即便不是该行业指数成份股
    由于,像科创板、新股,即将退市等这种股票没有被纳入行业指数内,直接提取获取不到对应的行业指数。
    在实际应用中,可能需要知道个股对应的行业的一些收益情况作为参照,所以,本应用中实现对个股提取其对应申万行业指数代码。
    即:1、有行业指数的,直接取;
    2、无行业指数,取行业编码后再转行业指数;
    3、若连行业编码也没有的,返回空字符串。(一般刚上市的股票可能存在这个问题)。
    实现代码:

    endt:=today();
      stocks:=GetAbkbyDate('A股',endt);
      setsysparam(PN_Date(),endt);
      rt:=array();
      for i,v in stocks do
      begin
       stock:=v;//stocks[i];
       setsysparam(pn_stock(),stock);
       zsid:=StockSWIndustryIdLv1();//行业指数代码
       if not ifString(zsid) or zsid='' then //行业指数不存在时:行业编码转行业指数
       begin
         hyid:=StockSWIndustryID1();
         if ifstring(hyid) and hyid<>'' then
          zsid:=StockIndustryIndexID(hyid,endt);
         else zsid:='';
       end
       rt[i,"代码"]:=stock;
       rt[i,"名称"]:=stockname(stock);
       rt[i,"申万一级行业指数代码"]:=zsid;
      end
      return rt;