Files
playbook/skills/tsl-api-reference/references/codegen/module/strategy-selection-tools.md
T
2026-08-14 17:15:41 +08:00

360 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 基础算法 / 策略选股
## `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
```