# 基础算法 / 策略选股

## `frameStocksFilter_GetGrouphead(stockpooltable, num, fname_groupby)`

声明：function

按原始排序每组最多选前N

<!-- tags: 查询 筛选 过滤 次序 证券 个股 股票筛选 量化选股 -->

| 参数             | 类型    | 说明                                                       |
| ---------------- | ------- | ---------------------------------------------------------- |
| `stockpooltable` | db_data | 数据表类型,选股池表, 必须含有【代码】 、fname_groupby 字段 |
| `num`            | integer | 整数,每组个数                                              |
| `fname_groupby`  | string  | 字符串,分类字段名,默认为"行业"                             |

返回：array

### 示例

范例01：调用示例

```tsl
//申万二级行业-每组最多选择前2 条
   r := TSUT_Data_SWCFDATA_DaySample();
   return frameStocksFilter_GetGrouphead(r,2,'行业');
```

## `frameStocksFilter_GetGrouptail(stockpooltable, num, fname_groupby)`

声明：function

按原始排序每组最多选后N

<!-- tags: 查询 筛选 过滤 次序 证券 个股 股票筛选 量化选股 -->

| 参数             | 类型    | 说明                                                       |
| ---------------- | ------- | ---------------------------------------------------------- |
| `stockpooltable` | db_data | 数据表类型,选样池表, 必须含有【代码】 、fname_groupby 字段 |
| `num`            | integer | 整数,每组个数                                              |
| `fname_groupby`  | string  | 字符串,分类字段名,默认为"行业"                             |

返回：array

### 示例

范例01：调用示例

```tsl
//申万二级行业-每组最多选择后2 条
   r := TSUT_Data_SWCFDATA_DaySample();
   return frameStocksFilter_GetGrouptail(r,2,'行业');
```

范例02：调用示例

```tsl
//收盘价从小到大排序 、申万二级行业-每组最多选择2 条





    r := TSUT_Data_SWCFDATA_DaySample();
   return frameStocksFilter_GetGroupSortHead(r,'收盘价',2,'行业');
```

范例03：调用示例

```tsl
//收盘价从大到小排序 、申万二级行业-每组最多选择2 条
   r := TSUT_Data_SWCFDATA_DaySample();
   return frameStocksFilter_GetGroupdescSortHead(r,'收盘价',2,'行业');
```

范例04：调用示例

```tsl
//按市值从大到小排，行业内权重占比累加值>=30 停止，权重标准化
r := TSUT_Data_SWCFDATA_DaySample();
   return frameStocksFilter_GetGroupQuotaSumWeight(r,'市值',30,'行业');
```

范例05：调用示例

```tsl
//总选10 个，按照市值从大到小排序，保证每个行业至少2 个,兼容优选
   r := TSUT_Data_SWCFDATA_DaySample();
   SortTableByField(r,'市值',0);
   r[40,'是否优选'] := 1;





   return frameStocksFilter_GetGroupQuotaMin(r,10,2,'行业');
```

范例06：调用示例

```tsl
//总选10 个，按照市值从大到小排序，保证每个行业最多2 个
   r := TSUT_Data_SWCFDATA_DaySample();
   SortTableByField(r,'市值',0);
   return frameStocksFilter_GetGroupQuotaMax(r,10,2,'行业');
```

范例07：调用示例

```tsl
//总选10 个，考虑行业中性
   r := TSUT_Data_SWCFDATA_DaySample();
   benchmarkWeights := array("申万普钢":0.6,"申万冶钢原料":0.20,"申万特钢Ⅱ":0.20);
   return frameStocksFilter_GetGroupMatchBenchmark(r,10,benchmarkWeights,'行
业','市值');
```

范例08：调用示例

```tsl
r := TSUT_Data_SWCFDATA_DaySample();
   SortTableByField(r,'市值',0);
   return frameStocksFilter_GetGroupMatchBenchmark_VG2(r,10,'行业');
```

## `frameStocksMark_GetGrouphead(stockpooltable, num, fname_groupby)`

声明：function

按原始排序在每个分组内最多标记前 N 条记录

<!-- tags: 查询 次序 聚合 打标 证券 个股 股票筛选 量化选股 -->

| 参数             | 类型    | 说明                                                       |
| ---------------- | ------- | ---------------------------------------------------------- |
| `stockpooltable` | db_data | 数据表类型,选股池表, 必须含有【代码】 、fname_groupby 字段 |
| `num`            | integer | 整数,每组个数                                              |
| `fname_groupby`  | string  | 字符串,分类字段名,默认为'行业'                             |

返回：array

