# 期货智析（futures_analysis）模块 — 功能与逻辑文档

## 一、模块概述

期货智析模块是一个集**数据采集、技术分析、AI智能分析、复盘计划生成、交易复盘**于一体的期货分析平台。采用前后端分离架构，前端为 SPA 单页应用，后端提供 RESTful API。

---

## 二、文件结构

### 后端

| 文件 | 说明 |
|------|------|
| `app/api/futures_analysis.py` | 主 API 路由（~970行），前缀 `/api/v1/futures` |
| `app/api/review_plan.py` | 复盘计划 API，前缀 `/api/v1/review` |
| `app/api/trade_review.py` | 交易复盘 API，前缀 `/api/v1/trade-review` |
| `app/analysis_models.py` | 数据模型定义（~325行），14 个 ORM 模型类 |
| `app/analysis_db.py` | 独立数据库初始化（SQLite + MySQL 动态切换） |
| `app/services/ai_analysis.py` | AI 四维联合分析服务（~513行） |
| `app/services/cache.py` | 缓存服务（SQLite/Redis/MySQL 三级存储） |
| `app/services/collector.py` | 数据采集服务（封装底层采集脚本） |
| `app/services/plan_generator.py` | 复盘计划生成器 |
| `app/services/trade_parser.py` | 结算单解析器 |
| `app/config_store.py` | 统一配置存储（MySQL 优先 + JSON 文件兜底） |

### 前端

| 文件 | 说明 |
|------|------|
| `app/static/futures_analysis.html` | 主页面（~1232行） |
| `app/static/futures_analysis.js` | 前端逻辑（~3855行） |
| `app/static/futures_analysis.css` | 样式表（~3124行） |

### 数据库

| 文件 | 说明 |
|------|------|
| `data/futures_analysis.db` | SQLite 数据库（兜底存储） |

---

## 三、整体分析逻辑流程

### 3.1 数据流全链路

```
数据采集(collector.py) → 缓存存储(cache.py) → API接口(futures_analysis.py) → 前端渲染(JS)
                                                      ↓
                                           AI分析服务(ai_analysis.py)
                                                      ↓
                                           AI结果缓存(AIAnalysisCache表)
```

### 3.2 品种列表加载流程

1. **前端** `loadFuturesList()` 调用 `GET /api/v1/futures/list`
2. **后端** `get_futures_list()` 执行：
   - 从 `config_store` 加载品种配置（品种名称 → 合约代码映射）
   - 遍历每个品种，调用 `get_cached_data()` 从缓存获取 K 线数据
   - 对每个品种计算：
     - 当前价格、涨跌幅
     - 操作建议（`_get_suggestion`）
     - 多周期趋势（`_get_period_trends`）
     - 成功率（`_calc_success_rate`）
     - 趋势评分（`_calc_trend_score`）
     - 压力支撑位（Pivot Point 公式）
3. **前端** 渲染品种卡片网格，同时异步调用 `loadAllAIAnalysis()` 分批加载每个品种的 AI 分析结果

### 3.3 单品种详情分析流程

1. **前端** `showDetailView(symbol)` 切换到详情视图
2. 并行执行三个请求：
   - `loadFuturesDetail(symbol)` → `GET /api/v1/futures/detail/{symbol}` — 详细行情和技术指标
   - `loadKlineData(symbol, period)` → `GET /api/v1/futures/kline/{symbol}` — K 线数据（图表用）
   - `loadHistoryListForAnalysis(symbol)` → `GET /api/v1/futures/ai-analysis/{symbol}/history` — AI 分析历史
3. **后端** `get_futures_detail()` 计算完整技术指标：
   - **MACD**（`_calc_macd`）：EMA12/EMA26 → DIF/DEA → 金叉/死叉信号
   - **RSI**（`_calc_rsi`）：14 周期 RSI → 超买/超卖/正常判断
   - **布林带**（`_calc_boll`）：20 周期 MA ± 2 倍标准差 → 上轨/中轨/下轨信号
   - **KDJ**（`_calc_kdj`）：9 周期 RSV → K/D 值 → 偏多/偏空/中性
   - **Pivot Point**：PP = (H+L+C)/3，R1/R2/S1/S2 标准公式
