# A股交易决策看板（源代码包）

基于东方财富/腾讯行情 API 的 A 股量化决策看板。全链路：全市场扫描 → 市值过滤 → 行业/概念 → K线与实时行情 → 历史回测与交易信号 → 生成单文件 HTML 看板。

看板为纯前端单文件（含 echarts），打开即可用，内置：关注列表、个股详情、T+0 日内回转引擎、多因子共振评分、AI 深度分析、情绪周期、回测胜率、自我学习校准等交易员实操模块。

---

## 一、目录结构

```
trading_dashboard_source/
├── README.md                        # 本文档
├── daily_scan_runner.sh             # 一键流水线编排脚本（6 步）
│
├── stock_scanner.py                 # 步骤1：扫描 A 股全市场，输出 scan_results.json
├── filter_by_marketcap_v2.py        # 步骤2：市值过滤（≥100亿，排除 ST/*ST），输出 scan_results_filtered.json
├── fetch_industry_v2.py             # 步骤3：抓取行业/概念，输出 stock_industry_concepts_new.json
├── fetch_kline_data.py              # 步骤4：抓取 K 线 + 实时行情，输出 kline_data.json
├── backtest_engine.py               # 步骤5：指标回测 + 交易信号，输出 backtest_results.json
├── generate_report_v5.py            # 步骤6：生成单文件 HTML 看板（当前版本，核心，含全部前端逻辑）
├── generate_report_v4.py            # 历史版本生成器（保留，供演进参考）
├── generate_report_v3.py            # 历史版本生成器（保留，供演进参考）
├── generate_report_v2.py            # 历史版本生成器（保留，供演进参考）
├── validate_js.py                   # QA：校验生成的 HTML 内嵌 JS 语法（node --check）
│
└── data/                            # 运行 generate_report_v5.py 所需的最小输入数据
    ├── scan_results_filtered.json   # Top50 过滤后个股扫描结果
    ├── stock_industry_concepts_new.json
    ├── backtest_results.json        # 回测 + 市场趋势 + 交易信号
    ├── kline_data.json              # 个股历史 K 线（含 MA 计算）
    └── stock_list.csv               # 全市场股票列表快照
```

---

## 二、数据流管线

```
stock_scanner.py ──scan_results.json──▶ filter_by_marketcap_v2.py ──scan_results_filtered.json──┐
                                                                                                 ├─▶ fetch_industry_v2.py ──stock_industry_concepts_new.json──┐
                                                                                                 └─▶ fetch_kline_data.py ──kline_data.json──────────────────┤
                                                                                                                                                        │
                backtest_engine.py ──(读 scan_results_filtered.json)──▶ backtest_results.json────┤
                                                                                                                                                        │
                                                        generate_report_v5.py ◀── 汇总以上 4 份 JSON ──▶ A股K线指标扫描报告.html
```

- `generate_report_v5.py` 硬编码读入 4 份 JSON：`scan_results_filtered.json`、`stock_industry_concepts_new.json`、`backtest_results.json`、`kline_data.json`，用 Python 字符串模板内嵌全部 JS/HTML，做占位符替换后写出单个 HTML。
- 若只需**离线调整前端/算法并重新出图**，可跳过 1–5 步，直接用 `data/` 里的 4 份 JSON 跑 `generate_report_v5.py`。

---

## 三、运行方式

### 环境依赖
- Python 3.10+，依赖：`pandas`、`numpy`、`requests`；生成器可选 `pypinyin`（拼音搜索，缺失会自动降级）。
- 语法校验需要 Node.js（可选，仅 `validate_js.py` 用）。

```bash
pip install pandas numpy requests pypinyin
```

### 一键全流程（需联网）
```bash
bash daily_scan_runner.sh
```

### 仅重新生成看板（离线，用现有 data/）
```bash
python3 generate_report_v5.py
python3 validate_js.py      # 可选：校验内嵌 JS 语法
```

> ⚠️ 路径需按本机改写：6 个 `.py` 与 `daily_scan_runner.sh` 顶部硬编码了
> `WORK_DIR`/`OUTPUT_DIR` 绝对路径。移交给其他环境时，把这两处改成你自己的目录
> （`WORK_DIR`=脚本与数据所在目录，`OUTPUT_DIR`=HTML 输出目录，二者可相同）。

