Important
本项目回测效果不尽人意,已停止维护。有实力的大佬可以发扬光大。
当前版本:0.2.4
StockChoosing 是一款基于 Rust + Tao/Wry + HTML/CSS/JavaScript 构建的本地桌面股票研究工具,面向 A 股与港股的行情查看、自选股管理、K 线分析、条件选股和 AI 研究辅助场景。
本项目仅用于行情展示与研究辅助,不构成任何投资建议,也不承诺收益。
-
行情工作台
- 查询 A 股、港股代码
- 展示现价、涨跌幅、开盘、最高、最低、昨收、成交量、成交额、换手率等信息
- 查看日 K / 周 K / 月 K
- 支持前复权与不复权 K 线
- Canvas 绘制 K 线、成交量与鼠标悬浮提示
-
自选股管理
- 添加、移除、刷新自选股
- 自动轮询刷新市场与自选股数据
- 默认展示常用指数与关注股票池
-
选股工具
- 支持导入 Excel 股票池
- 内置可导出的选股模板
- 支持换手率、市值、板块、概念、行业等条件筛选
- 支持均线多头、MACD 日线金叉、KDJ 日线金叉等技术条件
- 支持单股诊断、保存筛选结果、导出诊断结果、导入/导出筛选方案
-
AI 研究助手
- 支持 OpenAI-compatible API
- 可保存 Base URL、模型名和 API Key
- 支持把当前股票加入研究上下文
- 支持「分析当前股票」「今日关注」「多股对比」「候选池诊断」「观察计划」任务
- 任务运行时显示规划、收集数据、分析和完成等进度
- 支持候选卡片展示理由、来源与观察条件,并可打开行情、加入自选或加入对比
- 支持多股票横向对比、走势分析、风险提示与观察条件总结
-
本地桌面体验
- 基于 Wry 内嵌 WebView
- 支持明亮 / 深色主题
- UI 资源从本地
ui/目录加载 - 配置保存在用户目录
%LOCALAPPDATA%\\StockChoosing\\stockchoosing.toml,避免安装目录无权限导致保存失败
| 模块 | 技术 |
|---|---|
| 桌面窗口 | tao, wry |
| 后端逻辑 | Rust |
| 前端界面 | HTML, CSS, JavaScript |
| HTTP 请求 | reqwest |
| 配置与序列化 | serde, serde_json, toml |
| Excel 导入导出 | calamine, rust_xlsxwriter |
| AI Agent | rig-core + OpenAI-compatible API |
| 异步/任务 | tokio, futures, 标准线程 |
- Rust 1.75+ 推荐
- Windows / macOS / Linux
- Windows 环境建议安装 Microsoft Edge WebView2 Runtime
- 如需 AI 助手功能,需要可用的 OpenAI-compatible API Key
# 进入项目目录
cd C:\Users\30109\Desktop\StockChoosing
# 运行桌面应用
cargo run运行后会打开桌面窗口,默认加载配置中的股票和市场指数。
cargo testcargo build --release生成的可执行文件位于:
target/release/StockChoosing.exe
发布时请确保可执行文件旁边包含以下资源:
ui/
templates/
docs/
stockchoosing.toml
仓库中已有 release/ 目录,可作为 Windows 发布包示例参考。
安装包使用 Inno Setup 生成。Windows 环境下可运行:
.\scripts\build-installer.ps1脚本会执行 release 构建、复制运行资源到 release/StockChoosing-win-x64/,并在 dist/ 下生成安装程序:
dist/StockChoosing-Setup-0.2.4-win-x64.exe
如已手动完成 release 构建或资源复制,可使用脚本参数跳过对应步骤:
.\scripts\build-installer.ps1 -SkipCargoBuild
.\scripts\build-installer.ps1 -SkipReleaseCopy安装版会优先读取用户目录 %LOCALAPPDATA%\\StockChoosing\\stockchoosing.toml,开发环境也可读取项目根目录下的 stockchoosing.toml 作为初始模板。
示例:
default_symbol = "sh600519"
kline_limit = 120
poll_interval_secs = 15
indices = ["sh000001", "sz399001", "sz399006"]
watchlist = ["sh600519", "hk00700", "sz300750", "sz002594", "sz000001", "sh600036"]
[ai]
base_url = "https://api.example.com/v1"
model = "gpt-5.5"
api_key = ""
temperature = 0.2
[screener]
default_scheme = "默认方案"
recent_file = ""
online_enrichment = true
cache_ttl_secs = 3600
export_dir = ""| 配置项 | 说明 |
|---|---|
default_symbol |
启动后默认展示的股票代码 |
kline_limit |
K 线加载条数 |
poll_interval_secs |
自动刷新间隔,单位秒 |
indices |
首页展示的市场指数 |
watchlist |
默认自选股列表 |
ai.base_url |
OpenAI-compatible API 地址 |
ai.model |
AI 模型名 |
ai.api_key |
API Key,可在应用内保存 |
screener.default_scheme |
默认选股方案名称 |
screener.recent_file |
最近导入的 Excel 文件路径 |
screener.export_dir |
结果导出目录,留空则由应用选择 |
支持多种常见输入格式:
| 市场 | 示例 |
|---|---|
| A 股上海 | 600519, sh600519, 600519.SH |
| A 股深圳 | 000001, sz000001, 000001.SZ |
| 港股 | 700, 00700, hk00700 |
系统会自动标准化为内部代码格式,例如:
600519->sh600519000001.SZ->sz000001700->hk00700
- 打开应用左侧「选股」。
- 点击「导出模板」,保存
StockChoosing_选股导入模板.xlsx。 - 在模板第一个工作表「股票数据模板」中填写股票池。
- 回到应用,点击「选择」或直接填写 Excel 路径后点击「导入 Excel」。
- 如需补充实时行情与技术指标,点击「载入当前股票与自选股」。
- 设置换手率、市值、板块/概念/行业、技术条件等筛选项。
- 点击「开始分析」查看通过股票与未通过原因。
- 输入单只股票代码后点击「诊断」,可查看该股票逐项诊断结果。
- 使用「保存结果」「导出诊断」「导入方案」「导出方案」完成结果管理。
更多说明见:
docs/选股工具使用教程.md
内置模板位于:
templates/StockChoosing_选股导入模板.xlsx
股票代码为必填列,可使用600519、sh600519、000001.SZ、hk00700、700等格式。股票名称可选,留空时会用股票代码显示。- 数值支持普通数字、百分比和中文单位,例如
2.5、12.3%、50亿、3200万。 - 是否类字段支持
是/否、true/false、1/0。 - 板块、概念、行业支持多个标签,可用逗号、顿号、斜杠或分号分隔。
- 空白字段可以导入;如果启用了对应筛选条件,系统会在结果中提示“未补全”。
进入「研究助手」页面后:
- 展开「AI 设置」。
- 填写 API Key、Base URL 和模型名。
- 点击「保存设置」。
- 在行情页选择股票后点击「加入研究助手」,或在助手页点击「加入当前股票」。
- 输入问题,或使用快捷任务进行走势分析、今日关注、多股对比、候选池诊断和观察计划。
研究助手会先在本地收集当前股票、上下文股票、自选股、筛选结果、新闻线索与行情 K 线,再调用模型生成结论。任务面板会显示当前阶段;候选卡片可直接打开行情、加入自选或加入对比上下文。
AI 接口要求兼容 OpenAI API 格式。
- 行情与 K 线:腾讯公开行情接口
- AI 分析:用户配置的 OpenAI-compatible 服务
- Excel 数据:用户本地导入文件
- AI 请求流式失败时自动降级到普通请求。
- 优化 API 连接失败、超时、TLS 握手失败时的错误提示。
- 修复安装版 AI 设置保存失败的问题,配置改为写入
%LOCALAPPDATA%\StockChoosing\stockchoosing.toml。 - 默认 OpenAI-compatible Base URL 改为
https://api.example.com/v1。 - 默认模型改为
gpt-5.5。 - 保存 AI 设置后前端会回显实际保存的 Base URL 和模型。
- 修复「今日关注」新闻只解析到板块方向时候选为空的问题。
- 今日关注会从当前股票、Agent 上下文、自选股和筛选结果补充真实候选,避免空跑。
- 回答会区分新闻方向与本地候选来源。
- 将 AI Agent 升级为可观察的研究助理工作流。
- 新增任务进度事件、流式阶段性回答、候选卡片和观察计划展示。
- 新增 Agent 快捷任务:分析当前股票、今日关注、多股对比、候选池诊断、观察计划。
- 候选卡片支持理由、来源、观察条件,并可快速打开行情、加入自选、加入对比。
- 同步 Windows 安装器版本号与打包说明。
StockChoosing/
├─ Cargo.toml # Rust 项目与依赖配置
├─ Cargo.lock
├─ stockchoosing.toml # 本地应用配置
├─ README.md
├─ docs/
│ └─ 选股工具使用教程.md
├─ templates/
│ └─ StockChoosing_选股导入模板.xlsx
├─ src/
│ ├─ main.rs # 应用入口、窗口、IPC 与业务调度
│ ├─ api.rs # 行情与 K 线接口
│ ├─ ai.rs # AI Agent 封装
│ ├─ config.rs # 配置读取与保存
│ ├─ screener.rs # Excel 选股、诊断、导出
│ └─ stock_code.rs # 股票代码标准化
├─ ui/
│ ├─ index.html
│ ├─ assets/
│ ├─ scripts/
│ │ ├─ app.js
│ │ ├─ ipc.js
│ │ ├─ market.js
│ │ ├─ screener.js
│ │ ├─ agent.js
│ │ ├─ chart.js
│ │ ├─ state.js
│ │ └─ theme.js
│ └─ styles/
└─ release/ # 发布包示例
请确认运行目录中存在 ui/ 文件夹。开发环境下建议在项目根目录执行:
cargo run可能原因:
- 网络无法访问行情接口
- 股票代码格式错误
- 行情源临时不可用
可先尝试输入标准代码,例如 sh600519、sz000001、hk00700。
请检查:
- API Key 是否正确
- Base URL 是否为 OpenAI-compatible
/v1地址 - 模型名是否可用
- 当前网络是否可访问该 API 服务
说明模板中缺少对应字段,或字段名称无法匹配。请优先使用应用内「导出模板」生成的标准模板填写。
StockChoosing 仅用于市场数据展示、条件筛选和研究辅助。行情数据、AI 输出和筛选结果都可能存在延迟、错误或遗漏,不构成投资建议、买卖建议或收益承诺。任何投资决策均需用户独立判断并自行承担风险。