You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
14 KiB
14 KiB
期货智析(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 品种列表加载流程
- 前端
loadFuturesList()调用GET /api/v1/futures/list - 后端
get_futures_list()执行:- 从
config_store加载品种配置(品种名称 → 合约代码映射) - 遍历每个品种,调用
get_cached_data()从缓存获取 K 线数据 - 对每个品种计算:
- 当前价格、涨跌幅
- 操作建议(
_get_suggestion) - 多周期趋势(
_get_period_trends) - 成功率(
_calc_success_rate) - 趋势评分(
_calc_trend_score) - 压力支撑位(Pivot Point 公式)
- 从
- 前端 渲染品种卡片网格,同时异步调用
loadAllAIAnalysis()分批加载每个品种的 AI 分析结果
3.3 单品种详情分析流程
- 前端
showDetailView(symbol)切换到详情视图 - 并行执行三个请求:
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 分析历史
- 后端
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 标准公式
- MACD(
- 前端 使用 ECharts 渲染 K 线图(含 MA5/MA10/MA20 均线、成交量柱、MACD 子图)
3.4 AI 智能分析流程(核心)
- 前端
runAIAnalysis()调用POST /api/v1/futures/ai-analysis/{symbol} - 后端
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 线时间戳
-
智能缓存策略(
should_reanalyze):- 分析超过 15 分钟 → 重新分析
- K 线数据时间戳比分析时间新 → 重新分析
- 否则返回缓存结果
-
前端
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)
+----------------+
七、存储架构
采用三级降级策略:
- MySQL 优先 — 生产环境主存储
- Redis / StorageManager — 缓存层加速
- SQLite 兜底 — 开发/单机环境自动降级
analysis_db.py 中的 get_analysis_db() 动态检测 MySQL 可用性,透明切换后端,业务代码无需感知底层存储变化。
八、路由注册
在 app/main.py 中注册三个路由:
# 第 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 - (最高价 - 最低价)