Files
sanguo_vnpy_v2/docs/dsa_fundamental_factors_20260907.md
T
claude_dev c377023bbc docs(factor): 补提被代码引用的选型/红线文档——survey§7口径红线+dsa深查+P0晨报 [nas]
fundamental_adapter/library docstring 引用 survey §7 口径红线与 §3 候选池,
三文档一直未入库(仅存本机),合流后将成悬空引用:
- fundamental_factor_survey_20260907.md: 96 候选池+P0 32 选型+§7 五条红线
- dsa_fundamental_factors_20260907.md: dsa 因子库深查(可搬/不搬结论)
- factor_fundamental_morning_report_20260908.md: P0 批晨报(存档)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-09 12:12:00 +08:00

25 KiB
Raw Blame History

dsa 基本面因子/评分/信号 全量挖掘报告(2026-09-07)

调研对象:/Users/chufeng/.openclaw/sanguo_projects/daily_stock_analysis/git @ 972c3146 方法:系统性过 strategies 全部 YAML、src/ 全树 grepfactor/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:量化筛选管线(AlphaSift 衍生,src/services/screening/
│   L1 全市场快照(snapshot.py: PE/PB/市值 来自实时行情)
│     → 硬过滤(filter.py: PE/PB/市值边界)
│     → 9因子截面评分(scorer.py: value/liquidity/momentum/reversal/activity/stability/size/theme_heat/topic_alignment)
│     → screen_score = Σ 因子×权重
│   L2 LLM 重排(ranker.py: final_score = screen_score×0.6 + llm_score×0.4)
│   L3 后置分析(post_analysis.py: dsa overlay / 本地 scorecard / external_http)
│     → 风险覆盖层(risk.py: invalid PE/high PB 罚点) → 组合分散惩罚 → Top N
│
├─ 体系BLLM 技能策略(strategies/*.yaml 16个,自然语言 prompt
│   主分析流程(analyzer.py) 拉单票 fundamental_context(bundle)
│     → prompt 里渲染成 markdown 表格(财报/分红/资金流/三大法人/PE PB)
│     → LLM 输出 sentiment_score + fundamental_analysis(文字) + signal_attribution.fundamentals(0-100)
│     → 决策稳定器(analyzer.py: 资金流bias×价格位置 硬规则后处理)
│
└─ 元评估层:skill_opinion_weight_serviceLLM技能观点的贝叶斯后验命中率→权重,非基本面)

关键事实:体系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_ratiopb_ratio 列,来自全市场实时快照(snapshot.py:46-47 标准列;各源列名映射 snapshot.py:684-790,如 akshare_em 的「动态市盈率/市净率」snapshot.py:701-702tushare 源直接取 pe,pb,total_mv,circ_mv snapshot.py:604
逻辑 score=50;若有 PErank(0<PE<500, 越低越好, na=25) → score = score×0.35 + pe_rank×0.65;再若有 PBrank(0<PB<50, 越低越好, na=25) → score = score×0.55 + pb_rank×0.45clip(0,100)。秩归一化用 pct rank ×100scorer.py:490-505 _rank_score
输出 factor_value_score0-100,截面百分位秩,scorer.py:11
使用 加权进 screen_scorescorer.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 0src/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_scorescorer.py:17
使用 权重 0.02~0.12blue_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-22pe_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-4quality_value.yaml:23-29);balanced_alpha pe 0-80 / pb 0-8balanced_alpha.yaml);低波质量 pe 0-45 / pb 0-5momentum_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_scorerisk.py:66-78
输出 risk_flags 标签 + final_score 扣减

A6. scorecard 复合加分(value×stability 交互项)

内容
位置 src/services/screening/post_analysis.py:32-55profile 默认值)、post_analysis.py:306-308(规则)
逻辑 value≥75 且 stability≥65 → final_score +2.4tag 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-197final_score = screen_score×(1-0.40) + llm_score×0.40;候选行渲染带 total_mv/PE/PB/factor_scores/dsa_contextranker.py:382-403
性质 LLM 见到 PE/PB 做语义归因,40% 权重混入最终分——不可回测部分

A8. L3 DSA overlayLLM 深分析分数词表化)

内容
位置 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_alignmentscorer.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:单票基本面数据 bundlefail-open,喂 LLM 的原料)

B1. AkshareFundamentalAdapterA 股)——已知背景,收录行号

字段 位置 数据源
growth revenue_yoy / net_profit_yoy / roe / gross_margin(关键词抓取最新一期) data_provider/fundamental_adapter.py:315-330 stock_financial_abstract / stock_financial_analysis_indicatorfundamental_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_cninfofundamental_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/recommendstock_gdfx_top_10_emstock_zh_a_gdhs_detail_em
capital_flow main_net_inflow / inflow_5d / inflow_10d + 板块资金排名 fundamental_adapter.py:416-473 东财资金流
dragon_tiger 龙虎榜 flag20 日窗口) 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-199TTM 事件截断 + 实时价)

B3. YfinanceFundamentalAdapter(港/美股)

内容
位置 data_provider/yfinance_fundamental_adapter.py:146-374
growth 4 点 revenueGrowth/earningsGrowth/returnOnEquity/grossMarginsinfo 比率 ×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-171get_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-1175bias 计算 analyzer.py:1279-1318 规则:资金流三值(主力/5日/10日)全同向才给 inflow/outflow,否则 neutralanalyzer.py:1309-1318);再与价格位置矩阵组合——近压力+非流入→禁止追高;流出+未突破→降级;近支撑+非流出+无重大风险→持有观察(analyzer.py:1093-1171)。这是全 dsa 唯一的基本面类硬规则信号(资金流维度)

2.4 层DLLM 技能策略 YAMLstrategies/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_eventscandidate_context.py:307-317)打 event_tags
E2 负面事件 减持/监管/业绩压力(预亏/亏损/业绩下滑/业绩减少/净利润下降/财务风险(债务/逾期/违约/商誉减值/资产减值)/退市风险/诉讼风险 candidate_context.py:17-24 同上 + negative_event_flags
E3 公告类别 业绩/回购增持/减持/监管问询/重大合同/分红融资/诉讼担保/股权激励 candidate_context.py:32-41 classify_announcement_categoriescandidate_context.py:331-343
E4 来源置信 source_confidence/source_weight_scoreannouncement 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 corpusann_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_info496-547+ analysis_context_builder/prompt_pack 全查。