因子表达式语法与因子字典
上一篇讲了"怎么筛",这篇讲清"怎么写条件":表达式的结构、运算符、单位的陷阱,以及一份可直接查的 85 因子字典——写作风格是"照抄就能跑"。
一、表达式只有一种结构
因子表达式就是一个 `intersect([...])` 调用,括号里是逗号分隔的条件列表,表示全部满足(AND 逻辑):
intersect([因子1 运算符 值, 因子2 运算符 值, ...])
# 例:PE 在 0~20、ROE 大于 15%、股息率大于 2%
intersect([PE_TTM > 0, PE_TTM < 20, ROETTM > 15, DividendRatioTTM > 2])- 只支持 `intersect`(交集/AND) —— 没有 `union` / `or`,多条件之间一律"且"
- 不支持 `between` / `in` / 括号嵌套 —— 用两个比较(`> 0` 且 `< 20`)表达区间
- 同一个因子可以出现多次(如上面的 `PE_TTM > 0` 和 `PE_TTM < 20`)—— 这是排除负 PE 的标准写法
二、6 种比较运算符(就这些)
| 运算符 | 含义 | 示例 |
|---|---|---|
| > | 大于 | PE_TTM > 0 |
| < | 小于 | PE_TTM < 20 |
| >= | 大于等于 | ROETTM >= 15 |
| <= | 小于等于 | TotalMV <= 5000000000 |
| = | 等于(少用) | — |
| != | 不等于(少用) | — |
可以带算式:词典实测支持 `因子A > 因子B * 系数` 这种形式,例如"收现比"模板 `GoodsSaleServiceRenderCash > OperatingRevenue * 0.9`。
三、单位规则(最容易出错的两条)
# OK:ROE 大于 15%、市值小于 50 亿、股息率大于 2%
intersect([ROETTM > 15, TotalMV < 5000000000, DividendRatioTTM > 2])
# WRONG:把百分数写成小数(会被当成 0.15%)
intersect([ROETTM > 0.15])- 百分数字段直接写数字:`ROETTM > 15` = "ROE 大于 15%"(不是 `0.15`);`DividendRatioTTM > 2` = 股息率大于 2%
- 金额单位是"元":`TotalMV`(总市值)单位是元,50 亿要写 `5000000000`;`NetOperateCashFlowTTM` 等也是元
- 比率/倍数单位是"倍":`PE_TTM` / `PB` / `PS_TTM` / `CurrentRatio` 直接写倍数
四、85 个已验证因子(分类速查)
下面按类别列出全部因子;「验证」列表示该字段已在实跑中确认可用。
4.1 估值(6)
| 因子 | 含义 | 单位 | 注意 |
|---|---|---|---|
| PE_TTM | 市盈率 TTM | 倍 | 筛选前先加 > 0(排除亏损) |
| PB | 市净率 | 倍 | 没有 PB_TTM,写 PB_TTM 会报错 |
| PS_TTM | 市销率 TTM | 倍 | 市值 / 营收 TTM |
| TotalMV | 总市值 | 元 | 市场唯一的市值因子 |
| DividendRatioTTM | 股息率 TTM | % | 直接写数字(> 3 表示 3%) |
| DividendTTM | 分红总额 TTM | 元 | 金额类,别和股息率混 |
4.2 盈利(部分最常用)
| 因子 | 含义 |
|---|---|
| ROETTM | 净资产收益率 TTM(最常用) |
| ROE | 净资产收益率(当期口径) |
| ROECut | 扣非 ROE(体检必备) |
| ROEWeighted | 加权净资产收益率 |
| ROIC | 投入资本回报率 |
| GrossIncomeRatioTTM | 毛利率 TTM |
| NetProfitRatioTTM | 净利率 TTM |
| NPParentCompanyOwners | 归母净利润(当期) |
| NPParentCompanyOwnersTTM | 归母净利润 TTM |
| OperatingRevenue | 营业总收入 |
| GrossProfitTTM | 毛利 TTM |
| NPDeductNonRecurringPL | 扣非归母净利润(体检必备) |
完整盈利类共 38 个,含各项费用、EBIT、每股指标、三年复合增速等。
4.3 成长(部分)
| 因子 | 含义 | 单位 |
|---|---|---|
| NPParentCompanyYOY | 归母净利同比 | % |
| OperatingRevenueGrowRate | 营收增速 | % |
| TotalAssetGrowRate | 总资产增速 | % |
| NPPCCGrowRate3Y | 归母净利 3 年复合增速 | % |
| ORComGrowRate3Y | 营收 3 年复合增速 | % |
| NetAssetGrowRate | 净资产增速 | % |
4.4 资产负债(部分)
| 因子 | 含义 | 单位 | 用途 |
|---|---|---|---|
| DebtAssetsRatio | 资产负债率 | % | 体检:> 70% 说明杠杆高 |
| DebtEquityRatio | 产权比率 | % | 体检:高杠杆放大 ROE |
| CurrentRatio | 流动比率 | 倍 | 短期偿债能力 |
| QuickRatio | 速动比率 | 倍 | 更严格的偿债指标 |
| TotalShareholderEquity | 股东权益合计 | 元 | 算 ROE 的分母 |
| InterestBearDebt | 有息负债 | 元 | 真实债务压力 |
| Goodwill | 商誉 | 元 | 减值风险 |
| BillAccReceivable | 应收票据及账款 | 元 | 暴雷高发区 |
| ARTDays | 应收账款周转天数 | 天 | > 180 说明回款慢 |
| Inventories | 存货 | 元 |
完整资产负债类共 32 个,含各类周转率、营运资本、合同负债等。
4.5 现金流(部分)
| 因子 | 含义 | 单位 |
|---|---|---|
| NetOperateCashFlowTTM | 经营现金流 TTM | 元 |
| NetOperateCashFlow | 经营现金流净额 | 元 |
| NetOperateCashFlowYOY | 经营现金流同比 | % |
| FCFF | 企业自由现金流 | 元 |
| FCFE | 股东自由现金流 | 元 |
| GoodsSaleServiceRenderCash | 销售商品收到的现金 | 元 |
完整现金流类共 14 个。
4.6 行情(2)
| 因子 | 含义 | 单位 |
|---|---|---|
| ClosePrice | 收盘价 | 元 |
| TurnoverRate | 换手率 | % |
五、14 个可直接复制的组合模板
以下模板来自项目内因子词典的实测记录(2026-08-31 验证),可直接改参数使用。
# 1) 低估值 + 高盈利 + 分红
intersect([PE_TTM > 0, PE_TTM < 20, ROETTM > 15, DividendRatioTTM > 2])
--limit 20 --orderby ROETTM --desc
# 2) 格雷厄姆式(保守)
intersect([PE_TTM > 0, PE_TTM < 15, PB < 1.5, DebtAssetsRatio < 50, CurrentRatio > 1.5])
--limit 20 --orderby PE_TTM --asc
# 3) 成长(双高)
intersect([PE_TTM > 0, PE_TTM < 25, NPParentCompanyYOY > 25,
OperatingRevenueGrowRate > 20, ROETTM > 12])
--limit 20 --orderby NPParentCompanyYOY- 现金流健康:`intersect([PE_TTM > 0, NetOperateCashFlowTTM > 0, ROETTM > 10, DebtAssetsRatio < 60])`
- 低负债稳健:`intersect([PE_TTM > 0, DebtAssetsRatio < 30, InterestBearDebt < 1000000000, ROETTM > 10])`
- 小盘价值:`intersect([PE_TTM > 0, PE_TTM < 25, TotalMV < 5000000000, ROETTM > 10])` + `--orderby TotalMV --asc`
- 白马(大盘质量):`intersect([PE_TTM > 0, TotalMV > 100000000000, ROETTM > 12, DividendRatioTTM > 2])`
- 破净修复:`intersect([PB > 0, PB < 1, ROETTM > 5, NetOperateCashFlowTTM > 0])` + `--orderby PB --asc`
- 高毛利:`intersect([PE_TTM > 0, GrossIncomeRatioTTM > 50, ROETTM > 15])`
- 应收风险排查(反向用):`intersect([BillAccReceivable > 0, ARTDays > 180, ROETTM < 5])`
组合原则:至少带一个"质量"因子(`ROETTM` 或 `NetOperateCashFlowTTM`),否则纯低估值容易筛出一堆"便宜的差公司"。
六、8 个必踩的坑(官方词典实测总结)
| # | 坑 | 说明 |
|---|---|---|
| 1 | PE_TTM 必须加 > 0 | 亏损公司 PE 为负,不加会当"低 PE"筛进来 |
| 2 | 大小写敏感 | A 股是 PE_TTM,港股是 PeTTM,写错直接报错 |
| 3 | PB 没有 TTM 版 | 写 PB_TTM 不可用 |
| 4 | 市值单位是"元" | TotalMV 50 亿要写 5000000000 |
| 5 | 市值只认 TotalMV | TotalMarketCap / MarketCap / MV 都不可用 |
| 6 | 股息率 = DividendRatioTTM | DividendTTM 是分红总额,DivTTM 是港股写法 |
| 7 | 百分数直接写数字 | ROETTM > 15 表示 15%,不要写 0.15 |
| 8 | 财报有滞后 | TTM 按最近披露的财报算,注意披露日 |
七、代码格式(前缀决定市场)
| 前缀 | 市场 | 示例 |
|---|---|---|
| sh | 上交所 | sh600519 |
| sz | 深交所(含创业板) | sz300750 |
| bj | 北交所 | bj430047 |
| hk | 港股 | hk00700 |
| us | 美股 | usAAPL |
配合 `--market` 参数可限定市场:`hs`(A股)/ `hk`(港股)/ `us`(美股)。
常见问题
不支持。表达式只有 intersect([...]),括号内全是 AND。需要"或"的效果时,分多次请求再合并结果。
用两个条件表达:intersect([PE_TTM > 10, PE_TTM < 20])。不支持 between 写法。
这个接口的百分数字段直接使用"百分数数值"。写 0.15 会被理解为 0.15%,结果几乎为空。
极端值可能来自口径(TTM 与当期差异、非经常性损益、高杠杆)。用 ROECut(扣非)、多口径 ROE、DebtEquityRatio 交叉验证——详见《因子选股入门》第 4、5 节。
最后更新: 2026-09-29
因子清单、8 个坑、14 个模板取自实测验证记录(85 因子,2026-08-31 实跑验证);表达式结构与方案对比 ashareapi /v1/screen 线上返回(2026-09-29)。