项目概览
日进斗金是一款面向个人使用的跨平台 ETF / ETF 期权桌面盯盘工具,支持 macOS 和 Windows。它负责持续采集行情、识别值得关注的市场变化,并通过系统通知、应用内浮窗和托盘入口提醒用户查看对应标的。
项目定位是 盯盘提醒与分析工具,而不是自动交易系统。信号用于提示“现在值得看一眼”,不会自动下单,也不把历史统计包装成确定性收益。
- 项目仓库:trade_etf_watcher
- 开发方式:Python 模块直接运行,或通过 PyInstaller 打包为 macOS App / Windows EXE
- 数据存储:行情、信号、期权快照和本地配置均保存在 SQLite
从 Ying+ 到本地盯盘工具
在日进斗金之前,我曾独立建设 Ying+ 多端个人投资应用:
- trade_ios:SwiftUI + WidgetKit iOS 客户端,包含验证码登录、行情、自选股、K 线和桌面组件;
- trade_admin:Vue 3 + TypeScript + Element Plus 管理后台,用于管理接口、任务和数据;
- trade_backend:FastAPI + PostgreSQL / TimescaleDB + Redis 后端,提供认证、行情、因子数据、调度和 AI 内容能力。
Ying+ 完成了多端技术链路,但继续面向公众推广会涉及行情数据授权、产品分发和政策合规边界,个人项目难以持续承担这些成本,因此停止继续产品化。代码保留为多端架构实践,不再把“上架和用户增长”作为目标。
后续我把需求收敛成无需账号体系、数据集中托管和公开运营的本地桌面工具:只解决自己每天确实需要的盯盘、提醒和期权分析问题。这次取舍让项目从“大而全的投资平台”转向边界清晰、可以完整交付的个人工具。
当前功能
行情与图表
- 通达信作为主行情源、东方财富作为备用源,约 5 秒完成一轮轮询;
- 自动探测可用节点,连接失败后切换并恢复;
- ECharts 展示分时、1 / 5 / 15 / 30 / 60 分钟和日 K;
- 支持 MA5 / MA10 / MA20、MACD、缩放、平移和十字光标;
- K 线通过独立窗口打开,不挤占主盯盘面板。
行情信号
- 14 类量价形态,包括放量跟随、量堆积启动、挤压突破和高位破位;
- 日内动量在固定时间提供尾盘方向参考;
- 8 类异动提醒,覆盖跳空、急涨急跌、探底回升、冲高回落、分钟级变化、IV 和 PCR 异常;
- 每个信号保留触发原因和输入数据,便于回看而不是只显示“买”或“卖”。
ETF 期权工具
- 期权 T 型报价覆盖 9 个标的、1200+ 合约;
- 展示买卖价量、隐含波动率、Delta 和持仓量;
- 提供波动率微笑与曲面、持仓分布、IV 期限结构等分析页面;
- 内置价差、跨式、蝶式、备兑等 7 个策略模板;
- 使用 Black-Scholes 计算理论价格和希腊字母,并生成到期损益图与时间损耗表;
- 每日保存期权快照,为 IV 和持仓量历史分析积累数据。
通知与交付
- macOS 原生通知支持点击后跳转到对应标的 K 线;
- 应用内浮窗与系统托盘提供相同跳转路径;
- API 密钥通过 GUI 或用户目录下的权限文件配置,不写入项目仓库和安装包;
- 已完成 macOS App 打包与启动验证,Windows 构建配置已准备。
系统架构
通达信主源 / 东财备用源 / Tushare 历史数据
↓
后台轮询与交易日历
↓
K 线聚合 / 量价形态 / 日内动量 / 异动检测
↓ ↓
SQLite 行情与信号 期权链与每日快照
↓ ↓
PySide6 桌面壳 + Vue 3 / ECharts 页面
↓
原生通知 / 浮窗 / 系统托盘
GUI 与行情采集线程分离:后台线程负责网络请求、计算和持久化,主线程只通过 Qt Signal 接收不可变结果并更新界面,避免轮询阻塞交互。前端页面使用 Vue 3 + TypeScript 构建后嵌入 QWebEngineView,Python 通过受控桥接调用完成数据渲染。
关键工程判断
1. 双数据源不是简单的失败重试
行情接口会出现节点不可达、单 IP 间歇拒绝、字段临时为空和盘中数据滞后。主源启动时探测可用节点并记录延迟,运行中断线重连;备用源只在主源不可用时限速兜底,避免高频请求反而触发更严格限制。
交易日、交易时段和午休窗口集中在统一日历模块判断,所有轮询任务复用同一套规则,避免每个数据源各自理解“现在是否应该有新行情”。
2. 信号必须经过回测,也必须公开失败结论
量价形态并非只凭经验设定。我为规则提供了多标的回测、参数扫描和特征诊断工具,并把手续费与基准收益纳入验证。
结果显示:部分量价买入形态在当前个股样本上没有表现出正期望;日内动量方向具有统计显著性,但标的单次平均幅度可能小于 ETF 期权买卖价差。因此当前版本把它们定位为方向参考和人工复核提醒,而不是机械交易依据。
项目保留这些负面结果,因为“知道规则在哪些场景无效”比只展示几次成功信号更重要。
3. 期权链需要同时解决实时与历史口径
实时 T 型报价、分钟 K、历史日 K 和合约元数据来自不同接口,代码、到期日和价格单位并不天然一致。系统在边界层统一合约编码、时间与数值口径,过滤零成交产生的全零 K 线,并在同一到期月份内选择策略腿,避免跨月组合让最大盈亏计算失真。
期权快照按交易日持久化,使波动率、持仓量和期限结构可以跨日比较,而不是只展示当前瞬间。
4. AI 能力要服从产品可信度
项目曾实现基于 DeepSeek 的结构化期权策略建议,能够组合行情、技术面、期权链和历史走势生成候选策略。经过产品边界评估后,当前界面主动移除了这一入口,底层实验代码仍保留。
原因是模型输出容易被误解为确定性交易建议,而盯盘工具的目标是呈现数据、触发提醒和辅助人工判断。对于无法稳定验证的能力,选择从用户界面撤下,而不是为了“有 AI”继续展示。
5. 桌面打包必须考虑 Web 与 Qt 两套运行时
应用同时依赖 Qt、WebEngine、ECharts 和本地 Python 模块。PyInstaller 配置显式包含 WebEngine 组件、前端构建产物及第三方数据文件;页面加载完成前到达的数据先按渲染函数去重入队,待 WebView ready 后补发最后一份,避免启动首轮行情被静默丢弃。
项目结果
- 完成从行情采集、信号分析、期权工具、桌面界面、通知到本地打包的完整链路;
- 支持 9 个 ETF 期权标的和 1200+ 合约的 T 型报价与分析;
- 建立可重复运行的回测、参数扫描和数据诊断工具,并根据负面结果主动收敛信号用途;
- macOS 版本已完成打包和启动验证,Windows 保留独立构建配置;
- 将停止产品化的 Ying+ 多端实践沉淀为清晰的技术演进,而不是继续维护无法合规推广的公共平台。
技术栈
Python 3.12 · PySide6 · Qt WebEngine · Vue 3 · TypeScript · ECharts · SQLite · pytdx · Tushare · akshare · PyInstaller
免责声明
本项目仅用于个人盯盘、数据分析和技术研究。行情可能延迟或间歇不可用,历史统计不代表未来表现,任何信号均不构成投资建议。