4. **前端** 使用 ECharts 渲染 K 线图（含 MA5/MA10/MA20 均线、成交量柱、MACD 子图）

### 3.4 AI 智能分析流程（核心）

1. **前端** `runAIAnalysis()` 调用 `POST /api/v1/futures/ai-analysis/{symbol}`
2. **后端** `AIFuturesAnalyzer.analyze()` 执行完整流程：

```
步骤1: get_active_model()
  └─ 从配置中获取当前激活的 AI 模型（支持 OpenAI 兼容接口）

步骤2: prepare_multi_period_data()
  └─ 准备 5 个周期（5min/15min/30min/60min/daily）的 K 线数据
  └─ 每个周期计算技术指标（MA10/MA20/MACD/KDJ/量比等）

步骤3: AIAnalysisPrompt.build_prompt()
  └─ 构建"四维联合判断分析法(4D-XV)"提示词
  └─ 系统角色：20年经验的资深金融分析师
  └─ 要求输出 JSON 格式的四维分析结果

步骤4: call_ai_model()
  └─ 通过 HTTP POST 调用 AI 模型（OpenAI 兼容格式，180秒超时）

步骤5: parse_ai_response()
  └─ 正则提取 JSON 响应

步骤6: save_analysis_cache()
  └─ 保存结果到 AIAnalysisCache 表，附带 K 线时间戳
```

3. **智能缓存策略**（`should_reanalyze`）：
   - 分析超过 15 分钟 → 重新分析
   - K 线数据时间戳比分析时间新 → 重新分析
   - 否则返回缓存结果

4. **前端** `displayAIAnalysisResult()` 渲染分析结果，并通过 `syncAIToPanels()` 同步数据到各个面板

### 3.5 AI 分析输出结构（4D-XV 四维联合分析）

AI 分析返回的 JSON 包含以下字段：

| 字段 | 说明 |
|------|------|
| `summary` | 分析摘要 |
| `four_dimensional` | 四维分析（MACD趋势、成交量资金、KDJ时机、多周期方向） |
| `kdj_diagnosis` | KDJ 诊断详情 |
| `pivot_points` | 压力支撑位 |
| `red_lines_check` | 红线审查（不可违反的交易纪律） |
| `discipline_score` | 纪律评分 |
| `trading_suggestion` | 交易建议（方向、置信度、入场区间、止损、仓位） |
| `scenario_plans` | 情景预案（突破/震荡/反转/消息影响） |
| `risk_warnings` | 风险提示 |
| `experience_lessons` | 经验教训 |

---

## 四、全部功能清单

### 4.1 品种分析（主页面）

| 功能 | 描述 |
|------|------|
| 品种列表展示 | 卡片网格展示所有期货品种，含价格、涨跌、建议、成功率、趋势评分、压力支撑位 |
| 分类筛选 | 全部 / 能源 / 金属 / 农产品 / 金融 四大分类 |
| 搜索 | 按品种名称或合约代码搜索 |
| 趋势筛选 | 点击统计卡片按上涨 / 下跌 / 震荡筛选 |
| 数据刷新 | 单个品种刷新或全部刷新（异步后台执行，进度轮询） |
| 自选品种 | 添加/取消自选，独立自选页面 |
| AI 批量分析 | 一键对所有合约进行 AI 分析（分批 3 个并发，2 秒间隔） |

### 4.2 详情分析页

