FundApp 是一款基于 Python 与 PySide6 (Qt6) 开发的高可用、低延迟、现代化场外基金监控与量化回测系统。项目采用微软 Fluent Design(流畅设计)风格界面,旨在为个人投资者与量化交易爱好者提供全方位的基金筛选、实时估值雷达、周期板块监控、以及基于**遗传算法(Genetic Algorithm)**的网格回撤买入回测寻优工具。
- 历史净值多链路降级:当默认数据源失效或因网络请求频繁被限制时,系统在毫秒级内自动切换。降级链路:天天基金移动端 API ➔ 天天基金网页端 F10 ➔ AkShare ➔ Tushare。
- 实时估值四重保障:支持多渠道实时降级估值抓取。降级链路:天天基金 ➔ 新浪财经 ➔ 腾讯财经 ➔ 网易财经。
- 向量化回测引擎:底层的
run_backtest策略计算采用 NumPy 向量化计算 + C-level 级原生 Python 列表物理原位访问优化,大幅规避 NumPy 索引带来的单元素包装开销,实现物理级的超低计算延迟。 - 种群自动进化:通过遗传算法对回看天数 (
buy_days)、跌幅阈值 (buy_drop)、目标收益率 (target_profit) 三维参数空间进行迭代演化(包含锦标赛选择、交叉变异、精英保留),自动寻找历史胜率与平均收益最优的网格交易参数。 - 🚀 多进程加速引擎:集成
ProcessPoolExecutor多进程并行计算技术,榨干多核 CPU 算力,并行对数百只自选基金进行快速参数调优,并采用单线程队列写回 SQLite,完美规避数据库写锁冲突。
- 圆角渐变启动闪屏:精美的启动闪屏 (
StartupSplashScreen) 实时反馈初始化进度,杜绝由于重量级组件导入或数据读取导致的白屏或未响应问题。 - 静默缓存加载:将 4 万多条全市场基金字典(拼音/缩写/代码/名称)放入后台守护线程异步解析,主线程“秒开”就绪。
- 7天自动更新与 HEAD 嗅探:本地
funds_registry_cache.json采用 7 天静态缓存失效自动更新,并结合轻量级 HTTP HEAD 请求探测远程文件最后修改时间,按需更新,节省网络开销。
- 流畅设计风:基于
qfluentwidgets风格,支持亚克力半透明质感,拥有平滑顺畅的过渡动画和统一的主题设计。 - 明暗主题无缝一键切换:支持 Light / Dark 明暗模式,并自适应调整表格单元格前背景色及图表组件颜色。
- 本地拼音/缩写全市场联想搜索:支持拼音首字母缩写(如
bj搜“白酒”)、中文名称、基金代码的多模式快速智能搜索添加。
- 📌 特别关注 (SpecialAttentionTab):对核心关注的少数基金实施更高密度的监控,高亮重要买卖信号。
- 💖 自选基金 (MyFundsTab):用户核心自选看板,支持添加/置顶/特别关注、直接展示最优参数、昨日实际净值与今日实时估值对比,并计算近
N日跌幅与近M月百分位。 - 📊 ETF涨跌榜 (RankingTab):全市场宽基及细分板块场外 ETF 涨跌幅排行,集成智能板块去重与同质化过滤机制,保证展示结果的多元化。
- 🧭 估值榜 (ValuationTab):抓取全市场指数的 PE/PB 绝对值与百分位分布,构建估值冷热雷达("PE高"、"PE低"、"PB高"、"PB低"),并自动匹配出流动性与费率最优的场外联接基金。
- 📅 周期榜 (CycleBoardTab):精选生猪养殖、半导体存储、煤炭能源、有色金属、白酒消费、基建建材、证券金融、新能源光伏等强周期性行业基金,展示当前周期位置(如“萧条筑底期”、“复苏拉升期”、“繁荣后期”)与直观的投资参考建议。
- 🤖 策略中心 (StrategyCenterTab):核心量化功能区。支持单只/批量基金的回测与遗传算法参数寻优,提供交互式寻优进度条,直观展示历史买入卖出信号散点图、净值回测曲线以及调优报告。
- GUI 框架:
PySide6(Qt 6.x) - 组件库:
qfluentwidgets(微软流畅设计组件库) - 数学计算与量化:
numpy,pandas,scipy - 数据抓取与源接口:
requests,akshare,tushare(降级备用) - 数据库与存储:
sqlite3(sqlite封装网关),json
确保您的计算机上已安装 Python 3.8 及以上版本。
# 克隆仓库
git clone <your-repository-url>
cd fund_app
# 安装核心依赖
pip install -r requirements.txt备用安装命令(不带可选数据源):
pip install PySide6 qfluentwidgets requests numpy pandas
python main.py如需打包成无 Python 环境的本地 .exe 文件,推荐使用 PyInstaller:
pyinstaller --noconsole --name="FundApp" --icon=logo.ico main.py打包注意事项:本应用代码结构原生支持打包环境 (
sys.frozen嗅探),配置文件my_funds.json会自动创建在程序运行所在的目录中。
fund_app/
├── main.py # 程序总入口(安装Qt消息拦截、控制启动闪屏与主窗口秒开逻辑)
├── core/ # 核心逻辑层
│ ├── __init__.py
│ ├── config.py # 全局持久化配置文件路径解析 (支持打包 exe 路径适配)
│ ├── data_gateway.py # 多级容灾降级数据抓取网关 (天天基金/新浪/腾讯/网易/AkShare/Tushare)
│ ├── db_manager.py # SQLite 本地净值和回测参数数据库管理器 (SQLite3)
│ ├── threads.py # 后台并发多线程任务库 (多进程参数寻优、数据并发获取、雷达抓取)
│ └── utils.py # 全局工具函数 (板块正则提取、缓存管理、拼音模糊搜索)
├── ui/ # 界面展示层
│ ├── __init__.py
│ ├── splash_screen.py # 带有动态进度条的渐变圆角启动闪屏
│ ├── main_window.py # Fluent风格主窗体与控制器 (业务分发/信号管理)
│ ├── table_model.py # MVC 模式的自定义 TableModel、过滤器 ProxyModel 及表格 Delegate
│ ├── widgets.py # 辅助交互控件 (配置弹窗、趋势图表弹窗、回测进度吐司)
│ └── tabs/ # 各个具体的子标签页视图
│ ├── base_tab.py # 抽象表格 Tab 页面基类 (统一搜索、刷新、表头构建、右键菜单)
│ ├── special_attention_tab.py # 特别关注 Tab
│ ├── my_funds_tab.py # 自选基金 Tab
│ ├── ranking_tab.py # 排行榜 Tab
│ ├── valuation_tab.py # 估值榜 Tab
│ ├── cycle_board_tab.py # 周期榜 Tab
│ └── strategy_center_tab.py # 策略中心 Tab
│ └── other_funds_tab.py # 其他 Tab
├── fund_history.db # 自动创建的本地历史数据和寻优结果 SQLite 数据库
├── my_funds.json # 自选配置、列隐藏、展示周期及主题参数
├── funds_registry_cache.json # 全市场基金注册信息字典本地缓存 (自动维护)
└── requirements.txt # 项目依赖列表
该软件核心内置的量化策略为**“回撤反弹买入策略”**:
-
买入触发:以当前时间点往前推
buy_days天,计算这段时间内的最高基金净值$Max_{nav}$ 。若当天的基金估值/净值$Current_{nav}$ 相比于该最高值回撤比例达到$buy_drop%$ , 即:$$\frac{Current_{nav} - Max_{nav}}{Max_{nav}} \le -buy_drop%$$ 则触发买入信号。 -
止盈卖出:持有该份额期间,如在
hold_max天之内,收益率相比于买入净值达到$target_profit%$ , 且为覆盖基金赎回费的惩罚(国内场外基金持有不满 7 天收取 1.5% 惩罚性赎回费),若持有期少于 7 天,系统自动增加 1.5% 止盈要求,达到目标即刻触发止盈出局。 -
到期强制卖出:如在最大持有天数
hold_max(系统默认为 90 天)到期后仍未达到止盈目标,则以当天的净值进行强制卖出结算。
系统能够利用遗传算法 (GA),在给定的历史区间内自动调整
如果您在运行或使用过程中遇到任何问题,欢迎在 GitHub 上提交 Issue 或发起 Pull Request!