---

## 四、核心功能模块（前端看板）

看板按「宏观 → 板块 → 个股」三层组织：

| 层级 | 模块 | 说明 |
|------|------|------|
| L1 宏观 | 市场情绪仪表盘 / 多指数 / 涨跌家数 | 顶部 5 大指数跑马灯（上证/深证/创业板/科创50/北证50），可点击进指数详情 |
| L1 宏观 | 情绪周期引擎（6 阶段） | 冰点/回暖/发酵/高潮/分歧/退潮，基于打板池（ZT/DT/ZB）60s 轮询 |
| L2 板块 | 板块排行 / 热力图 / 雷达 | 行业截面情绪排序与买卖信号统计 |
| L3 个股 | 信号矩阵 / 多因子共振 | 8 因子共振评分，A(≥75)/B(≥58)/C 分级，C 级可隐藏 |
| 个股详情 | 交易信号 + 实操执行计划 | 三档建仓 30/30/40、动态 ATR 止损、两段止盈 + 保本上移 |
| 个股详情 | **T+0 日内回转引擎** | 幻方风格 5 因子评分（振幅/方向/量能/波动/位置），输出顺向/逆向/网格/观望四类做 T 指令，附低吸/高抛/止损/做 T 空间/分批点位/三段式择时 |
| 个股详情 | AI 深度分析 | 8 维加权评分，强烈关注/重点关注/观望/回避 |
| 自我学习 | 信号追踪 + 校准 | 记录 A/B 级信号，自动兑现胜负，用校准系数（0.9–1.1x）回调共振评分 |
| 通用 | K 线图 / 模糊搜索 / CSV 导出 | 拼音/代码/名称全市场模糊搜索（东方财富 API） |

---

## 五、关键算法约定（供二次加工参考）

- 量化因子：RSI(14)、ADX(14)、布林带位置、ATR(14)、量比。
- 交易信号：次日/3日/5日胜率 + 量化过滤胜率 + 盈亏比。
- 止损/止盈：用动态 ATR 而非固定百分比。
- T0 评分 0–100：振幅空间(25) + 方向确定(22) + 量能活性(18) + 波动质量(15) + 位置质量(15)。
- 买入信号 8 因子共振：wr_filtered≥55、SQ≥60、RR≥1.5、市场环境、周期共振、量比 1.2–3、ADX≥20、板块共振。

---

## 六、已知约束与注意点

1. 过滤硬约束：排除市值 < 100 亿、ST/*ST。
2. 东方财富 push2 API 需 `fltt=2` 才返回元（非分）；secid 用点分（如 `0.002626`）。
3. `getYesterdayZTPool` 已失效，情绪周期改用当日 ZT/DT/ZB 池。
4. 改 `generate_report_v5.py` 内嵌 JS 后，务必 `python3 validate_js.py` 跑 `node --check`——一个括号不配对会静默杀死整页脚本。
5. 浏览器沙箱可能屏蔽东方财富 JSONP（ERR_EMPTY_RESPONSE），验证前端渲染时可用 `browser_evaluate` 注入 mock 数据，而非依赖实盘 API。
6. Python `float('inf')` 会序列化成小写 `inf`，导致前端 `ReferenceError`，务必用 99.99 等安全值替换（见 `safe_float`/`sanitize_data`）。

---

## 七、版本历史（生成器）

| 版本 | 文件 | 说明 |
|------|------|------|
| v5（当前） | `generate_report_v5.py` | 三层架构 + 关注功能 + T0 日内回转引擎 + 执行计划 + 自我学习校准 |
| v4 | `generate_report_v4.py` | 引入回测数据可视化与交易信号展示 |
| v3 | `generate_report_v3.py` | 引入板块/概念/情绪分层 |
| v2 | `generate_report_v2.py` | 基础指标扫描结果展示（较早期） |

> v2~v4 仅作演进参考，数据字段与 v5 不完全兼容；二次加工请以 `generate_report_v5.py` 为准。