| 功能 | 描述 |
|------|------|
| 行情概览 | 品种名称、合约代码、当前价、涨跌、开/高/低/量 |
| K 线图表 | ECharts 渲染，支持 5M/15M/30M/1H 四个周期切换，含 MA 均线、成交量、MACD 子图 |
| 技术指标面板 | MACD（金叉/死叉）、RSI（超买/超卖）、布林带、KDJ |
| 关键点位 | Pivot Point 计算的压力位(R1/R2)、支撑位(S1/S2)、中枢(PP) |
| 多周期趋势 | 5/15/30/60 分钟四个周期的趋势方向 |
| AI 思维分析 | 四维联合分析结果展示（摘要、方向、置信度、入场区间、止损、仓位） |
| AI 分析详情弹窗 | 完整的 4D-XV 信号表、红线审查、纪律评分、情景预案、经验教训 |
| 历史分析记录 | 展示该品种的历史 AI 分析记录列表，可点击查看完整报告 |
| 情景预案 | 突破/震荡/反转/消息影响四种情景的概率和应对策略 |

### 4.3 复盘计划（V2）

| 功能 | 描述 |
|------|------|
| 生成复盘报告 | 选择日期，调用 `POST /api/v1/review/generate` 自动生成 |
| 核心结论 | Hero 区域展示日期、核心结论、数据基准 |
| 三档分类 | 绿色（交易机会）/ 黄色（重点关注）/ 红色（规避） |
| 交易机会卡片 | 含方向、入场区间、止损、目标位、触发条件、四维评分条 |
| 全品种排名表 | 支持按综合评分/活跃度/量比/方向排序 |
| 品种详情弹窗 | 评分明细、多周期趋势、枢轴点位、交易计划 |
| 板块热度 | 各板块均分、趋势、龙头品种 |
| 风险提示 | 全局风险提示横幅 |

### 4.4 交易复盘

| 功能 | 描述 |
|------|------|
| 结算单导入 | 支持单个/批量导入 .xls/.xlsx 期货结算单 |
| 去重校验 | 按交易日+品种+时间+价格逐条去重 |
| 6 维统计卡片 | 总盈亏、净盈亏、胜率/盈亏比、交易笔数、最大回撤、日均盈亏 |
| 账户权益曲线 | ECharts 折线+柱状图（累计净盈亏 + 每日盈亏） |
| 品种盈亏气泡图 | 气泡大小=手续费占比，颜色=净盈亏 |
| 每日交易详情表 | 点击日期查看详情弹窗（含 AI 诊断报告、品种盈亏统计、交易流水） |
| 品种盈亏排行表 | 含盈亏比异步计算 |
| 品种详情弹窗 | K 线走势（多周期切换）+ 该品种交易记录 |
| 交易详情弹窗 | 单笔交易详情 + K 线买卖点标注 + AI 交易分析 |
| 批次管理 | 查看/删除导入批次 |
| 按日期删除 | 删除指定日期的所有交易记录 |

---

## 五、数据模型（14 个 ORM 类）

| 模型类 | 表名 | 用途 |
|--------|------|------|
| `FuturesAnalysis` | `futures_analysis` | 期货分析报告（建议、指标、评分、点位） |
| `WatchedSymbol` | `watched_symbols` | 用户关注品种 |
| `AIModelConfig` | `ai_model_configs` | AI 模型配置（提供商、密钥、参数） |
| `AnalysisSettings` | `analysis_settings` | 分析设置（单例 JSON 配置） |
| `AIAnalysisCache` | `ai_analysis_cache` | AI 分析结果缓存（含 K 线时间戳用于智能刷新） |
| `ReviewDate` | `review_dates` | 复盘日期（V1） |
| `SymbolRanking` | `symbol_rankings` | 品种排名（V1） |
| `TradingPlan` | `trading_plans` | 交易计划（V1） |
| `SymbolScoreV2` | `symbol_scores_v2` | V2 品种多维度评分（5维度+综合+关键点位+方向标签） |
| `TradingPlanV2` | `trading_plans_v2` | V2 交易计划（入场/止损/目标/触发条件） |
| `SectorHeat` | `sector_heat` | 板块热度（均分/趋势/龙头/成员） |
| `ReviewPlanV2` | `review_plans_v2` | V2 复盘计划总表（元数据+统计） |
| `TradeRecord` | `trade_records` | 交易记录（从结算单导入的逐笔明细） |
| `TradeImportBatch` | `trade_import_batches` | 导入批次元信息 |

