821 lines
14 KiB
Markdown
821 lines
14 KiB
Markdown
# 黄金分割时空分析技术设计文档
|
||
|
||
## 1. 文档目标
|
||
|
||
本文档用于定义“黄金分割时空分析”模块的技术实现方案。
|
||
|
||
目标是:
|
||
|
||
- 在首页新增一个独立入口
|
||
- 用户输入代码或名称后,进入分析页面
|
||
- 后端返回多周期行情、均线、成交量、ABC 结构、黄金分割、时间斐波那契和共振结果
|
||
- 前端以独立模块承载,不影响现有:
|
||
- 南向资金模块
|
||
- A 股资金模块
|
||
- ETF 模块
|
||
|
||
本文档重点回答以下问题:
|
||
|
||
- 如何在当前项目中落地该功能
|
||
- 如何保持与现有模块解耦
|
||
- 如何设计前后端接口
|
||
- 如何设计分析引擎
|
||
- 如何设计图形化展示与绘图工具能力
|
||
|
||
---
|
||
|
||
## 2. 当前项目评估结论
|
||
|
||
当前项目具备开发该功能的基础,但还没有现成的技术分析引擎和专业 K 线图表层。
|
||
|
||
### 2.1 当前可复用能力
|
||
|
||
前端已有:
|
||
|
||
- Vue 3 + TypeScript + Vite
|
||
- 首页总入口
|
||
- 独立模块页面结构
|
||
- composable 模式的数据加载组织方式
|
||
|
||
后端已有:
|
||
|
||
- FastAPI 路由层
|
||
- service 分层
|
||
- 东方财富客户端
|
||
- 基础数据获取能力
|
||
|
||
可直接复用的文件和结构:
|
||
|
||
- [App.vue](C:\Users\Administrator\Desktop\nanxiang1\frontend\src\App.vue)
|
||
- [HomePortal.vue](C:\Users\Administrator\Desktop\nanxiang1\frontend\src\components\home\HomePortal.vue)
|
||
- [routes.py](C:\Users\Administrator\Desktop\nanxiang1\backend\app\api\routes.py)
|
||
- [schemas.py](C:\Users\Administrator\Desktop\nanxiang1\backend\app\api\schemas.py)
|
||
- [eastmoney_client.py](C:\Users\Administrator\Desktop\nanxiang1\backend\app\clients\eastmoney_client.py)
|
||
|
||
### 2.2 当前缺失能力
|
||
|
||
当前项目尚未具备:
|
||
|
||
- 单标的多周期行情分析接口
|
||
- MA5/13/21/34/55/89 计算引擎
|
||
- ABC 全自动识别引擎
|
||
- 黄金分割与时间斐波那契分析引擎
|
||
- 多级别共振评分引擎
|
||
- 真正的 K 线图与绘图工具
|
||
|
||
因此,开发必须新增一套相对独立的分析模块。
|
||
|
||
---
|
||
|
||
## 3. 设计原则
|
||
|
||
## 3.1 模块隔离原则
|
||
|
||
新功能必须以独立模块实现,不能侵入式修改现有南向、A 股资金、ETF 模块逻辑。
|
||
|
||
具体要求:
|
||
|
||
- 首页仅新增一个入口卡片
|
||
- 前端新增独立页面与独立 composable
|
||
- 后端新增独立路由、schema、service、engine
|
||
- 不修改现有模块的数据结构
|
||
- 不复用现有资金模块 response 结构做兼容拼接
|
||
|
||
## 3.2 可解释原则
|
||
|
||
所有分析结果都必须可解释。
|
||
|
||
后端返回结果时,不能只返回结论,还必须返回:
|
||
|
||
- 起点和终点
|
||
- A/B/C 点位置
|
||
- 黄金分割位计算结果
|
||
- 时间计数结果
|
||
- 共振命中原因
|
||
|
||
## 3.3 图形优先原则
|
||
|
||
展示顺序必须如下:
|
||
|
||
1. 优先叠加到 K 线图
|
||
2. 若当前阶段无法叠加,则生成独立分析图
|
||
3. 若图形能力仍不足,则输出结构化逻辑步骤
|
||
|
||
## 3.4 兼容演进原则
|
||
|
||
第一版先完成“可分析、可展示、可解释”,
|
||
后续再逐步增强到:
|
||
|
||
- 交互式黄金分割尺
|
||
- 波浪尺
|
||
- 用户拖拽修正重算
|
||
|
||
---
|
||
|
||
## 4. 总体架构
|
||
|
||
建议新增一个完整的 feature 纵切模块:
|
||
|
||
### 4.1 前端新增模块
|
||
|
||
- `frontend/src/components/analysis/`
|
||
- `frontend/src/composables/useAnalysisData.ts`
|
||
- `frontend/src/types/analysis.ts`
|
||
|
||
### 4.2 后端新增模块
|
||
|
||
- `backend/app/services/analysis_service.py`
|
||
- `backend/app/services/analysis_engine.py`
|
||
- `backend/app/services/analysis_visual_service.py`
|
||
- `backend/app/api/analysis_schemas.py`
|
||
- `backend/app/clients/market_symbol_resolver.py`
|
||
|
||
### 4.3 路由接入
|
||
|
||
新增独立接口,不污染现有 route 的业务语义:
|
||
|
||
- `/analysis/resolve`
|
||
- `/analysis/overview`
|
||
- `/analysis/report`
|
||
- `/analysis/chart`
|
||
|
||
---
|
||
|
||
## 5. 前端设计
|
||
|
||
根据当前 Vue 项目结构,前端必须保持“首页薄、功能页独立、逻辑放 composable”。
|
||
|
||
## 5.1 首页入口改造
|
||
|
||
修改:
|
||
|
||
- [App.vue](C:\Users\Administrator\Desktop\nanxiang1\frontend\src\App.vue)
|
||
- [HomePortal.vue](C:\Users\Administrator\Desktop\nanxiang1\frontend\src\components\home\HomePortal.vue)
|
||
|
||
新增一个新的视图类型:
|
||
|
||
- `analysis`
|
||
|
||
首页卡片建议命名:
|
||
|
||
- `黄金分割时空分析`
|
||
|
||
入口描述建议:
|
||
|
||
- 输入股票、指数或 ETF 代码,输出多周期 K 线、ABC 结构、黄金分割、时间斐波那契与共振策略。
|
||
|
||
## 5.2 组件边界设计
|
||
|
||
建议组件地图如下:
|
||
|
||
### 5.2.1 根页面
|
||
|
||
- `AnalysisWorkspace.vue`
|
||
|
||
职责:
|
||
|
||
- 页面容器
|
||
- 组织各子组件
|
||
- 挂载数据加载 composable
|
||
|
||
### 5.2.2 输入区
|
||
|
||
- `AnalysisSymbolSearch.vue`
|
||
|
||
职责:
|
||
|
||
- 输入代码或名称
|
||
- 触发查询
|
||
- 展示解析后的标的信息
|
||
|
||
### 5.2.3 基础概览区
|
||
|
||
- `AnalysisOverviewCards.vue`
|
||
|
||
职责:
|
||
|
||
- 展示名称、代码、最新价、涨跌幅、分析时间
|
||
- 展示当前主结构摘要
|
||
|
||
### 5.2.4 多周期结构区
|
||
|
||
- `AnalysisCyclePanel.vue`
|
||
|
||
职责:
|
||
|
||
- 展示日线、周线、60、90、120 的趋势状态
|
||
- 展示均线排列与成交量摘要
|
||
|
||
### 5.2.5 ABC 结构区
|
||
|
||
- `AnalysisAbcPanel.vue`
|
||
|
||
职责:
|
||
|
||
- 展示各周期 A/B/C 点
|
||
- 展示主结构与次级结构
|
||
- 展示结构有效性
|
||
|
||
### 5.2.6 时空策略区
|
||
|
||
- `AnalysisStrategyPanel.vue`
|
||
|
||
职责:
|
||
|
||
- 展示明天策略
|
||
- 展示后续策略
|
||
- 展示条件判断语句
|
||
|
||
### 5.2.7 共振提示区
|
||
|
||
- `AnalysisResonancePanel.vue`
|
||
|
||
职责:
|
||
|
||
- 展示时间共振
|
||
- 展示空间共振
|
||
- 展示时空共振
|
||
- 展示风险/机会提示等级
|
||
|
||
### 5.2.8 图表区
|
||
|
||
- `AnalysisChartPanel.vue`
|
||
|
||
职责:
|
||
|
||
- 承载 K 线图
|
||
- 后续承载黄金分割尺、波浪尺、时间线
|
||
|
||
## 5.3 前端数据流设计
|
||
|
||
数据流必须保持 props down / events up。
|
||
|
||
推荐方式:
|
||
|
||
- `AnalysisWorkspace.vue` 持有查询状态
|
||
- 通过 `useAnalysisData.ts` 拉取接口
|
||
- 子组件只接收 props,不在子组件内部自行发请求
|
||
|
||
## 5.4 前端状态设计
|
||
|
||
建议在 composable 中维护以下状态:
|
||
|
||
- `query`
|
||
- `loading`
|
||
- `error`
|
||
- `symbol`
|
||
- `report`
|
||
- `chart`
|
||
|
||
建议使用:
|
||
|
||
- `shallowRef` 管理基础状态
|
||
- `computed` 管理派生展示字段
|
||
- `watch` 只处理副作用
|
||
|
||
---
|
||
|
||
## 6. 后端设计
|
||
|
||
## 6.1 后端模块拆分
|
||
|
||
### 6.1.1 Symbol Resolver
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/symbol_resolver_service.py`
|
||
|
||
职责:
|
||
|
||
- 将输入的 `000688`、`科创50`、`510300` 等解析为统一标的对象
|
||
- 生成标准 `secid`
|
||
- 判断标的类型
|
||
|
||
输出建议:
|
||
|
||
- 代码
|
||
- 名称
|
||
- 市场
|
||
- 标的类型
|
||
- `secid`
|
||
|
||
### 6.1.2 Market Data Service
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/market_data_service.py`
|
||
|
||
职责:
|
||
|
||
- 调用东方财富客户端拉取:
|
||
- 实时报价
|
||
- 日线
|
||
- 周线
|
||
- 60 分钟
|
||
- 90 分钟
|
||
- 120 分钟
|
||
|
||
说明:
|
||
|
||
当前 `eastmoney_client.py` 已具备 `fetch_stock_kline` 能力,可基于 `klt` 扩展不同周期。
|
||
|
||
建议周期映射:
|
||
|
||
- `101`: 日线
|
||
- `102`: 周线
|
||
- `60`: 60 分钟
|
||
- `90`: 90 分钟
|
||
- `120`: 120 分钟
|
||
|
||
若接口对 `90/120` 返回行为和实际行情工具不同,后端必须统一以实际返回的 K 线数据为准。
|
||
|
||
### 6.1.3 Indicator Engine
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/indicator_engine.py`
|
||
|
||
职责:
|
||
|
||
- 计算均线:
|
||
- `MA5`
|
||
- `MA13`
|
||
- `MA21`
|
||
- `MA34`
|
||
- `MA55`
|
||
- `MA89`
|
||
- 计算量能变化
|
||
- 计算背离辅助字段
|
||
|
||
### 6.1.4 ABC Engine
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/abc_engine.py`
|
||
|
||
职责:
|
||
|
||
- 识别每个周期的 A/B/C 点
|
||
- 输出主结构与次级结构
|
||
- 输出结构方向和有效性
|
||
|
||
识别输入:
|
||
|
||
- K 线数组
|
||
- 均线
|
||
- 成交量
|
||
- 局部高低点
|
||
- 趋势线断裂信息
|
||
|
||
识别输出:
|
||
|
||
- A 点时间与价格
|
||
- B 点时间与价格
|
||
- C 点时间与价格
|
||
- 结构方向
|
||
- 结构状态
|
||
- 识别理由
|
||
|
||
### 6.1.5 Fibonacci Engine
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/fibonacci_engine.py`
|
||
|
||
职责:
|
||
|
||
- 基于主波段计算黄金分割位
|
||
- 基于时间起点计算时间斐波那契
|
||
|
||
空间位固定为:
|
||
|
||
- `0.382`
|
||
- `0.618`
|
||
- `0.809`
|
||
- `1.0`
|
||
- `1.382`
|
||
- `1.618`
|
||
- `2.0`
|
||
- `2.618`
|
||
|
||
### 6.1.6 Resonance Engine
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/resonance_engine.py`
|
||
|
||
职责:
|
||
|
||
- 识别时间共振
|
||
- 识别空间共振
|
||
- 识别时空共振
|
||
- 识别 ABC 共振
|
||
- 输出提示等级
|
||
|
||
### 6.1.7 Analysis Service
|
||
|
||
文件建议:
|
||
|
||
- `backend/app/services/analysis_service.py`
|
||
|
||
职责:
|
||
|
||
- 协调 symbol resolver、market data、indicator、ABC、fibonacci、resonance
|
||
- 聚合形成最终 report
|
||
|
||
---
|
||
|
||
## 7. API 设计
|
||
|
||
## 7.1 标的解析接口
|
||
|
||
### `GET /analysis/resolve`
|
||
|
||
输入:
|
||
|
||
- `q`: 用户输入代码或名称
|
||
|
||
输出:
|
||
|
||
- 标的名称
|
||
- 代码
|
||
- 类型
|
||
- 市场
|
||
- secid
|
||
|
||
## 7.2 主分析接口
|
||
|
||
### `GET /analysis/report`
|
||
|
||
输入:
|
||
|
||
- `q`: 标的代码或名称
|
||
|
||
输出建议分为以下部分:
|
||
|
||
- `symbol`
|
||
- `snapshot`
|
||
- `cycles`
|
||
- `abc_structures`
|
||
- `fibonacci_space`
|
||
- `fibonacci_time`
|
||
- `resonance`
|
||
- `tomorrow_strategy`
|
||
- `follow_strategy`
|
||
- `calculation_steps`
|
||
|
||
## 7.3 图表数据接口
|
||
|
||
### `GET /analysis/chart`
|
||
|
||
输入:
|
||
|
||
- `q`
|
||
- `cycle`
|
||
|
||
输出:
|
||
|
||
- K 线数据
|
||
- 均线数据
|
||
- 成交量数据
|
||
- A/B/C 点
|
||
- 黄金分割位
|
||
- 时间斐波那契节点
|
||
|
||
说明:
|
||
|
||
这个接口主要服务图表层,避免把图形相关数据与 report 文本强耦合。
|
||
|
||
---
|
||
|
||
## 8. 数据结构设计
|
||
|
||
建议新增独立 schema 文件:
|
||
|
||
- `backend/app/api/analysis_schemas.py`
|
||
|
||
建议至少定义以下模型:
|
||
|
||
### 8.1 SymbolInfo
|
||
|
||
- `code`
|
||
- `name`
|
||
- `market`
|
||
- `security_type`
|
||
- `secid`
|
||
|
||
### 8.2 CycleSummary
|
||
|
||
- `cycle`
|
||
- `trend_label`
|
||
- `ma_status`
|
||
- `volume_status`
|
||
- `close`
|
||
- `ma_values`
|
||
|
||
### 8.3 AbcPoint
|
||
|
||
- `label`
|
||
- `timestamp`
|
||
- `price`
|
||
- `k_index`
|
||
|
||
### 8.4 AbcStructure
|
||
|
||
- `cycle`
|
||
- `direction`
|
||
- `status`
|
||
- `a_point`
|
||
- `b_point`
|
||
- `c_point`
|
||
- `reasoning`
|
||
|
||
### 8.5 FibonacciSpace
|
||
|
||
- `cycle`
|
||
- `anchor_start`
|
||
- `anchor_end`
|
||
- `levels`
|
||
- `current_position_summary`
|
||
|
||
### 8.6 FibonacciTime
|
||
|
||
- `cycle`
|
||
- `start_point`
|
||
- `current_count`
|
||
- `next_key_counts`
|
||
- `next_window_summary`
|
||
|
||
### 8.7 ResonanceItem
|
||
|
||
- `level`
|
||
- `type`
|
||
- `cycles`
|
||
- `summary`
|
||
- `bullish_or_bearish`
|
||
|
||
### 8.8 AnalysisReportResponse
|
||
|
||
- `symbol`
|
||
- `snapshot`
|
||
- `cycles`
|
||
- `abc_structures`
|
||
- `fibonacci_space`
|
||
- `fibonacci_time`
|
||
- `resonance`
|
||
- `tomorrow_strategy`
|
||
- `follow_strategy`
|
||
- `calculation_steps`
|
||
|
||
---
|
||
|
||
## 9. ABC 识别实现建议
|
||
|
||
## 9.1 识别流程
|
||
|
||
每个周期建议按以下步骤执行:
|
||
|
||
1. 预处理 K 线数据
|
||
2. 识别局部高点和低点
|
||
3. 结合均线和成交量过滤噪音波动
|
||
4. 识别趋势段
|
||
5. 候选 A 点识别
|
||
6. 回撤比例识别 B 点
|
||
7. 扩展位与时间位识别 C 点
|
||
8. 依据优先级选出主结构
|
||
|
||
## 9.2 主结构优先级
|
||
|
||
优先级建议如下:
|
||
|
||
1. 周线高于日线
|
||
2. 日线高于分钟线
|
||
3. 同级别中,波段完整度更高者优先
|
||
4. 同级别中,命中黄金位更多者优先
|
||
5. 同级别中,成交量配合更明显者优先
|
||
|
||
## 9.3 工程上的“零争议”
|
||
|
||
工程上定义为:
|
||
|
||
- 相同输入数据
|
||
- 相同识别规则
|
||
- 相同参数配置
|
||
|
||
必须得到相同的 A/B/C 识别结果。
|
||
|
||
这里强调的是:
|
||
|
||
- 结果稳定
|
||
- 规则固定
|
||
- 过程可解释
|
||
|
||
而不是主观层面的“所有交易者都认同”。
|
||
|
||
---
|
||
|
||
## 10. 黄金分割与时间斐波那契实现建议
|
||
|
||
## 10.1 空间计算
|
||
|
||
若上涨波段低点为 `L`,高点为 `H`,则回撤位:
|
||
|
||
```text
|
||
level = H - (H - L) × ratio
|
||
```
|
||
|
||
若为下跌反弹,则反向计算。
|
||
|
||
需要统一支持:
|
||
|
||
- 回撤测算
|
||
- 扩展测算
|
||
- 等幅测算
|
||
|
||
## 10.2 时间计数
|
||
|
||
时间起点优先来源于:
|
||
|
||
- 主结构 A 点
|
||
- 主波段起点
|
||
|
||
每个周期分别计数:
|
||
|
||
- `60`
|
||
- `90`
|
||
- `120`
|
||
|
||
关键时间数列固定为:
|
||
|
||
- `13`
|
||
- `21`
|
||
- `34`
|
||
- `55`
|
||
- `89`
|
||
|
||
---
|
||
|
||
## 11. 图表与绘图工具设计
|
||
|
||
## 11.1 当前状态
|
||
|
||
当前前端只有 SVG 趋势折线图组件,不具备 K 线和绘图工具能力。
|
||
因此,图表层需要新增独立实现。
|
||
|
||
## 11.2 第一版建议
|
||
|
||
第一版优先做:
|
||
|
||
- K 线图基础展示
|
||
- MA 线叠加
|
||
- 成交量
|
||
- A/B/C 点标记
|
||
- 黄金位横线
|
||
- 时间位竖线
|
||
|
||
## 11.3 第二版建议
|
||
|
||
第二版增加:
|
||
|
||
- 黄金分割尺
|
||
- 黄金扩展尺
|
||
- 波浪尺
|
||
- 趋势线
|
||
- 水平线
|
||
|
||
## 11.4 第三版建议
|
||
|
||
第三版增加:
|
||
|
||
- 用户拖拽修正
|
||
- 工具图层管理
|
||
- 联动重算
|
||
|
||
## 11.5 图表技术建议
|
||
|
||
当前项目没有图表依赖。
|
||
若要实现接近同花顺的体验,建议引入专业图表库或单独实现 K 线组件。
|
||
|
||
建议选择方向:
|
||
|
||
- 方案 A:引入专业轻量 K 线图表库,再叠加自定义图层
|
||
- 方案 B:完全自研 SVG/Canvas K 线组件
|
||
|
||
从开发效率看,优先建议方案 A。
|
||
|
||
---
|
||
|
||
## 12. 不影响其他模块的实现方案
|
||
|
||
为了避免影响现有功能,必须做到以下隔离:
|
||
|
||
## 12.1 前端隔离
|
||
|
||
- 新增 `analysis` 视图,不修改现有模块内部逻辑
|
||
- 新模块组件全部放在 `components/analysis/`
|
||
- 新模块数据逻辑全部放在 `useAnalysisData.ts`
|
||
- 不修改现有 `useEtfData.ts`、`useDashboardData.ts`、`useAShareData.ts`
|
||
|
||
## 12.2 后端隔离
|
||
|
||
- 新增 `/analysis/*` 路由
|
||
- 新增独立 schema
|
||
- 新增独立 service / engine
|
||
- 不修改原资金流 service 的输出结构
|
||
|
||
## 12.3 样式隔离
|
||
|
||
- 新页面使用独立命名空间 class
|
||
- 不污染现有首页与 ETF 页样式
|
||
|
||
## 12.4 运行风险隔离
|
||
|
||
- 新模块请求失败不影响现有模块渲染
|
||
- 新接口异常不影响原有 API 正常响应
|
||
|
||
---
|
||
|
||
## 13. 开发顺序建议
|
||
|
||
## 13.1 第一阶段
|
||
|
||
先完成:
|
||
|
||
- 首页新增入口
|
||
- 标的解析接口
|
||
- 主分析接口骨架
|
||
- 多周期 K 线数据拉取
|
||
- 均线与成交量分析
|
||
- 基础策略输出
|
||
|
||
## 13.2 第二阶段
|
||
|
||
再完成:
|
||
|
||
- ABC 引擎
|
||
- 黄金分割与时间斐波那契引擎
|
||
- 共振提示
|
||
- 页面各分析面板
|
||
|
||
## 13.3 第三阶段
|
||
|
||
最后完成:
|
||
|
||
- K 线图层
|
||
- 图形化叠加
|
||
- 黄金尺/波浪尺
|
||
- 手动修正联动重算
|
||
|
||
---
|
||
|
||
## 14. MVP 边界
|
||
|
||
建议首版上线范围控制为:
|
||
|
||
- 首页新增入口
|
||
- 输入代码分析
|
||
- 日/周/60/90/120 周期分析
|
||
- MA5/13/21/34/55/89
|
||
- 成交量摘要
|
||
- 黄金分割空间位
|
||
- 时间斐波那契计数
|
||
- A/B/C 自动识别第一版
|
||
- 明天策略 / 后续策略
|
||
- 共振提示
|
||
- 逻辑测算步骤
|
||
|
||
首版可以暂不要求:
|
||
|
||
- 同花顺级拖拽体验
|
||
- 完整波浪尺交互
|
||
- 图片导出
|
||
|
||
---
|
||
|
||
## 15. 可立即开始的开发项
|
||
|
||
从当前项目状态看,可以立即开始开发以下内容:
|
||
|
||
1. 首页新增入口与新视图
|
||
2. 后端新增 `/analysis/report` 接口
|
||
3. 标的解析与 K 线数据拉取
|
||
4. 均线、成交量、黄金位、时间位计算
|
||
5. 分析页面基础展示
|
||
|
||
这几项做完后,系统就会具备第一个可运行版本。
|
||
|
||
---
|
||
|
||
## 16. 结论
|
||
|
||
该功能已经具备进入开发阶段的条件。
|
||
|
||
最合理的落地方式不是一次性做完整终态,而是:
|
||
|
||
- 先做独立入口
|
||
- 再做分析引擎
|
||
- 再做页面展示
|
||
- 最后补图形化绘图工具
|
||
|
||
这样既能快速形成可运行版本,也能确保不影响现有功能模块。
|