# 金融 / 金融工程 / 因子研究 / 因子计算 / 因子分组

## `mf_group_crossGroup(data, f_name, g_name, g_num, score)`

声明：function

返回中性化-交叉分层分组（分层中性化） 注意：结果跟中性化因子的顺序有关

<!-- tags: 金融 金融工程 因子研究 因子计算 因子分组 查找 搜索 lookup 返回 获取 -->

| 参数     | 类型    | 说明                                                            |
| -------- | ------- | --------------------------------------------------------------- |
| `data`   | db_data | 数据表类型,因子数据                                             |
| `f_name` | string  | 字符串, 目前只支持单个因子值字段名                              |
| `g_name` | array   | 一维字符串数组,待中性因子值的字段名，可以为多个字段名组成的数组 |
| `g_num`  | integer | 整数,控制每一层的分组数                                         |
| `score`  | db_data | 数据表类型,中性得分                                             |

返回：table

### 示例

范例01：调用 MF_Group_CrossGroup

```tsl
Data := MF_Demo_Data_YS_02();
GName := array('市值', '账面市值比');
Gnum := 5;
FName := '收盘价';
return MF_Group_CrossGroup(Data, FName, GName, GNum, srore);
```

## `mf_group_doubleSort(data, x_name, xq_bins, y_name, yq_bins, type)`

声明：function

返回double sort 分组，源于fm三因子

<!-- tags: 金融 金融工程 因子研究 因子计算 因子分组 排序 sort 查找 搜索 lookup 返回 获取 -->

| 参数      | 类型        | 说明                |
| --------- | ----------- | ------------------- |
| `data`    | db_data     | 数据表类型,因子数据 |
| `x_name`  | string      | 字符串,X因子字段名  |
| `xq_bins` | integer     | 整数,分组数或间隔   |
| `y_name`  | string      | 字符串,Y因子字段名  |
| `yq_bins` | integer     | 整数,分组间隔       |
| `type`    | user_define | 用户自定义, 默认为0 |

返回：table

### 示例

范例01：分组 double sort

```tsl
Data := MF_Demo_Data_YS_02();
XName := '市值';
XQbins := 2; // 等分两组
YName := '账面市值比';
YQbins := array(0, 0.3, 0.7, 1); // 百分位间隔
// 分组 double sort
t := MF_Group_DoubleSort(Data, XName, XQBins, YName, YQBins, 1);
// 命名分组
t[:, 'XG'] := array('S', 'B')[t[:, 'X分组']];
t[:, 'YG'] := array('L', 'M', 'H')[t[:, 'Y分组']];
// 各组详情
r := select ['XG'], ['YG'], select * from thisgroup end as '详情'
from t group by ['XG'], ['YG'] end;
return pivot(r, 'XG', 'YG', '详情');
```

## `mf_wtGroup_crossGroupByHY(data, f_name, g_name, g_num, benchmark_weights, stkwtype, if_normalize)`

声明：function

返回A、权重分组 按因子值(fname)从大到小按累计权重 - 比例(%) 分组，最大的为第1组 B、支持按行业（GName）分层

<!-- tags: 金融 金融工程 因子研究 因子计算 因子分组 查找 搜索 lookup 返回 获取 -->

| 参数                | 类型              | 说明                                                         |
| ------------------- | ----------------- | ------------------------------------------------------------ |
| `data`              | db_data           | 数据表类型,因子数据，包含字段:代码、行业、行业名称、比例(%)  |
| `f_name`            | string            | 字符串,因子名称，排序用，为nil表示不排序                     |
| `g_name`            | string            | 字符串,分组用字段名，为nil表示所有数据为一组                 |
| `g_num`             | edited_expression | 表达式, 整数类型表示每层分组数；数组类型表示每层分组权重阈值 |
| `benchmark_weights` | db_data           | 数据表类型, 行业基准比例，包含字段:行业名称、行业比例(%)     |
| `stkwtype`          | user_define       | 用户自定义, 行业内股票权重分配方式                           |
| `if_normalize`      | bool              | 真假,行业间是否归一化，默认否                                |

返回：array

### 示例

范例01：分行业 按累计市值分组

```tsl
// 分行业 按累计市值分组
Data := array(
    ("代码":"SZ002602", "截止日":43889.0, "因子值":2.15, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-8.18),
    ("代码":"SH600637", "截止日":43889.0, "因子值":1.36, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-13.88),
    ("代码":"SZ300413", "截止日":43889.0, "因子值":0.8, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-1.09),
    ("代码":"SZ002558", "截止日":43889.0, "因子值":0.29, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-12.53),
    ("代码":"SZ002555", "截止日":43889.0, "因子值":-0.87, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-3.54));
FName := "因子值";
GName := "行业名称";
GNum := array((0, 50), (50, 100));
BenchmarkWeights := array();
stkwtype := 1;
ifNormalize := 1;
return MF_WtGroup_CrossGroupByHY(Data, FName, GName, GNum, BenchmarkWeights, stkwtype, ifNormalize);
```

范例02：全部按 累计市值分组

```tsl
// 全部按 累计市值分组
Data := array(
    ("代码":"SZ002602", "截止日":43889.0, "因子值":2.15, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-8.18),
    ("代码":"SH600637", "截止日":43889.0, "因子值":1.36, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-13.88),
    ("代码":"SZ300413", "截止日":43889.0, "因子值":0.8, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-1.09),
    ("代码":"SZ002558", "截止日":43889.0, "因子值":0.29, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-12.53),
    ("代码":"SZ002555", "截止日":43889.0, "因子值":-0.87, "行业":"SW801760", "行业名称":"申万传媒", "下期收益":-3.54));
FName := "因子值";
GName := nil;
GNum := array((0, 50), (50, 100));
BenchmarkWeights := array();
stkwtype := 1;
return MF_WtGroup_CrossGroupByHY(Data, FName, GName, GNum, BenchmarkWeights, stkwtype);
```
