"""财务因子批 P0 表达式库: 32 个因子注册(category="fundamental"). 选型来源 docs/fundamental_factor_survey_20260907.md(§3 候选池 96 个 + §4.1 去重), 首批 32 = P0 50 个按族去重后的主代表;全部「因子 = cs_rank(基础指标)」一层截面, 负 IC 因子表达式取负(统一高=好,与量价批 IC 口径一致;原始方向见下表)。 基础指标列由 fundamental_adapter.build_fundamental_features 产出并 join 到 alpha_df;估值族市值 = close × share_capital 自算(三表股本,规避 valuation 中文列名表,PIT 口径与报表一致)。 P0 32 因子名单(编号=调研文档 §3): A 盈利能力(7): A01 ROE / A02 扣非ROE / A04 ROA / A05 GP/A(族主代表) / A06 毛利率 / A07 净利率 / A13 CFO/TA B 盈利质量(7): B01 TACC(Sloan,族核心) / B04 非经常占比 / B05 减值冲击 / B07 投资收益依赖 / B08 应收异常 / B10 销售收现率 / B11 其他应收占比 C 成长(6): C01 营收单季同比 / C02 净利单季同比 / C09 增速剪刀差 / C10 ΔGM(副代表) / C12 ΔROE / C15 资产增速(投资-融资群代表) D 估值(4): D01 EP_TTM / D03 扣非EP(A股特色) / D04 BP / D06 CP(CNE5 CETOP) E 资本结构/行为(4): E01 NSI 净股票发行 / E02 股权融资强度 / E05 有息负债率 / E09 商誉占比 F 预期事件(4): F01 SUE(净利,Foster) / F02 SUE(营收) / F04 预告类型分 / F05 预告幅度 同族被裁变体(A03/A08/A09/A10/A12/B02/B06/C03/C04/C05/C06/D02/D05/E04 等) 在 P1 或互证后再议,见文档 §4。 """ from .registry import register_factor, _REGISTRY # (name, expression, 文档编号, 原始 IC 方向) FUNDAMENTAL_FACTORS: list[tuple[str, str, str, str]] = [ # ---- A 盈利能力(7) ---- ("fund_roe_ttm", "cs_rank(roe_ttm)", "A01", "+"), ("fund_roe_deduct_ttm", "cs_rank(roe_deduct_ttm)", "A02", "+"), ("fund_roa_ttm", "cs_rank(roa_ttm)", "A04", "+"), ("fund_gp_over_assets", "cs_rank(gp_over_assets)", "A05", "+"), ("fund_gross_margin", "cs_rank(gross_margin)", "A06", "+"), ("fund_net_margin", "cs_rank(net_margin)", "A07", "+"), ("fund_cfo_over_assets", "cs_rank(cfo_over_assets)", "A13", "+"), # ---- B 盈利质量(7) ---- ("fund_tacc", "cs_rank(-tacc)", "B01", "-"), ("fund_nonrec_ratio", "cs_rank(-nonrec_ratio)", "B04", "-"), ("fund_impairment_ratio", "cs_rank(-impairment_ratio)", "B05", "-"), ("fund_invest_income_dep", "cs_rank(-invest_income_dep)", "B07", "-"), ("fund_receivables_anomaly", "cs_rank(-receivables_anomaly)", "B08", "-"), ("fund_sales_cash_ratio", "cs_rank(sales_cash_ratio)", "B10", "+"), ("fund_other_rece_ratio", "cs_rank(-other_rece_ratio)", "B11", "-"), # ---- C 成长(6) ---- ("fund_rev_q_yoy", "cs_rank(rev_q_yoy)", "C01", "+"), ("fund_np_q_yoy", "cs_rank(np_q_yoy)", "C02", "+"), ("fund_growth_scissors", "cs_rank(growth_scissors)", "C09", "+"), ("fund_gm_delta", "cs_rank(gm_delta)", "C10", "+"), ("fund_roe_delta", "cs_rank(roe_delta)", "C12", "+"), ("fund_asset_growth", "cs_rank(-asset_growth)", "C15", "-"), # ---- D 估值(4) ---- ("fund_ep_ttm", "cs_rank(np_ttm / (close * share_capital))", "D01", "+"), ("fund_ep_deduct_ttm", "cs_rank(dnp_ttm / (close * share_capital))", "D03", "+"), ("fund_bp", "cs_rank(equity / (close * share_capital))", "D04", "+"), ("fund_cp", "cs_rank(cfo_ttm / (close * share_capital))", "D06", "+"), # ---- E 资本结构/行为(4) ---- ("fund_nsi", "cs_rank(-nsi)", "E01", "-"), ("fund_equity_fin_intensity", "cs_rank(-(acc_invest_cash_ttm / (close * share_capital)))", "E02", "-"), ("fund_ibd_ratio", "cs_rank(-ibd_ratio)", "E05", "-"), ("fund_goodwill_ratio", "cs_rank(-goodwill_ratio)", "E09", "-"), # ---- F 预期事件(4) ---- ("fund_sue_np", "cs_rank(sue_np)", "F01", "+"), ("fund_sue_rev", "cs_rank(sue_rev)", "F02", "+"), ("fund_forecast_type", "cs_rank(forecast_type_score)", "F04", "+"), ("fund_forecast_change", "cs_rank(forecast_change_pct)", "F05", "+"), ] def _register_all() -> None: """注册全部财务因子(已存在同名跳过,幂等;同 library.py 模式).""" for name, expression, _doc_id, _ic in FUNDAMENTAL_FACTORS: if name not in _REGISTRY: register_factor(name, expression, category="fundamental") # 模块导入时自动注册(与 library.py/alpha_datasets.py 同一模式) _register_all()