# 风险模型 / 风险矩阵

## `tsrm_RiskMatrix`

声明：class

风险矩阵计算框架

<!-- tags: 风险管理 风控 风险估计 协方差矩阵 风险模型 -->

### `FFactorRet`

声明：field

因子收益率(%)

可见性：`public`

类型：array

### `FSpecificRet`

声明：field

特异性收益率(%)

可见性：`public`

类型：array

### `FConstName`

声明：field

国家因子名称 国家因子

可见性：`public`

类型：string

### `FIndustry`

声明：field

行业因子名称

可见性：`public`

类型：array

### `FStyle`

声明：field

风格因子名称

可见性：`public`

类型：array

### `FEvalStockValue`

声明：field

计算股票市值的字符串表达式

可见性：`public`

类型：string

### `FEvalIndustry`

声明：field

获取行业名称的字符串表达式

可见性：`public`

类型：string

### `FEvalStyle`

声明：field

获取风格因子值的字符串表达式

可见性：`public`

类型：string

### `Ffr_Cov_Half`

声明：field

计算因子收益率协方差的加权半衰期 504

可见性：`public`

类型：integer

### `Ffr_Cov_Lag`

声明：field

因子收益率协方差 newey-west 调整的滞后期 2

可见性：`public`

类型：integer

### `Ffr_IF_Eigen`

声明：field

是否进行 eigenfactor 调整 False

可见性：`public`

类型：bool

### `Fsr_Half`

声明：field

计算特质收益率方差的加权半衰期 84

可见性：`public`

类型：integer

### `Fsr_NW_Lag`

声明：field

特质收益率方差的 newey-west 调整的滞后期 5

可见性：`public`

类型：integer

### `Fsr_IF_Struct`

声明：field

是否进行结构化调整 True

可见性：`public`

类型：bool

### `Fsr_SH_q`

声明：field

特质收益率方差的贝叶斯收缩的经验系数 q 1

可见性：`public`

类型：real

### `Ffr_Data_Len`

声明：field

计算因子收益率协方差矩阵时需要的数据长度 252

可见性：`public`

类型：integer

### `Fsr_Data_Len`

声明：field

计算特质收益率方差的数据长度 252

可见性：`public`

类型：integer

### `FIfGrid`

声明：field

是否启用网格 True

可见性：`public`

类型：bool

### `FIfLimitGridN`

声明：field

是否限制网格个数 True

可见性：`public`

类型：bool

### `FGridN`

声明：field

网格数 3

可见性：`public`

类型：integer

### `FfrCov`

声明：field

因子收益率协方差矩阵，含调整过程

可见性：`public`

类型：array

### `FFinalFRCov`

声明：field

最终的因子收益率协方差矩阵

可见性：`public`

类型：array

### `Main(begt, endt, index_id)`

声明：function

一般来说，用户直接调用该函数就可以计算因子收益率协方差矩阵和特质收益率方差

<!-- tags: 执行 回报率 投资收益 因子分析 因子指标 -->

可见性：`public`

| 参数       | 类型     | 说明                                                       |
| ---------- | -------- | ---------------------------------------------------------- |
| `begt`     | datetime | 开始日，日期类型，获取因子收益率和特质收益率的开始日期     |
| `endt`     | datetime | 截止日，日期类型，获取因子收益率和特质收益率的截止日期     |
| `index_id` | string   | 指数代码，字符串，获取对应指数成分的因子收益率和特质收益率 |

### `CalFRCov()`

声明：function

计算每一期因子收益率的协方差和各种调整后的协方差

<!-- tags: 回报率 投资收益 因子分析 因子指标 协方差矩阵 -->

可见性：`public`

### `CalSRVar()`

声明：function

计算每一期股票特质收益率的方差

<!-- tags: 回报率 投资收益 证券 个股 -->

可见性：`public`

### `GetStockValue(endt, stockarr)`

声明：function

计算股票列表在截止日的流通市值

<!-- tags: 查询 证券 个股 -->

可见性：`public`

| 参数       | 类型     | 说明               |
| ---------- | -------- | ------------------ |
| `endt`     | datetime | 截止日，日期类型   |
| `stockarr` | array    | 一维数组，股票列表 |

### `GetFRSR(begt, endt, index_id)`

声明：function

获取因子收益率和股票特质收益率数据，根据所给参数， 使用内置算法计算因子收益率和特

<!-- tags: 查询 回报率 投资收益 因子分析 因子指标 证券 个股 -->

可见性：`public`

| 参数       | 类型     | 说明                                                       |
| ---------- | -------- | ---------------------------------------------------------- |
| `begt`     | datetime | 开始日，日期类型，获取因子收益率和特质收益率的开始日期     |
| `endt`     | datetime | 截止日，日期类型，获取因子收益率和特质收益率的截止日期     |
| `index_id` | string   | 指数代码，字符串，获取对应指数成分的因子收益率和特质收益率 |

### `NeweyWest1(data, q, tao, ifvar, cov_var)`

声明：function

协方差矩阵或方差的 NeweyWest 调整

<!-- tags: 调整 NeweyWest 协方差矩阵 -->

可见性：`public`

| 参数      | 类型    | 说明                                                                     |
| --------- | ------- | ------------------------------------------------------------------------ |
| `data`    | array   | 二维表，需要计算协方差矩阵的原始数据，列数代表变量个数，行数代表样本长度 |
| `q`       | integer | Integer， Newey West 调整的最大滞后期数                                  |
| `tao`     | integer | Integer，协方差的指数加权的半衰期                                        |
| `ifvar`   | boolean | Bool，是否方差调整，真表示做方差调整，假表示做协方差调整                 |
| `cov_var` | array   | 二维表，Newey West 调整前的协方差矩阵                                    |

