FAQ > 金融建模 > 建模问题 > 行业与板块

Q:如何提取申万行业涨幅    

  • A:在天软中,提取申万行业涨幅可以通过申万行业指数来获取,该类行业指数有行情数据,取涨幅同股票方式。
    涨幅模型:FAQ:Q:涨跌幅(收益率)模型说明汇总
    本文分别从获取行业涨幅、个股所属行业涨幅、股票列表行业涨幅、全市场个股行业涨幅等常用维度展示提取实现逻辑,用户可根据需求进行参考套用。
    下面示例中 ,都以申万一级行业为例,其它有行业指数且该类指数有行情的适用。


    范例01:取申万农林牧渔行业在2026-06-30日的涨幅
    setsysparam(pn_stock(),"SW801010");
    setsysparam(pn_date(),20260630T);
    return stockzf3();

    返回:-1.32

    范例02:获取指定日所有行业的涨跌幅
    实现逻辑:
    1、获取指定日所有申万一级行业指数代码,相关参考:FAQ:Q:如何获取所有的申万一级/二级/三级行业指数代码列表?
    2、循环计算各指数在指定日的涨幅
       begt:=20260601T;
       endt:=20260630T;
       N:=5;
       Indexs:=getbkbydate('SWHY000001',endt); //所有行业指数
       setsysparam(pn_date(),endt);
       return select thisrow as "指数代码" ,stockname(thisrow) as "名称",
          spec(stockzf3(),thisrow) as "涨幅(%)",
          spec(stockzf(begt,endt),thisrow) as "区间涨幅(%)",
          spec(stockzf2(N),thisrow) as "N日涨幅(%)"
          from Indexs end;

    返回:


    范例03:获取指定个股所属行业涨跌幅
    实现逻辑:
    1、获取个股所属行业指数代码,相关参考:FAQ:Q:个股在指定日所属的申万一级行业指数代码以及名称的相关模型介绍
    2、通过行业指数代码计算行业涨跌幅
    setsysparam(pn_stock(),"SH601869");
    setsysparam(pn_date(),20260630T);
    hyIndex:=StockSWIndustryIDLv1_II();//一级行业指数
    return spec(stockzf3(),hyIndex);//行业涨幅

    返回:4.89

    范例04:获取指定证券列表的个股所属行业涨跌幅
    begt:=20260601T;
    endt:=20260630T;
    stocks:=array("SH601869","SH600519","SZ002371","SH600176","SZ300394");
    ret:=array();
    setsysparam(pn_date(),endt);
    for i,stockid in stocks do
    begin
      setsysparam(pn_stock(),stockid);
      hyIndex:=StockSWIndustryIDLv1_II();//一级行业指数
      ret[i,"StockID"]:=stockid;
      ret[i,"stockName"]:=stockname(stockid);
      ret[i,"行业指数代码"]:=hyIndex;
      ret[i,"行业名称"]:=StockSWIndustryNameLv1_II();
      ret[i,"个股当日涨幅(%)"]:=stockzf3();
      ret[i,"个股区间涨幅(%)"]:=stockzf(begt,endt);//N日涨幅可以用stockzf2(N)
      ret[i,"行业当日涨幅(%)"]:=spec(stockzf3(),hyIndex);//证券指定为行业
      ret[i,"行业区间涨幅(%)"]:=spec(stockzf(begt,endt),hyIndex);//证券指定为行业
    end
    return ret;

    返回:


    范例05:获取指定日全市场股票的个股所属行业涨跌幅
    实现逻辑:虽然上面范例04中也可以实现,但是行业与个股是一对多的关系,会存重复计算的效率问题,因此本示例主要展示从行业出发,再去映射到个股上,减少计算次数,提高效率
    1、获取所有行业的涨幅数据
    2、获取全市场股票,根据个股所属行业填充该行业对应的涨幅数据
    begt:=20260601T;
    endt:=20260630T;
    //第一步:取所有行业数据
    Indexs:=getbkbydate('SWHY000001',endt); //所有行业指数
    hyZF:=array(); //存放行业数据--哈希表结构
    setsysparam(pn_date(),endt);
    for i,Indexid in Indexs do
    begin
      setsysparam(pn_stock(),Indexid);
      hyZF[Indexid,"行业名称"]:=stockName(Indexid);//StockNameEndT(Indexid,endt);
      hyZF[Indexid,"行业当日涨幅(%)"]:=stockzf3();
      hyZF[Indexid,"行业区间涨幅(%)"]:=stockzf(begt,endt); //N日涨幅可以用stockzf2(N)
    end
    //第二步:取市场个股数据
    stocks:=getAbkbydate("A股",endt); //指定日A股
    ret:=array();
    setsysparam(pn_date(),endt);
    for i,stockid in stocks do
    begin
      setsysparam(pn_stock(),stockid);
      hyIndex:=StockSWIndustryIDLv1_II();//一级行业指数
      ret[i,"StockID"]:=stockid;
      ret[i,"stockName"]:=stockname(stockid);
      ret[i,"个股当日涨幅(%)"]:=stockzf3();
      ret[i,"个股区间涨幅(%)"]:=stockzf(begt,endt);
      ret[i,"行业指数代码"]:=hyIndex;
      //填充对应行业的数据
      ret[i,array("行业名称","行业今日涨幅(%)","行业区间涨幅(%)")]:=hyZF[hyIndex];
    end
    return ret;