### 示例

范例01：调用示例

```tsl
//申万二级行业-每组最多选择前2 条
   r := TSUT_Data_SWCFDATA_DaySample();
   SortTableByField(r,'市值',0);
   return frameStocksMark_GetGrouphead(r,2,'行业');
```

## `frameStocksMark_GetGrouptail(stockpooltable, num, fname_groupby)`

声明：function

按原始排序在每个分组内最多标记后 N 条记录

<!-- tags: 查询 次序 聚合 打标 证券 个股 股票筛选 量化选股 -->

| 参数             | 类型    | 说明                                                       |
| ---------------- | ------- | ---------------------------------------------------------- |
| `stockpooltable` | db_data | 数据表类型,选股池表, 必须含有【代码】 、fname_groupby 字段 |
| `num`            | integer | 整数,每组个数                                              |
| `fname_groupby`  | string  | 字符串,分类字段名,默认为'行业'                             |

返回：array

### 示例

范例01：调用示例

```tsl
//申万二级行业-每组最多选择后2 条
   r := TSUT_Data_SWCFDATA_DaySample();
   SortTableByField(r,'市值',0);
   return frameStocksMark_GetGrouptail(r,2,'行业');
```

范例02：调用示例

```tsl
r := TSUT_Data_SWCFDATA_DaySample();
   benchmarkWeights := array(" 申万普钢 ":0.6," 申 万 冶 钢 原 料":0.2,"申 万 特 钢
Ⅱ":0.20);
   return frameStocksWeightAdj_GroupNeutralEqual(r," 行业
",benchmarkWeights);
```

范例03：调用示例

```tsl
r := TSUT_Data_SWCFDATA_DaySample();
   benchmarkWeights := array("申万普钢":0.6,"申万冶钢原料":0.2,"申万特钢Ⅱ":0.20);
   return frameStocksWeightAdj_GroupNeutralFactorWeight(r," 行业 "," 市值
",benchmarkWeights);
```

## `stock_RiskScreenByEndT(stock_id, end_t, rule_arr, threshold)`

声明：function

规则排雷 01-个股

<!-- tags: 筛选 过滤 风险管理 风控 证券 股票筛选 量化选股 行业中性 -->

| 参数        | 类型  | 说明                                                                                                                                                                                                                                                                                                                                       |
| ----------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `stock_id`  | str   | 字符串，股票代码                                                                                                                                                                                                                                                                                                                           |
| `end_t`     | date  | 日期，截止日                                                                                                                                                                                                                                                                                                                               |
| `rule_arr`  | array | 规则列表， 当RuleArr取0 或 空时， 表示使用天软基础排雷指标， 见BasicRiskScreen_RuleCode； 若外部给定规则列表， 则为数据表类型： 字段 类型 含义 非空 说明 指标名称 String 指标名称 是 指标公式 String 指标公式 是 满足表达式 1，否则返回 0 指标比例(%) Real 综合指标计算比例 否 缺省时等权计算 算法说明 String 指标算法说明 否 指标算法说明 |
| `threshold` | real  | 实数，当综合指标> Threshold，则认为属于排雷池；否则为非排雷池                                                                                                                                                                                                                                                                              |

返回：array

### 示例

范例01：调用示例

```tsl
StockID := "SZ000002";
  EndT := 20260430T;
  RuleArr := array(); //天软基础表
  Threshold := 0.2;
  return Stock_RiskScreenByEndT(StockID,EndT,RuleArr,Threshold);
```

## `stocks_RiskScreenByEndT(stocks, end_t, rule_arr, threshold)`

声明：function

规则排雷 02-股票池

<!-- tags: 筛选 过滤 风险管理 风控 样本池 证券池 证券 个股 -->

| 参数        | 类型  | 说明                             |
| ----------- | ----- | -------------------------------- |
| `stocks`    | array | 一维数组，股票池 其他            |
| `end_t`     | date  | 查询区间的结束日期或当前计算日期 |
| `rule_arr`  | array | 风险筛选规则列表                 |
| `threshold` | real  | 风险筛选使用的数值阈值           |

返回：array

### 示例

范例01：调用示例

```tsl
Stocks := array("SZ000001","SZ000004");
  EndT := 20260430T;
  RuleArr := array(); //天软基础表
  Threshold := 0.2;
  return Stocks_RiskScreenByEndT(Stocks,EndT,RuleArr,Threshold);
```

## `index_RiskScreenByEndT(index_id, end_t, rule_arr, threshold)`

声明：function

规则排雷 03-指数