### `NeweyWest2(data, q, tao, vol_q, vol_tao, ifvar, cov_var)`

声明：function

协方差矩阵或方差的 NeweyWest 调整，与 NeweyWest1 的差别主要是：

<!-- tags: 调整 NeweyWest 协方差矩阵 -->

可见性：`public`

| 参数      | 类型    | 说明                                                                     |
| --------- | ------- | ------------------------------------------------------------------------ |
| `data`    | array   | 二维表，需要计算协方差矩阵的原始数据，列数代表变量个数，行数代表样本长度 |
| `q`       | integer | Integer，相关系数的 Newey West 调整的最大滞后期数                        |
| `tao`     | integer | Integer， 相关系数的指数加权的半衰期                                     |
| `vol_q`   | integer | 方差的 Newey West 调整的最大滞后期数                                     |
| `vol_tao` | integer | 方差的指数加权的半衰期                                                   |
| `ifvar`   | boolean | Bool，是否方差调整，真表示做方差调整，假表示做协方差调整                 |
| `cov_var` | array   | 二维表，Newey West 调整前的协方差矩阵                                    |

### `EigenFactor(cov, t, m_times, a, rand_data)`

声明：function

因子收益率协方差矩阵的 eigenfactor 调整

<!-- tags: 回报率 投资收益 因子分析 因子指标 -->

可见性：`public`

| 参数        | 类型    | 说明                                                                                                                                     |
| ----------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `cov`       | array   | 因子收益率协方差矩阵                                                                                                                     |
| `t`         | integer | Integer，模拟产生的数据长度                                                                                                              |
| `m_times`   | integer | Integer，模拟次数                                                                                                                        |
| `a`         | real    | Real，放缩经验系数                                                                                                                       |
| `rand_data` | array   | Array，模拟随机数据，用于测试算法的正确性，因为无法指定随机数生成的一致性， 只能通过传递确定的数据当作随机数据计算，用户不需要使用该参数 |

### `VolR_B(f, sigma, weights)`

声明：function

计算波动率状态调整所需的 Bias 数据

<!-- tags: 风险波动 风险估计 -->

可见性：`public`

| 参数      | 类型  | 说明                     |
| --------- | ----- | ------------------------ |
| `f`       | array | 一维数组，当期收益率     |
| `sigma`   | array | 一维数组，期初预测标准差 |
| `weights` | array | 一维数组，权重           |

### `Volatility_Regime(cov_var, b, tao)`

声明：function

对协方差矩阵或方差执行波动率状态调整

<!-- tags: 调整 波动率状态 协方差矩阵 -->

可见性：`public`

| 参数      | 类型    | 说明                      |
| --------- | ------- | ------------------------- |
| `cov_var` | array   | 二维表，协方差矩阵        |
| `b`       | array   | 一维数组，Bias 统计量序列 |
| `tao`     | integer | Integer，半衰期           |

### `StructureAdjustment(var, ret, factor, e_0, industry, styles)`

声明：function

股票特质收益率方差的结构化调整

<!-- tags: 回报率 投资收益 证券 个股 -->

可见性：`public`

| 参数       | 类型  | 说明                             |
| ---------- | ----- | -------------------------------- |
| `var`      | array | 股票特质收益率方差向量或方差矩阵 |
| `ret`      | array | 二维数组，股票特质收益率         |
| `factor`   | array | 二维数组，因子值                 |
| `e_0`      | real  | Real，调整系数                   |
| `industry` | array | 一维数组，行业名称               |
| `styles`   | array | 一维数组，风格因子名称           |

### `Bayesian_Shrinkage(var, capital, n_group, q)`

声明：function

股票特质收益率方差的贝叶斯收缩调整

<!-- tags: 回报率 投资收益 证券 个股 -->

可见性：`public`

| 参数      | 类型    | 说明                       |
| --------- | ------- | -------------------------- |
| `var`     | array   | 股票特质收益率方差估计结果 |
| `capital` | array   | 一维数组，市值             |
| `n_group` | integer | Integer，分组数            |
| `q`       | real    | Real，经验系数             |

### `Tsrm_StockSWIndustryNameLv1()`

声明：function

使用 mf_industry 接口获取行业名称

<!-- tags: 查询 证券 个股 行业分类 板块 -->

可见性：`public`

### `Tsrm_StockSWIndustryIDLv1()`

声明：function

利用 TSRM_StockSWIndustryNameLv1 获取新申万一级行业分类标准下的行业名称，返回对应

<!-- tags: 查询 证券 个股 板块 -->

可见性：`public`

#### 示例

范例01：调用示例

```tsl
BegT := 20210104T;
EndT := 20210106T;
IndexID := "SH000300";
mfm := new tsrm_RiskMatrix();
mfm.Ffr_IF_Eigen := false;   //不进行特征值调整
mfm.Fsr_IF_Struct := false;  //不进行结构化调整
mfm.Main(BegT,EndT,IndexID);
return
array('因子协方差矩阵':mfm.FFinalFRCov,'特质收益方差':mfm.FFinalFSRVar);
```

范例02：利用样例数据计算风险矩阵 （运行时间大概是 3 到 5 分钟）

```tsl
FactorRet := TSRM_Sample_Data(1);  //获取因子收益样例数据
SpecificRet := TSRM_Sample_Data(2);   //获取特质收益样例数据

mfm := new tsrm_RiskMatrix();
mfm.FFactorRet := FactorRet;
mfm.FSpecificRet := SpecificRet;
mfm.Ffr_IF_Eigen := false;   //不进行特征值调整
mfm.Fsr_IF_Struct := false;  //不进行结构化调整
mfm.Main();
return
array('因子协方差矩阵':mfm.FFinalFRCov,'特质收益率方差':mfm.FFinalFSRVar);
```
