FAQ > 金融建模 > 建模问题 > 指数相关

Q:如何获取指数行业权重数据?    

  • A:实现步骤如下:
    1.先获取指数的成份股权重数据;
    2.在获取所有成分股的所属申万行业数据;
    3.最后对数据按行业进行分组求个股权重比例之和即可。
    实现示例
    范例一:获取指数指定日行业权重数据
      //获取SH000300在20260731日的行业权重数据
      index:="SH000300";
      endt:=20260731T;
      setsysparam(pn_date(),endt);
      GetBkWeightByDate(index,endt,t); //获取成分股权重数据
      //获取成份股所属行业
      t:=select *,spec(StockSWIndustryName1(),["代码"]) as "行业" from t end;
      strt:=datetostr(endt);
      name:=StockName(index);
      r:=select index as "指数代码",name as "指数名称",
           strt as "日期",["行业"],
           sumof(["比例(%)"]) as "比例(%)"
        from t group by ["行业"] end;
      SortTableByField(r,"比例(%)",0);
      return r;
    部分结果:

    范例二:获取指数区间每日的行业权重数据
      //获取SH000300在20260701-20260730区间每日的行业权重数据
      begt:=20260701t;
      endt:=20260731t;
      index:="SH000300";
      dayarr:=MarketTradeDayQk(begt,endt);
      r:=array();
      for i,day in dayarr do
      begin
        setsysparam(pn_date(),day);
        ret:=GetBkWeightByDate(index,day,t); //获取指定日成分股权重数据
        if not ret then continue;
        //获取成份股所属行业
        t:=select *,spec(StockSWIndustryName1(),["代码"]) as "行业" from t end;
        strt:=datetostr(day);
        name:=StockName(index);
        t:=select index as "指数代码",name as "指数名称",
             strt as "日期",["行业"],
             sumof(["比例(%)"]) as "比例(%)"
          from t group by ["行业"] end;
        SortTableByField(t,"比例(%)",0);
        r&=t;
      end
      return r;
    部分结果: