Files
playbook/skills/tsl-api-reference/workflows/classification-codes.md
T

7.5 KiB
Raw Blame History

分类属性代码(行业与基金分类)

天软把「个券归属会随时间变更」的分类维护成分类属性,用一套属性代码 (如 SWHY210000)标识。分类目录本身和个券归属分别放在不同的字典表里, 取数入口也不同。本页收拢这类分类的代码体系与取数路径。

本页是手写整理页,不由字典生成器产出;references/data_dictionary/ 下的页面 是生成产物,不要把这里的内容写回那些页面。

目前维护的分类属性

资产 所属属性代码 分类名称 级数 备注
股票 SWHY 申万行业 三级
股票 CAPCHY 中上协行业 二级 2024-02-19 起接替证监会行业
股票 CSRCHY 证监会行业 二级 2024-02-19 起不再维护
基金 YHFL 银河基金分类 二级 数据起始 2021-01-04
基金 TSJJ02 投资风格 二级
基金 TSJJ03 净值增长率计算方法 二级

属性代码的构成是「所属属性代码 + 层级编号」,例如 SWHYSWHY210000(申万采掘, 一级)→ 其下二级、三级继续细分;CSRCHYCSRCHYA(农、林、牧、渔业)→ CSRCHYA01(农业)。

两类表:分类目录 vs 个券归属

分类目录(有哪些分类、上下级关系、启用与剔除日期)和个券归属(某只券在某段时间属于 哪个分类)是两张不同的表,访问代码不同:

表 ID 表名 访问代码 用途
138 股票.股票行业分类信息 属性代码,如 SWHYSWHY110000 股票分类目录
355 基金.基金分类信息 属性代码,如 YHFLYHFL010000 基金分类目录
356 基金.基金分类 基金代码,如 OF000316 单只基金的分类归属

138 与 355 的字段结构一致:属性代码属性名称级数上级属性代码上级属性名称入选日期剔除日期最新标识所属属性代码

传错访问代码是这里最常见的错误:把基金代码传给 355、或把属性代码传给 356,都不会报错, 只会返回空表。字段清单与取数示例见字典页,用 dictionary_lookup.py --query 股票行业分类信息 / --query 基金分类信息 取回。

取分类目录

按属性代码取某个分类节点及其记录:

// 申万行业分类目录(全部层级)
return select * from infotable 138 of "SWHY" end;

getbk(板块名) 可以一次取回某个分类下的全部属性代码,再喂给 infotable

// 申万行业的全部分类属性代码,按级数分组展示
codes := getbk("申万行业");
t := select * from infotable 138 of codes end;
return select ['级数'], select * from thisgroup end as '分类列表'
       from t group by ['级数'] order by ['级数'] end;

getbk("属性代码") 是跨资产的总入口,同时覆盖股票与基金两侧:

codes := getbk("属性代码");
t1 := select "股票" as '资产', * from infotable 138 of codes end;
t2 := select "基金" as '资产', * from infotable 355 of codes end;
return t1 union t2;

getbk 取的是最新成分,且入参是板块名称而非代码;签名与板块名约束见 lookup.py --name getbk

沿层级向下走

分类属性代码后缀 .N 表示「该属性下的所有下级分类属性代码」:

// 指定日所有申万一级行业代码
return getbkbydate("SWHY.N", 20210423T);

// 指定一级行业下的二级行业代码
return getbkbydate("SWHY210000" $ ".N", 20210423T);

三级同理,用二级代码加 .N。也有直接返回下级列表的函数,签名用 lookup.py --name stockIndustryLowerArr / --name fundYHIndustryArr 取回。

取分类成分

不带 .N 时,getBkByDate 把属性代码当分类节点,返回该分类在指定日的成分券:

return getbkbydate("SWHY740000", 20220101T);   // 申万煤炭成分股
return getbkbydate("CAPCHYD", 20240219T);      // 中上协:电力、热力、燃气及水
return getbkbydate("YHFL030000", 20220101T);   // 银河债券型成分基金
return getbkbydate("TSJJ0201", 20220101T);     // 投资风格:股票型

getBkByDate 的字典条目只描述了指数代码入参,分类属性代码入参同样成立;两种入参 共用一个函数。签名与 extype 参数见 lookup.py --name getBkByDate

行业分类代码 ≠ 行业指数代码

同一个申万行业有两套代码,用途不同,混用会取到空结果:

用途 代码形态 示例
行业分类属性代码 SWHY + 层级编号 SWHY210000 申万采掘
行业指数代码 SWHY00000NN 为级数) SWHY000001 申万一级行业指数

取行业指数代码序列走指数侧:

// 指定日所有申万一级行业指数代码
return getbkbydate("SWHY000001", 20190201T);

// 最新的行业指数序列也可按板块名取
return getbk("申万一级行业指数");

二级、三级分别对应 SWHY000002 / SWHY000003,板块名分别是 申万二级行业指数 / 申万三级行业指数。代码转名称用 lookup.py --name stockName

反查:个券在指定日属于哪个分类

申万各级有成对的名称/编码查询函数,与系统参数「证券」「日期」相关:

setSysParam(pn_stock(), "SZ000002");
setSysParam(pn_date(), 20200101T);
return array("一级名称": stockSWIndustryName1(),
             "一级编码": stockSWIndustryID1(),
             "二级名称": stockSWIndustryName2(),
             "二级编码": stockSWIndustryID2(),
             "三级名称": stockSWIndustryName3(),
             "三级编码": stockSWIndustryID3());

批量反查配合 spec(...) 逐券切换系统参数:

endt := 20240103T;
stocks := getbkbydate("SH000016", endt);
setSysParam(pn_date(), endt);
return select thisRow as "sid",
              spec(stockSWIndustryName1(), thisRow) as "一级行业名称",
              spec(stockSWIndustryID1(), thisRow) as "一级行业编码"
       from stocks end;

这六个函数无参数,签名逐个用 lookup.py --name stockSWIndustryName1 等确认。 按板块分类批量反查另有 stocksbklist,其 bktype 是整数板块类别,取值不在本页 事实范围内,用前先确认。

其它取数代码

少量非个券维度的数据也用代码位取:HG000001 宏观数据表格,HG000001HG000004 分别对应港股通(沪)、沪股通、港股通(深)、深股通方向。其余特别数据(如国债收益率 曲线)按字典页或专题文档确认,不在本页枚举。

事实边界

本页只给代码体系与取数路径。函数签名、参数类型、返回形态一律以 lookup.py --name 的条目正文为准,本页示例不作为签名依据。具体分类下有哪些属性代码 会随上游调整,不在本页硬编码;用上面的 getbk + infotable 组合在运行时取回当前列表。