dsa 基本面因子/评分/信号 全量挖掘报告(2026-09-07)
调研对象:/Users/chufeng/.openclaw/sanguo_projects/daily_stock_analysis/(git @ 972c3146)
方法:系统性过 strategies 全部 YAML、src/ 全树 grep(factor/score/fundamental/financial/roe/pe/pb/margin/yoy/growth/revenue/profit/earnings/dividend)、data_provider/ 全部 provider、因子/评分引擎、主 agent 流程。每条结论带 file:line,读码不猜。
已知背景(不重复):data_provider/fundamental_adapter.py AkshareFundamentalAdapter 与 strategies/growth_quality.yaml 之前查过,本报告收录并补齐其余所有层。
0. 一句话总结论(回答用户问题)
dsa 的基本面因子:有,但呈「浅量化、深定性」结构。
- 量化截面层(真因子):只有估值 + 市值两类——
value 因子(PE/PB 双截面秩)、size 因子(log 市值秩),加一圈 PE/PB/市值硬过滤、PE 无效惩罚、PB 过高风险罚点、value×stability 复合加分。成长/盈利质量(ROE/毛利率/双 YoY/现金流)从未进入量化截面评分。
- 定性层:ROE、营收/净利 YoY、毛利率、经营现金流、TTM 分红、业绩预告等 ~15 个基本面字段全部走「单票 fail-open 快照 → LLM prompt 表格 → LLM 定性打分」路径,无截面化、无回测、无 IC。
- 总量:截面可回测真因子 2 个(value/size)+ 边界/罚点配置族 4 处 + 规则复合加分 1 处;LLM 定性基本面框架 3 个(growth_quality/expectation_repricing/event_driven)+ 估值带宽策略配置 4 个(dual_low/blue_chip_income/quality_value/low_volatility_quality);单票基本面字段 bundle ~15 字段(3 个市场 adapter);公告/业绩事件关键词规则 2 组词表。
- 对我们的净新增价值:不在 PE/PB 因子本身(我们 101/158 批已有估值+市值),而在 ① TTM 分红事件级精算口径 ② 业绩预告/快报事件词表与截面化潜力 ③ 「同一因子按策略风格参数化不同带宽」的组织方式。
1. dsa 架构总览(基本面数据流向)
dsa 里存在两套策略体系、一条主分析流程,基本面在三者中角色完全不同:
关键事实:体系A(量化)与体系B(LLM定性)通过 analysis_skills 字段桥接——如 momentum_quality.yaml:10 声明 analysis_skills: [bull_trend, growth_quality],即量化筛出的候选交给 growth_quality 这个 LLM 框架做基本面定性复核(src/services/screening/strategy.py:243,306 解析)。
2. 完整清单:基本面因子/信号总表
2.1 层A:量化截面因子引擎(src/services/screening/,AlphaSift 衍生)
A1. value 估值因子 ★真因子
| 项 |
内容 |
| 位置 |
src/services/screening/scorer.py:191-204(_compute_value_score) |
| 输入 |
pe_ratio、pb_ratio 列,来自全市场实时快照(snapshot.py:46-47 标准列;各源列名映射 snapshot.py:684-790,如 akshare_em 的「动态市盈率/市净率」snapshot.py:701-702;tushare 源直接取 pe,pb,total_mv,circ_mv snapshot.py:604) |
| 逻辑 |
score=50;若有 PE:rank(0<PE<500, 越低越好, na=25) → score = score×0.35 + pe_rank×0.65;再若有 PB:rank(0<PB<50, 越低越好, na=25) → score = score×0.55 + pb_rank×0.45,clip(0,100)。秩归一化用 pct rank ×100(scorer.py:490-505 _rank_score) |
| 输出 |
factor_value_score(0-100,截面百分位秩,scorer.py:11) |
| 使用 |
加权进 screen_score(scorer.py:102-108),权重按策略 YAML 配置:dual_low 0.34 / quality_value 0.32 / blue_chip_income 0.30 / balanced_alpha 0.22 / low_volatility_quality 0.20 / momentum_quality 0.15 / capital_heat 0(src/services/screening/strategies/*.yaml) |
A2. size 市值因子 ★真因子
| 项 |
内容 |
| 位置 |
scorer.py:376-384(_compute_size_score) |
| 输入 |
total_mv(快照实时总市值) |
| 逻辑 |
log10(total_mv) 截面秩(市值越大分越高,lower_is_better=False),clip(0,100) |
| 输出 |
factor_size_score(scorer.py:17) |
| 使用 |
权重 0.02~0.12(blue_chip_income 0.12 最高;大市值倾斜) |
A3. stability 因子内的 PE 无效惩罚
| 项 |
内容 |
| 位置 |
scorer.py:336-338 |
| 逻辑 |
PE<=0(亏损股)→ stability 扣 stability_invalid_pe_penalty(默认 18 分,scorer.py:60) |
| 输出 |
并入 factor_stability_score |
| 性质 |
半因子:亏损惩罚,等效于 E>0 过滤的软化版 |
A4. PE/PB/市值硬过滤(10 个量化策略的估值带宽配置族)
| 项 |
内容 |
| 配置定义 |
src/services/screening/models.py:19-22(pe_ttm_min/max, pb_min/max, market_cap_min/max) |
| 实现位置 |
src/services/screening/filter.py:66-71(沪深)与 filter.py:146-151,246-251(边界记录) |
| 典型带宽 |
dual_low pe 0-15 / pb 0-2 / 市值 50-3000亿(dual_low.yaml:23-29);blue_chip_income pe 0-22 / pb 0-3.2 / 市值≥300亿(blue_chip_income.yaml:23-30);quality_value pe 0-25 / pb 0-4(quality_value.yaml:23-29);balanced_alpha pe 0-80 / pb 0-8(balanced_alpha.yaml);低波质量 pe 0-45 / pb 0-5;momentum_quality pe 0-60 / pb 0-8 |
| 性质 |
不是因子,是同一估值维度按风格参数化的硬边界——思想可借鉴 |
A5. 风险覆盖层的 PE/PB 罚点
| 项 |
内容 |
| 位置 |
src/services/screening/risk.py:19-21(默认 invalid_pe_points=3.0, high_pb=8.0, high_pb_points=2.0);应用在 risk.py:164-169 |
| 逻辑 |
PE<=0 → +3 风险点(flag negative_or_invalid_pe);PB>=8 → +2 点(flag high_pb);风险点→bounded penalty 扣 final_score(risk.py:66-78) |
| 输出 |
risk_flags 标签 + final_score 扣减 |
A6. scorecard 复合加分(value×stability 交互项)
| 项 |
内容 |
| 位置 |
src/services/screening/post_analysis.py:32-55(profile 默认值)、post_analysis.py:306-308(规则) |
| 逻辑 |
value≥75 且 stability≥65 → final_score +2.4(tag value_quality);各策略 YAML 覆盖阈值(如 blue_chip_income value_quality_value_min: 74.0, value_quality_bonus: 2.5) |
| 性质 |
估值×稳定性交互项,规则加分,可作为因子交互设计参考 |
A7. L2 LLM 重排混合(估值字段进 prompt)
| 项 |
内容 |
| 位置 |
src/services/screening/ranker.py:196-197:final_score = screen_score×(1-0.40) + llm_score×0.40;候选行渲染带 total_mv/PE/PB/factor_scores/dsa_context(ranker.py:382-403) |
| 性质 |
LLM 见到 PE/PB 做语义归因,40% 权重混入最终分——不可回测部分 |
A8. L3 DSA overlay(LLM 深分析分数词表化)
| 项 |
内容 |
| 位置 |
src/services/screening/dsa.py:248-265(_compute_dsa_overlay_score)、词表 dsa.py:18-34 |
| 逻辑 |
(signal_score-50)×0.20 + (sentiment_score-50)×0.12 + 操作建议词表(强烈买入+10…卖出-12) + 趋势词表(看多+4…看空-6) - min(风险数×2, 6) |
| 性质 |
LLM 输出的规则化映射,非基本面因子 |
层A小结:9 因子中 momentum/reversal/activity/stability/liquidity/theme_heat/topic_alignment(scorer.py:142-150)均为量价/热度类(输入 change_pct/change_60d/volume_ratio/turnover_rate/signal_score/macd/rsi/波动/回撤/ATR/板块热度,见 scorer.py:218-311,387-466),基本面相关的只有 A1-A6。
2.2 层B:单票基本面数据 bundle(fail-open,喂 LLM 的原料)
B1. AkshareFundamentalAdapter(A 股)——已知背景,收录行号
| 块 |
字段 |
位置 |
数据源 |
| growth |
revenue_yoy / net_profit_yoy / roe / gross_margin(关键词抓取最新一期) |
data_provider/fundamental_adapter.py:315-330 |
stock_financial_abstract / stock_financial_analysis_indicator(fundamental_adapter.py:306-310) |
| earnings.financial_report |
report_date / revenue / net_profit_parent / operating_cash_flow / roe |
fundamental_adapter.py:331-339 |
同上 |
| earnings.forecast_summary |
业绩预告文字(截 200 字) |
fundamental_adapter.py:343-356 |
stock_yjyg_em / stock_yjbb_em |
| earnings.quick_report_summary |
业绩快报文字 |
fundamental_adapter.py:359-370 |
stock_yjkb_em |
| earnings.dividend |
事件级 TTM 精算:按除息/登记/公告日过滤+未来事件剔除+(日期,金额)去重 → events[:5] / ttm_event_count / ttm_cash_dividend_per_share(税前现金口径) |
fundamental_adapter.py:168-237(_build_dividend_payload) |
stock_fhps_detail_em / stock_history_dividend_detail / stock_dividend_cninfo(fundamental_adapter.py:373-377);每股金额从「10派X元」中文方案文本解析(fundamental_adapter.py:107-142) |
| institution |
institution_holding_change(机构增减原始值)/ top10_holder_change |
fundamental_adapter.py:386-410 |
stock_institute_hold/recommend、stock_gdfx_top_10_em、stock_zh_a_gdhs_detail_em |
| capital_flow |
main_net_inflow / inflow_5d / inflow_10d + 板块资金排名 |
fundamental_adapter.py:416-473 |
东财资金流 |
| dragon_tiger |
龙虎榜 flag(20 日窗口) |
fundamental_adapter.py:473+ |
— |
B2. TTM 股息率派生(A 股路径)★口径精华
| 项 |
内容 |
| 位置 |
data_provider/base.py:4349-4380 |
| 逻辑 |
ttm_dividend_yield_pct = round(ttm_cash_dividend_per_share / latest_price × 100, 4),价格复用已拉的实时 quote 不额外请求;失败记 invalid_price_for_ttm_dividend_yield;落 yield_formula 字段自证口径 |
| 对齐 |
港美股同口径:yfinance_fundamental_adapter.py:316-354(分子分母同币种,info.dividendYield 仅末位兜底且按 percent 直通);futu_fundamental_adapter.py:169-199(TTM 事件截断 + 实时价) |
B3. YfinanceFundamentalAdapter(港/美股)
| 项 |
内容 |
| 位置 |
data_provider/yfinance_fundamental_adapter.py:146-374 |
| growth 4 点 |
revenueGrowth/earningsGrowth/returnOnEquity/grossMargins(info 比率 ×100 转百分比,yfinance_fundamental_adapter.py:187-195);若季报有 ≥5 期则改用同比真值(`(latest-prev_year)/ |
| financial_report |
季报营收/归母净利/经营现金流 + 币种分离(financialCurrency 报表币种 vs currency 交易币种,yfinance_fundamental_adapter.py:183-184) |
| belong_boards |
info.sector + info.industry 映射成行业/概念板块(yfinance_fundamental_adapter.py:356-366) |
B4. FutuFundamentalAdapter(港,OpenD 配置时优先)
| 项 |
内容 |
| 位置 |
data_provider/futu_fundamental_adapter.py:76-136(_financials) |
| 逻辑 |
拉-income/balance_sheet/cash_flow/indicators 四表各 8 期;growth 三点 revenue_yoy/net_profit_yoy(取 futu 自带 yoy)+ gross_margin=毛利/营收×100(自算,futu_fundamental_adapter.py:104-112);full report 含基本 EPS |
| 兜底合并 |
futu 部分失败时 yfinance 字段级补洞(base.py:3669-3760,_field_gaps 检查 growth 三字段+报表四字段+分红契约) |
B5. valuation 块(三市场统一)
| 项 |
内容 |
| 位置 |
data_provider/base.py:3919-3924(离岸);A 股同构 |
| 逻辑 |
pe_ratio/pb_ratio/total_mv/circ_mv 直接取实时行情快照字段——注意这是「动态市盈率」快照,非按报告期计算的 PE_TTM |
B6. TW 三大法人(台股筹码,institution 块)
| 项 |
内容 |
| 位置 |
data_provider/tw_institutional_fetcher.py:103-171(get_institutional_net);TWSE T86 三大法人买卖超日报,foreign=外陆资(不含外资自营商) 口径对齐官方合计(tw_institutional_fetcher.py:48-59) |
| 注入 |
analyzer.py:4241-4252 渲染成「三大法人动向(台股筹码过滤器)」表格 |
2.3 层C:主分析流程中基本面的最终用法(analyzer.py)
| # |
环节 |
位置 |
形态 |
| C1 |
PE/PB/市值进实时行情表 |
src/analyzer.py:4108-4120 |
LLM prompt 表格 |
| C2 |
财报与分红表(价值投资口径):营收/归母净利/经营现金流/ROE/TTM 每股分红/TTM 股息率/TTM 事件数 |
src/analyzer.py:4122-4165 |
LLM prompt 表格;缺数据时强制写「数据缺失,无法判断」禁编造(analyzer.py:4164) |
| C3 |
主力资金流向表(操作建议过滤器):主力净流入/5 日/10 日/板块排名 |
src/analyzer.py:4167-4218 |
LLM prompt + 硬规则(见 C6) |
| C4 |
LLM 输出字段:fundamental_analysis(文字)、earnings_outlook(业绩预期文字,analyzer.py:1974)、signal_attribution.fundamentals(基本面贡献度 0-100,LLM 自报,analyzer.py:2010-2017)、checklist 检查项「PE估值合理」(analyzer.py:1996) |
— |
文字/自报分数 |
| C5 |
sentiment_score 评分标准由 LLM 按策略技能加减(见层D) |
— |
LLM 打分 |
| C6 |
决策稳定器 decision_stability(硬规则后处理) |
src/analyzer.py:1040-1175(bias 计算 analyzer.py:1279-1318) |
规则:资金流三值(主力/5日/10日)全同向才给 inflow/outflow,否则 neutral(analyzer.py:1309-1318);再与价格位置矩阵组合——近压力+非流入→禁止追高;流出+未突破→降级;近支撑+非流出+无重大风险→持有观察(analyzer.py:1093-1171)。这是全 dsa 唯一的基本面类硬规则信号(资金流维度) |
2.4 层D:LLM 技能策略 YAML(strategies/,16 个全部过完)
基本面实质涉及的 3 个(其余 13 个纯技术/量价/情绪——bull_trend/ma_golden_cross/shrink_pullback/volume_breakout(仅一句 PE 提示 volume_breakout.yaml:41)/box_oscillation/chan_theory/wave_theory/one_yang_three_yin/bottom_volume(仅「基本面催化」确认项)/dragon_head(仅业绩催化列举)/emotion_cycle(仅机构持仓一项特征)/hot_theme/capital_heat 不涉财务计算):
| 策略 |
基本面逻辑 |
评分规则(LLM sentiment_score 调整建议) |
位置 |
| growth_quality 成长质量 |
①成长性:营收/归母净利/经营现金流/ROE 四字段,查增收不增利 ②质量:ROE 高且稳 + 现金流与利润同向 ③估值承受力:PE/PB/市值 vs 增长覆盖 |
四同向改善 +15;行业景气与新闻互证 +6;高估值成长未验证 -8;增收不增利或现金流恶化 -12 |
strategies/growth_quality.yaml:27-39,50-54 |
| expectation_repricing 预期重估 |
预期差方向判定 + 估值重估是否有基本面支撑(PE/PB/市值/ROE/现金流) |
正向预期差未兑现 +15;已兑现 -5;负向/证伪 -15 |
strategies/expectation_repricing.yaml:35-38,44-51 |
| event_driven 事件驱动 |
事件五分类(业绩/政策/订单产品/资本运作/监管风险)+ 影响路径(收入/利润率/估值/融资/份额/情绪)+ 兑现程度 |
高可信未反映 +14;利好兑现 -6;负面发酵 -15 |
strategies/event_driven.yaml:29-43 |
性质:全部是自然语言指令,依赖 B 层数据 + LLM 判断,输出文字+分数建议,不可回测、不可截面。
2.5 层E:候选事件关键词规则(src/services/screening/candidate_context.py)
| # |
词表 |
关键词 |
位置 |
用法 |
| E1 |
正面事件 |
回购增持/订单经营/业绩改善(预增/扭亏/增长/净利润增长)/股东回报/激励 |
candidate_context.py:25-31 |
classify_context_events(candidate_context.py:307-317)打 event_tags |
| E2 |
负面事件 |
减持/监管/业绩压力(预亏/亏损/业绩下滑/业绩减少/净利润下降)/财务风险(债务/逾期/违约/商誉减值/资产减值)/退市风险/诉讼风险 |
candidate_context.py:17-24 |
同上 + negative_event_flags |
| E3 |
公告类别 |
业绩/回购增持/减持/监管问询/重大合同/分红融资/诉讼担保/股权激励 |
candidate_context.py:32-41 |
classify_announcement_categories(candidate_context.py:331-343) |
| E4 |
来源置信 |
source_confidence/source_weight_score(announcement 1.0 > quote 0.85 > fund_flow 0.75 > news 0.65) |
candidate_context.py:42-47,456-477 |
标注上下文可信度 |
用途:tags 注入 L2 排序 prompt 上下文(pipeline.py:354-390 采集;ranker.py 消费),不直接进分数——但词表本身是现成的「公告事件分类器」。
2.6 元层:LLM 技能观点绩效权重(非基本面,记录备查)
src/services/skill_opinion_weight_service.py:48-197:按可归因的技能观点结局算贝叶斯后验命中率 → direction_score = 2×hit_rate - 1 → 运行时权重因子;src/agent/skills/aggregator.py:65-100 加权聚合多技能观点。src/services/screening/models.py:241-284 有 PickEvaluation/EvaluationResult dataclass(选股结果回评模型),评估实现未在 src/api 中接线(仅 tests)。
3. 性质判定:真因子 vs 定性框架
3.1 可截面化可回测的真因子(可借鉴进因子池)
| 判定 |
名称 |
理由 |
| ✅ 真因子(简单) |
A1 value = PE 秩×PB 秩混合 |
全市场快照、截面 pct-rank、0-100、日频可复算。等价于我们已有的 EP/BP rank——逻辑无新增,实现可参考(na 给 25 分而非剔除的软处理、0<PE<500 值域过滤) |
| ✅ 真因子(简单) |
A2 size = log 市值秩 |
标准市值因子,与我们 Size 因子同构 |
| ⚠️ 半因子 |
A3 PE≤0 亏损惩罚 / A5 invalid PE + high PB 罚点 |
本质是 E>0 过滤 + BP 极值惩罚的软化实现,我们已有更干净的 EP/BP 处理 |
| ⚠️ 半因子 |
A6 value×stability 交互加分 |
「低估值×低波动」交互项思想可测(我们因子池有估值和低波,可造交互因子验证增量) |
| ✅ 数据工程真价值 |
B2 TTM 分红事件级精算 |
除息/登记/公告日三级取日 + 未来事件剔除 + (日期,金额)去重 + 中文「10派X」解析 + 分子分母同币种 + yield_formula 自证——这是分红因子的正确口径,直接可抄进我们的数据层 |
| ✅ 数据工程真价值 |
E1-E3 业绩预告/快报/财务风险词表 |
预增/扭亏/预亏/商誉减值/债务违约 等词表是现成的公告分类标签集,配合我们 NAS corpus(ann_meta/ann_pdf 43万公告)可截面化成事件因子 |
| ✅ 可借鉴思路 |
A4 估值带宽参数化 |
同一 PE/PB 维度按策略风格给不同硬边界(防御 0-15 vs 动量 0-80)——对我们 Selector/Overlay 层的「风格化阈值」设计有直接参考价值 |
| ✅ 可借鉴思路 |
C6 资金流×价格位置决策稳定器 |
三窗资金流同向确认 + 支撑/压力位置矩阵的规则组合,可作为 Overlay 层规则参考(数据源我们有 margin/hotrank 墙) |
3.2 单票定性框架(只可借鉴思路,不可直接搬)
| 判定 |
名称 |
理由 |
| ❌ 定性 |
B1 growth 4 点(revenue_yoy/net_profit_yoy/roe/gross_margin) |
关键词抓「最新一行」,无报告期对齐、无 point-in-time——直接截面化会引入前视(用了未按披露日过滤的最新报表)与滞后(慢报公司拖尾)双坑。我们已有 _latest_published_annual 点时修复(fundamentals-lookahead-bias-fix),用我们自己的管线做,别搬它的取数 |
| ❌ 定性 |
D 层 growth_quality 四框架 / expectation_repricing / event_driven |
LLM prompt 指令,输出不可复现不可回测;其中「增收不增利」「现金流<利润→应收回款风险」是可量化的好假设,应转成我们自己的因子假设 |
| ❌ 定性 |
C4 signal_attribution.fundamentals / LLM sentiment_score |
LLM 自报贡献度,无监督信号 |
| ❌ 不可搬 |
A7/A8 LLM 重排混合 + DSA overlay |
final_score 40% 来自 LLM 主观分——回测无法复现 |
| ❌ 不适用 |
B6 TW 三大法人 |
台股专属,A 股无对应口径(A 股等价物=北向/两融,已在我们的 margin/hotrank 数据里) |
4. 并入我们因子批的建议(按优先级)
| 优先 |
建议并入 |
改造方式 |
理由 |
| P1 |
TTM 股息率因子(dividend_yield_ttm) |
数据口径照抄 fundamental_adapter.py:168-237 + base.py:4349-4380(事件级去重/税前现金/除息日截断/同币种),数据源换成我们的巨潮公告(ann_meta 已有分红公告)或东财 stock_fhps_detail_em;截面化 = 每日全市场 TTM 股息率 → rank。防前视:除息日 ≤ T 当日才计入事件 |
我们 101/158 因子批目前无分红类因子(族分析 12 独立源里无);红利风格在 A 股长期有效且与量价族相关性低,是天然的独立源;口径工程 dsa 已趟过坑(中文方案解析/去重/币种) |
| P1 |
业绩预告事件因子(forecast_surprise 品类) |
词表起点用 candidate_context.py:20,28(预增/扭亏/预亏/亏损/净利润增长/下降);数据源用东财 stock_yjyg_em(全市场表,含预告类型+变动幅度)或我们 corpus 的 ann_meta 标题分类;截面化 = 预告类型哑变量(预增+1/扭亏+1.5/预亏-1)+ 变动幅度数值化,披露日对齐防前视 |
业绩预告是 A 股最强事件源之一(预告→正式报表之间有 1-4 月信息窗);我们 corpus 43 万公告已就位,正好复用;这是 dsa 有而我们没有的数据维度(vs PE/PB 只是实现差异) |
| P2 |
财务风险 flag 因子(distress_flags) |
词表照抄 candidate_context.py:21-23(债务/逾期/违约/商誉减值/资产减值/质押/退市);从 ann_meta 公告标题批量打标 → 月频 0/1 或计数因子,作负向 Overlay |
商誉减值/债务违约在 A 股有强烈的年报季集中爆雷效应,可作价值策略的风控 Overlay;成本极低(词表+标题匹配) |
| P2 |
估值带宽风格化(Selector 层设计,非因子) |
参考 strategies/*.yaml 的 pe/pb 带宽分层:防御型 Selector 用 PE 0-15/PB 0-2,动量型放宽到 0-60/0-8,价值因子权重 0.30-0.34 vs 0.15 |
我们的「验证文化平台」定位下多策略共用因子池,同一估值维度按策略风格参数化带宽是成熟做法,避免一套阈值包打天下 |
| P3 |
value×lowvol 交互因子 |
A6 思想:EP_rank × 低波_rank 交互项,进候选池走 ICIR 验证 |
交互项是否优于线性组合是个可检验假设,成本低 |
| 不做 |
growth 4 点直接截面化 / LLM 打分层 / TW 法人 |
见 §3.2 |
前视坑/不可复现/无对应数据 |
5. 附:查证覆盖面声明
strategies/ 16 个 LLM YAML 全文读完(§2.4);src/services/screening/strategies/ 10 个量化 YAML 全文读完(§2.1-A4)。
src/ 全树 grep 关键词:fundamental/财务/基本面/factor/score/scoring/roe/pe_ratio/pb/margin/yoy/growth/revenue/profit/earnings/dividend/peg/ebitda/sue/accrual/负债率/周转率/每股收益/净资产收益——确认无 PEG/EBITDA/SUE/应计/周转率/负债率等深度财务比率计算。
data_provider/ 20 个文件全列,fundamental 相关 4 个(base.py 聚合 + 3 个 adapter)全读;akshare_fetcher.py 确认无独立财务报表函数(财务全走 fundamental_adapter)。
- 评分引擎 scorer/ranker/risk/post_analysis/dsa/filter/models/snapshot/candidate_context/pipeline 全读。
- 主流程 analyzer.py 基本面段(1000-1200, 1270-1350, 4100-4300, 1950-2050)+ notification.py 渲染段(2230-2340)+ data_tools.get_stock_info(496-547)+ analysis_context_builder/prompt_pack 全查。