---

## 六、组件连接关系

```
                        +-------------------+
                        |   前端 SPA 页面    |
                        | futures_analysis   |
                        |  .html / .js / .css|
                        +---------+---------+
                                  |
              +-------------------+-------------------+
              |                   |                   |
    /api/v1/futures/*   /api/v1/review/*   /api/v1/trade-review/*
              |                   |                   |
    +---------+--------+  +------+-------+  +--------+--------+
    |futures_analysis.py|  |review_plan.py|  | trade_review.py |
    +----+------+------+  +------+-------+  +--------+--------+
         |      |                |                   |
         |      +-------+--------+----------+--------+
         |              |                   |
    +----+----+  +------+-------+  +--------+--------+
    |cache.py |  |plan_generator|  |  trade_parser   |
    +----+----+  +--------------+  +-----------------+
         |
    +----+----+     +------------------+
    |collector| --> | futures_data_     |
    |  .py    |     | collector(脚本)   |
    +---------+     +------------------+
         |
    +----+----+     +------------------+
    | storage | --> | Redis / MySQL /  |
    | Manager |     | SQLite(兜底)     |
    +---------+     +------------------+
         |
    +----+----+
    |config   | --> symbols_config.json / ai_config.json / MySQL AppConfig
    |_store   |
    +---------+
         |
    +----+-----------+
    |ai_analysis.py  | --> 外部 AI 模型 API (OpenAI 兼容)
    |(AIFuturesAnalyzer)
    +----------------+
```

---

## 七、存储架构

采用**三级降级策略**：

1. **MySQL 优先** — 生产环境主存储
2. **Redis / StorageManager** — 缓存层加速
3. **SQLite 兜底** — 开发/单机环境自动降级

`analysis_db.py` 中的 `get_analysis_db()` 动态检测 MySQL 可用性，透明切换后端，业务代码无需感知底层存储变化。

---

## 八、路由注册

在 `app/main.py` 中注册三个路由：

```python
# 第 179-182 行
app.include_router(futures_analysis.router)   # /api/v1/futures
app.include_router(review_plan.router)         # /api/v1/review
app.include_router(trade_review.router)        # /api/v1/trade-review
```

页面入口：`GET /futures-analysis`

---

## 九、技术指标计算说明

### MACD（Moving Average Convergence Divergence）
- EMA12 = 前一日EMA12 × (1 - 2/13) + 今日收盘价 × 2/13
- EMA26 = 前一日EMA26 × (1 - 2/27) + 今日收盘价 × 2/27
- DIF = EMA12 - EMA26
- DEA = 前一日DEA × (1 - 2/10) + 今日DIF × 2/10
- 信号：DIF > DEA → 金叉（看多）；DIF < DEA → 死叉（看空）

### RSI（Relative Strength Index）
- 14 周期 RSI = 100 - 100 / (1 + RS)，RS = 平均上涨幅度 / 平均下跌幅度
- 信号：RSI > 70 → 超买；RSI < 30 → 超卖；30 ≤ RSI ≤ 70 → 正常

### 布林带（Bollinger Bands）
- 中轨 = 20 周期 MA
- 上轨 = 中轨 + 2 × 标准差
- 下轨 = 中轨 - 2 × 标准差
- 信号：价格触及上轨 → 压力；价格触及下轨 → 支撑

### KDJ（随机指标）
- RSV = (收盘价 - 9日最低价) / (9日最高价 - 9日最低价) × 100
- K = 2/3 × 前一日K + 1/3 × RSV
- D = 2/3 × 前一日D + 1/3 × K
- 信号：K > D → 偏多；K < D → 偏空

### Pivot Point（枢轴点）
- PP = (最高价 + 最低价 + 收盘价) / 3
- R1 = 2 × PP - 最低价
- R2 = PP + (最高价 - 最低价)
- S1 = 2 × PP - 最高价
- S2 = PP - (最高价 - 最低价)
