# 基金收益可视化 **Repository Path**: sword-chopper/VSTP ## Basic Information - **Project Name**: 基金收益可视化 - **Description**: VSTP (Visualization of Stock Trading Profits) - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-04-22 - **Last Updated**: 2026-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基金实时估值监控系统 基于 PyQt5 开发的基金实时估值监控工具。支持多数据源实时获取基金估算净值与涨跌幅,基于多分组管理和自定义持仓资金计算组合加权涨跌幅与当日估算收益。集成 AI 大模型分析功能,支持云端 API 和本地模型,提供两级分析(市场诊断 + 交易决策)与量化信号辅助。 ## 项目架构 ``` src/ ├── main.py # 应用入口 ├── config/ │ └── settings.py # 常量 / 默认值 / 列定义 / 量化信号参数 ├── core/ │ └── models.py # 基金数据模型 ├── services/ │ ├── base_fetcher.py # 抽象基类 (策略模式) │ ├── calculator.py # 加权涨跌幅 & 收益计算(支持等权) │ ├── fund_service.py # 门面服务 │ └── fetchers/ │ ├── tiantian.py # 天天基金 │ ├── tencent.py # 腾讯财经 │ ├── akshare.py # AKShare │ └── baostock.py # Baostock ├── analyst/ # AI 大模型分析模块 │ ├── models.py # 数据模型 │ ├── base.py # 抽象基类 │ ├── factory.py # 提供商工厂 + Analyst 封装 │ ├── context.py # 上下文构建器 │ ├── worker.py # QThread 后台 Worker │ ├── prompts/ # 提示词模板 │ └── providers/ │ ├── openai.py # OpenAI 兼容 API │ └── ollama.py # 本地 Ollama 模型 ├── analyst/trade/ # 量化交易分析模块 │ ├── orchestrator.py # 两级 LLM 编排(市场诊断 + 交易决策) │ ├── signal_calculator.py # 量化信号计算 (S1~S4) │ ├── trade_context.py # 交易上下文 & 买入记录增强 │ ├── trade_models.py # 交易数据模型 │ └── trade_worker.py # QThread 后台分析 Worker ├── storage/ │ └── repository.py # JSON 持久化 + 分组数据迁移 ├── workers/ │ └── fetch_worker.py # QThread 后台数据获取 └── ui/ ├── main_window.py # 主窗口 (多分组) ├── dialogs/ │ ├── fund_analysis.py # 基金综合分析(K线图 + AI量化 + 建议) │ ├── fund_detail.py # 买入明细(展示当前盈亏状态) │ ├── fund_manager.py # 基金管理 │ ├── group_manager.py # 分组管理 │ ├── investment.py # 收益管理(展示总盈亏) │ ├── history_chart.py # 历史净值走势图 │ ├── llm_settings.py # AI 模型设置 │ ├── prompt_editor.py # 提示词编辑器 │ ├── analysis_result.py # 分析结果展示 │ └── trade_suggestion.py # 一键交易建议 └── widgets/ ├── fund_table.py # 可复制表格 + 长按拖拽排序 └── checkbox_delegate.py # 居中复选框委托 ``` ## 核心功能 - **多数据源**: 天天基金 / 腾讯财经 / AKShare / Baostock,可自由切换组合 - **分组管理**: 新建 / 删除 / 重命名分组,不同组可包含相同基金代码 - **组内排序**: 支持按基金代码或持仓收益率排序 - **分组折叠**: 每组可独立折叠 / 展开 - **拖拽排序**: 长按 0.8 秒后拖拽整行调整顺序 - **持仓收益**: 多笔买入记录加权平均成本净值计算持仓涨跌幅 - **收益管理**: 自定义参与计算的基金与持仓涨跌幅参与标记 - **加权涨跌幅**: 按投资金额加权计算组合涨跌幅;无投入基金自动等权平均 - **数据持久化**: JSON 存储于 `%APPDATA%/FundMonitor/app_data.json`,自动迁移旧版数据 ### AI 大模型分析 - **整体投资组合分析**: 一键分析整个分组持仓 - **单基金综合分析**: 双击基金打开综合详情界面(K线图 + AI 量化分析) - **两级分析流程**: - **阶段一(市场诊断)**: 分析当前持仓状态,给出 0~10 分量化评分 - **阶段二(交易决策)**: 结合诊断结果给出具体买卖建议(加仓/持有/减仓/止损) - **量化信号辅助** (S1~S4): - **S1 均线排列**: EMA5/EMA10/EMA20 排列形态评分 - **S2 回撤深度**: 当前净值偏离年内高点的程度 - **S3 RSI 超买超卖**: 14 日 RSI 超买/超卖评分 - **S4 MACD 动量**: MACD 金叉死叉动能力度评分 - **多模型支持**: OpenAI 兼容 API(DeepSeek / 通义千问 / 智谱等)或本地 Ollama 模型 - **自定义提示词**: 可编辑系统提示词模板,自定义分析风格 - **基金综合分析界面**: 内置 K 线图,展示入场/止损/止盈参考线,支持缩放平移 ### 基金综合分析界面 - **K 线图**: 展示基金历史净值走势,红涨绿跌(国内标准配色) - **参考线**: - **入场线**(蓝色): 显示买入成本价与预期获利百分比 - **止损线**(橙色): 参考止损价位 - **止盈线**(绿色): 参考止盈价位 - 标签固定在视图右边缘,缩放平移时自动跟随 - **量化评分**: 四个维度(均线/回撤/RSI/MACD)综合打分,不受 LLM 输出干扰 - **AI 诊断**: 自动分析持仓合理性,给出操作建议 - **后续计划**: 针对不同涨跌幅情景给出应对方案 ### 其他功能 - **导出/导入**: 导出数据时可选择是否包含 API Key - **打包为 EXE**: 通过 PyInstaller 一键打包,生成独立可执行文件 ## 快速使用 ```bash # 安装依赖 pip install PyQt5 requests akshare baostock openai markdown pyqtgraph numpy # 启动 python main.py ``` > AKShare / Baostock 为可选依赖;仅使用天天基金 / 腾讯财经时无需安装。 > openai 为 AI 分析云端 API 的依赖,使用本地 Ollama 模型时无需安装。 ## AI 分析配置 1. 点击菜单 `AI → 模型设置...`(快捷键 `Ctrl+,`) 2. 在「云端 API」选项卡中选择供应商(DeepSeek / OpenAI / 通义千问 / 智谱等) 3. 填写 API Key 并选择模型 4. 在「提示词模板」选项卡中可自定义分析风格 5. 也可勾选「使用本地模型」切换到 Ollama 本地模型 ## 基金综合分析使用 1. 在主窗口双击任意基金,或选中后右键选择「综合分析」 2. 界面分为上中下三区: - **上方**: 基金基本信息 + 量化评分 - **中部**: K 线图(带参考线,支持鼠标滚轮缩放、拖拽平移) - **下方**: AI 市场诊断 + 交易建议 + 后续计划 3. 点击「重新分析」可触发新一轮 AI 分析 ## 打包为可执行文件 ```bash pip install pyinstaller pyinstaller main.spec ``` 生成 `dist/FundMonitor.exe`。 ## 开发指南 ### 新增数据源 1. 在 `src/services/fetchers/` 中创建文件,继承 `BaseFetcher` 2. 实现 `fetch(fund_code)` 方法 3. 在 `src/services/fund_service.py` 的 `_fetcher_map` 注册 4. 在 `src/config/settings.py` 的 `ALL_SOURCES` 添加名称 ### 添加新列 1. 在 `src/config/settings.py` 的 `COLUMN_DEFS` 中追加 2. 在 `src/ui/main_window.py` 的 `_populate_group_table()` 中填充数据 ### 添加新 AI 供应商 1. 在 `src/analyst/providers/` 中创建文件,继承 `BaseModelProvider` 2. 实现 `analyze(request)` 方法 3. 在 `src/ui/dialogs/llm_settings.py` 的 `PROVIDER_OPTIONS`、`PRESET_BASE_URLS`、`PROVIDER_MODELS` 中添加 ### 新增量化信号 1. 在 `src/analyst/trade/signal_calculator.py` 中添加信号计算方法 2. 在 `TOTAL_SCORE_MAP` 中注册信号名称与权重 3. 在 `src/config/settings.py` 中配置信号参数