<!-- tags: 筛选 过滤 风险管理 风控 基准指数 指数产品 股票筛选 量化选股 -->

| 参数        | 类型  | 说明                             |
| ----------- | ----- | -------------------------------- |
| `index_id`  | str   | 字符串，指数代码 其他            |
| `end_t`     | date  | 查询区间的结束日期或当前计算日期 |
| `rule_arr`  | array | 风险筛选规则列表                 |
| `threshold` | real  | 风险筛选使用的数值阈值           |

返回：array

### 示例

范例01：调用示例

```tsl
Stocks := array("SZ000001","SZ000004");
  EndT := 20260430T;
  RuleArr := array(); //天软基础表
  Threshold := 0.2;
  return Stocks_RiskScreenByEndT(Stocks,EndT,RuleArr,Threshold);
```

## `stock_IfMandatoryDelist_Trade(delist_rule)`

声明：function

可能强制退市-交易类，根据交易所规则，判断股票是否可能强制退市， 与系统证券、 时间相关

<!-- tags: 检查 判定 验证 买卖 交易策略 个股 退市风险 风险警示 -->

| 参数          | 类型 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `delist_rule` | int  | 整数，退市规则 取值 含义 交易所规则说明 备注 0 成交量偏低 连续 120 个交易日累计成交量低于 500 万股 （双创 200 万股、北证 100 万股） 1 股价偏低 连续 20 个交易日收盘价均低于 1 元（北证连续 60 个交易日） 2 市值偏低 连续 20 个交易日收盘总市值均低于 5 亿元（双创 3 亿元、北证连续 60 个交易日均低于 3 亿元） 3 股东人数偏少 连续 20 个交易日股东人数均少于 2000 人（双创 400 人、北证连续 60 个交易日均少于 200 人） 天软股东人数为报告期数据， 实际使用 最新报告期代替连续 N 个交易日 |

返回：bool

### 示例

范例01：调用示例

```tsl
setsysparam(pn_stock(),"SZ000001");
setsysparam(pn_date(),20260430T);
DelistRule := 0;
return Stock_IfMandatoryDelist_Trade(DelistRule);  //0
```

## `stock_IfWarningDelist_Financial(delist_rule)`

声明：function

可能被*ST-财务类，根据交易所规则，判断是否有退市警示风险（*ST） ，与系统证券、时间相

<!-- tags: 检查 判定 验证 风险管理 风控 买卖 交易策略 个股 -->

| 参数          | 类型 | 说明                                                                                                                                                                                                                                          |
| ------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `delist_rule` | int  | 整数，退市警示规则 取值 含义 交易所规则说明 0 利润为负且营收偏低 最近 1 个会计年度的利润总额、 净利润、 扣非净利润孰低为负值， 且扣除后的营业收入 低于 3 亿元（双创 1 亿元、北证 5000 万元） 1 净资产为负 最近 1 个会计年度的期末净资产为负值 |

返回：bool

### 示例

范例01：调用示例

```tsl
setsysparam(pn_stock(),"SZ000004");
setsysparam(pn_date(),20260430T);
DelistRule := 0;
return Stock_IfWarningDelist_Financial(DelistRule);  //1
```

## `stock_IfWarningRisk_Financial(delist_rule)`

声明：function

可能被 ST-财务类，根据交易所规则，判断是否有其他风险警示（ST），与系统证券、 时间相关

<!-- tags: 检查 判定 验证 风险管理 风控 买卖 交易策略 个股 -->

| 参数          | 类型 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------- | ---- |   |
| `delist_rule` | int  | 整数，其他风险警示规则 取值 含义 交易所规则说明 备注 0 连续3 年亏损 最近三个会计年度扣除非经常性损益前后净利润孰 低者均为负值，且最近一个会计年度审计报告显示 公司持续经营能力存在不确定性； 模型未考虑审计结果 1 净资产为负 最近一个会计年度净利润为正值，且合并报表、母 公司报表年度末未分配利润均为正值的公司，其最 近三个会计年度累计现金分红金额低于最近三个会 计年度年均净利润的 30%，且最近三个会计年度累 计现金分红金额低于5000 万元； 双创：3000 万元，最近三个会计年度 累计研发投入占累计营业收入比例在 15%以上或最近三个会计年度累计研发 投入金额在3 亿元以上的除外 注：北交所没有其他风险警示，即无ST，只有*ST |

返回：bool

### 示例

范例01：调用示例

```tsl
setsysparam(pn_stock(),"SZ000004");
setsysparam(pn_date(),20260430T);
DelistRule := 0;
return Stock_IfWarningRisk_Financial(DelistRule);  //1
```
