FA3-Datafetch/legacy/DOC/implementation_plan.md
2026-01-03 18:27:19 +08:00

122 lines
8.5 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.

# 实施计划:财务数据获取与分析系统 (V3.0) - Refactored
## 1. 目标描述
开发一个可扩展的后端工具通过策略模式Strategy Pattern支持多市场当前为中国A股、美股、港股的财务数据分析。工具能够为每个市场定制数据获取、分析和报告生成的全过程同时保持核心流程的统一和代码的清晰。
## 2. 核心架构:策略模式
系统采用策略模式,将每个市场的完整业务流程(“获取-存储-分析-报告”)封装在独立的策略类中。`main.py` 作为上下文,根据用户指定的市场,选择并执行相应的策略。
- **基础策略 (Base Strategy)**: 定义在 `src/strategies/base_strategy.py`,提供了一个所有具体策略都必须遵循的通用接口,如 `execute()` 方法,该方法依次调用 `fetch_data()`、`analyze_data()` 和 `generate_report()`
- **中国市场策略 (CN_Strategy)**: `src/strategies/cn_strategy.py`封装了针对A股的完整处理流程。
- **美国市场策略 (US_Strategy)**: `src/strategies/us_strategy.py`,封装了针对美股的完整处理流程。
- **香港市场策略 (HK_Strategy)**: `src/strategies/hk_strategy.py`,封装了针对港股的完整处理流程。
## 3. 核心执行流程 (通过策略)
### 步骤 1: 初始化与策略选择
- **目的**: 准备环境并根据市场选择合适的策略。
- **动作**:
- 加载 `.env` 文件中的 `TUSHARE_TOKEN``ALPHA_VANTAGE_KEY`
- `main.py` 根据用户输入的 `market` 参数,通过一个简单的工厂函数 `get_strategy`,实例化 `CN_Strategy`、`US_Strategy` 或 `HK_Strategy`
### 步骤 2: 策略执行流程
`main.py` 调用所选策略实例的 `execute` 方法,触发完整的分析流程。根据市场选择,执行路径如下:
---
#### **场景 A: 中国市场 (market='CN')**
选择中国市场时,`CN_Strategy` 的 `execute` 方法会按顺序执行以下操作:
1. **数据获取 (`fetch_data`)**:
- **执行**: `CN_Strategy` 实例化并调用 `CnFetcher` 来获取数据。
- **API调用序列 (共7次)**:
1. **获取利润表**: 调用 Tushare 的 `income` 接口 (1次)。
2. **获取资产负债表**: 调用 Tushare 的 `balancesheet` 接口 (1次)。
3. **获取现金流量表**: 调用 Tushare 的 `cashflow` 接口 (1次)。
4. **获取市场指标 (PE/PB等)**: 调用 Tushare 的 `daily_basic` 接口 (1次)。
5. **获取基本信息 (名称/日期)**: 调用 Tushare 的 `stock_basic` 接口 (1次)。
6. **获取公司信息 (员工数)**: 调用 Tushare 的 `stock_company` 接口 (1次)。
7. **获取股东信息**: 调用 Tushare 的 `stk_holdernumber` 接口 (1次)。
- **数据存储 (两阶段缓存)**:
- **1. 原始数据缓存**: `CnFetcher` 将API返回的原始数据保存为 `raw_*.csv`
- **2. 处理后数据缓存**: `CN_Strategy` 将初步处理过的数据保存为 `income_statement.csv` 等文件。
2. **数据分析 (`analyze_data`)**:
- **执行**: `CN_Strategy` 实例化 `CN_Analyzer`
- **动作**: `CN_Analyzer` 对获取的数据进行合并、列名映射 (`_map_columns`) 和A股特定的财务指标计算。
3. **报告生成 (`generate_report`)**:
- **调用**: `CN_Strategy` 调用 `CN_ReportGenerator` 实例的 `generate_report` 方法,传递分析数据和输出路径。
- **核心动作**: `CN_ReportGenerator` 全权负责报告的生成与保存:
1. **生成Markdown**: 调用继承自 `BaseReporter``_generate_markdown_content` 方法创建报告内容。
2. **保存Markdown**: 将内容写入 `data/CN/{symbol}/report.md`
3. **生成HTML**: 使用 `markdown` 库将内容转换为 HTML并嵌入预设的 CSS 样式。
4. **保存HTML**: 将最终的 HTML 内容写入 `data/CN/{symbol}/report.html`
---
#### **场景 B: 香港市场 (market='HK')**
选择香港市场时,`HK_Strategy` 的 `execute` 方法会按顺序执行以下操作:
1. **数据获取 (`fetch_data`)**:
- **执行**: `HK_Strategy` 实例化并调用 `HkFetcher` 来获取数据。
- **API调用序列 (共7次)**:
1. **获取利润表**: 调用 Tushare 的 `hk_income` 接口 (1次)。
2. **获取资产负债表**: 调用 Tushare 的 `hk_balancesheet` 接口 (1次)。
3. **获取现金流量表**: 调用 Tushare 的 `hk_cashflow` 接口 (1次)。
4. **获取市场指标 (PE/PB等)**: 调用 Tushare 的 `daily_basic` 接口 (1次)。
5. **获取基本信息 (名称/日期)**: 调用 Tushare 的 `stock_basic` 接口 (1次)。
6. **获取公司信息 (员工数)**: 调用 Tushare 的 `stock_company` 接口 (1次)。
7. **获取股东信息**: 调用 Tushare 的 `stk_holdernumber` 接口 (1次)。
- **数据存储 (两阶段缓存)**:
- **1. 原始数据缓存**: `HkFetcher` 将API返回的原始数据保存为 `raw_*.csv`
- **2. 处理后数据缓存**: `HK_Strategy` 将初步处理过的数据保存为 `income_statement.csv` 等文件。
2. **数据分析 (`analyze_data`)**:
- **执行**: `HK_Strategy` 实例化 `HK_Analyzer`
- **动作**: `HK_Analyzer` 对获取的数据进行合并、列名映射和港股特定的财务指标计算。
3. **报告生成 (`generate_report`)**:
- **调用**: `HK_Strategy` 调用 `HK_ReportGenerator` 实例的 `generate_report` 方法,传递分析数据和输出路径。
- **核心动作**: `HK_ReportGenerator` 全权负责报告的生成与保存:
1. **生成Markdown**: 调用继承自 `BaseReporter``_generate_markdown_content` 方法创建报告内容。
2. **保存Markdown**: 将内容写入 `data/HK/{symbol}/report.md`
3. **生成HTML**: 使用 `markdown` 库将内容转换为 HTML并嵌入预设的 CSS 样式。
4. **保存HTML**: 将最终的 HTML 内容写入 `data/HK/{symbol}/report.html`
---
#### **场景 C: 美国市场 (market='US')**
选择美国市场时,`US_Strategy` 的 `execute` 方法会按顺序执行以下操作:
1. **数据获取 (`fetch_data`)**:
- **执行**: `US_Strategy` 实例化并调用 `UsFetcher`
- **API调用序列 (共4次, 每次调用前有15秒延迟)**:
1. **获取利润表**: 调用 Alpha Vantage 的 `INCOME_STATEMENT` 功能 (1次)。
2. **获取资产负债表**: 调用 Alpha Vantage 的 `BALANCE_SHEET` 功能 (1次)。
3. **获取现金流量表**: 调用 Alpha Vantage 的 `CASH_FLOW` 功能 (1次)。
4. **获取公司概览**: 调用 Alpha Vantage 的 `OVERVIEW` 功能 (1次)用于计算市值、PE、PB等核心指标。
- **数据存储 (两阶段缓存)**:
- **1. 原始数据缓存**: `UsFetcher` 将API返回的原始数据保存为 `raw_*.csv`
- **2. 处理后数据缓存**: `US_Strategy` 将初步处理过的数据保存为 `income_statement.csv` 等文件。
2. **数据分析 (`analyze_data`)**:
- **执行**: `US_Strategy` 实例化 `US_Analyzer`
- **动作**: `US_Analyzer` 对获取的数据进行合并、列名映射和美股特定的计算逻辑。
3. **报告生成 (`generate_report`)**:
- **调用**: `US_Strategy` 调用 `US_ReportGenerator` 实例的 `generate_report` 方法,传递分析数据和输出路径。
- **核心动作**: `US_ReportGenerator` 全权负责报告的生成与保存:
1. **生成Markdown**: 调用继承自 `BaseReporter``_generate_markdown_content` 方法创建报告内容。
2. **保存Markdown**: 将内容写入 `data/US/{symbol}/report.md`
3. **生成HTML**: 使用 `markdown` 库将内容转换为 HTML并嵌入预设的 CSS 样式。
4. **保存HTML**: 将最终的 HTML 内容写入 `data/US/{symbol}/report.html`
## 4. 验证计划
- **核心逻辑不变**: 由于核心的数据获取和指标计算逻辑是从旧代码平移而来,其准确性得以保留。
- **结构验证**:
1. **中国股票**: 运行 `python main.py CN 600519.SH`。检查程序是否无报错执行完毕,并生成 `data/CN/600519.SH/report.md` 文件。
2. **香港股票**: 运行 `python main.py HK 00700.HK`。检查程序是否无报错执行完毕,并生成 `data/HK/00700.HK/report.md` 文件。
3. **美国股票**: 运行 `python main.py US AAPL`。检查程序是否无报错执行完毕,并生成 `data/US/AAPL/report.md` 文件。
4. **报告内容**: 打开生成的 `.md` 文件,确认内容与旧版报告基本一致,数据完整,格式正确。