InvestmentTracker 是一个基于 Tauri + Next.js + Rust 构建的 投资盈亏跟踪工具。
不同于传统的投资组合管理工具,它专注于:
- 📊 记录每笔交易 - 买入、卖出、减仓,清清楚楚
- 📈 实时盈亏分析 - 每只股票赚了多少,亏了多少,一目了然
- 💰 分批止盈管理 - 支持部分卖出,灵活控制仓位
- 🔒 隐私安全 - 所有数据存储在本地,完全离线
痛点: 市面上的投资工具要么功能复杂、要么需要授权账号、要么数据上云。
我只想要:
- ✅ 简单记录每笔买卖
- ✅ 清楚知道每只股票的盈亏
- ✅ 数据完全掌握在自己手里
所以做了 InvestmentTracker:
| 特性 | 说明 |
|---|---|
| 🎯 专注盈亏跟踪 | 不做复杂的资产配置,只做最核心的盈亏分析 |
| 💾 本地数据存储 | SQLite 数据库,数据完全隐私安全 |
| ⚡ 轻量高效 | Rust 后端驱动,快速响应 |
| 🎨 简洁易用 | 界面直观,上手即用 |
| 🆓 完全免费 | 开源项目,永久免费 |
- 查看所有持仓的完整信息
- 显示买入价、当前价、盈亏金额和盈亏比
- 支持买入范围和卖出范围的推荐建议
- 历史交易记录详情
- 股票信息自动获取:输入股票代码后自动获取股票名称和实时价格
- 股票代码规范化:自动统一为小写存储,确保数据一致性
- 支持创建和管理多个独立的投资组合
- 按策略分组管理不同的投资方案
- 每个组合独立统计盈亏
- 灵活的组合容量配置
这是工具的核心 - 清晰的盈亏分析
- 组合级统计:总盈亏、总成本、当前价值
- 股票级统计:每只股票赚了多少,亏了多少
- 交易明细:每笔买卖的盈亏,清清楚楚
- 买入日期、买入价格、数量
- 当前盈亏、盈亏比例
- 红色盈利、绿色亏损,一目了然
- 推荐建议:基于历史买入价的加仓/止盈参考点
灵活的仓位管理
- 完整平仓:卖出全部持仓,记录卖出价格和日期
- 灵活减仓:部分卖出持仓,支持分批止盈
- 快捷百分比选择(25%, 50%, 75%)
- 实时盈亏预览
- 自动拆分记录,保留交易历史
- "当前价"快捷填充:一键使用实时价格
- 智能关联:通过 parent_id 追踪持仓拆分关系
全面的交易绩效分析
- 交易列表:按卖出时间倒序显示所有已平仓交易
- 买入/卖出日期和价格
- 持有天数统计
- 盈亏金额和盈亏率
- 8项核心统计指标:
- 📈 总交易笔数
- 🎯 成功率(盈利笔数/总笔数)
- 💰 总盈亏金额
- 📊 平均盈亏率
- ⬆️ 最大盈利
- ⬇️ 最大亏损
- ⏱️ 平均持有天数
- ✅ 盈利/亏损笔数分布
- 智能配色:红色表示盈利,绿色表示亏损,一目了然
- 完整的交易历史记录
- 买入、卖出、平仓操作追踪
- 支持数据导入导出
前往 Releases 下载最新版本。
- 右键点击应用 → 选择"打开"
- 或:系统设置 → 隐私与安全 → 仍要打开
当前支持:
- ✅ macOS (Apple Silicon)
- 🚧 Windows / Linux (开发中)
- Node.js 18 或更高版本
- Rust 1.70 或更高版本
- npm 或 pnpm
- macOS / Windows / Linux
1. 克隆项目
git clone https://github.com/yourusername/InvestmentTracker.git
cd InvestmentTracker2. 安装依赖
npm install3. 启动开发模式
npm run devTauri 会自动启动 Next.js 前端(端口 3001)和桌面应用窗口。
4. 打开应用
- 桌面应用窗口会自动弹出
- 开始添加持仓记录
# 仅启动 Next.js 前端(用于 Web 调试)
npm run next:dev
# 构建生产版本
npm run build
# 代码检查和格式化
npm run lint
# Tauri 特定命令
npm run tauri
# 查看所有可用命令
npm runInvestmentTracker/
├── 📂 src/ # 前端应用(Next.js + React)
│ ├── app/ # Next.js App Router
│ │ ├── page.tsx # 主页面
│ │ ├── layout.tsx # 根布局
│ │ └── globals.css # 全局样式
│ ├── components/ # React 组件
│ │ ├── HomePage.tsx # 主页面组件
│ │ ├── PositionList.tsx # 持仓列表
│ │ ├── Portfolio.tsx # 投资组合视图
│ │ └── PortfolioProfitLossView/ # 盈亏视图(核心)
│ ├── lib/ # 工具库
│ │ ├── db.ts # Tauri 数据库 API
│ │ └── types.ts # TypeScript 类型定义
│ └── public/ # 静态资源
│
├── 📂 src-tauri/ # 后端应用(Rust + Tauri)
│ ├── src/
│ │ ├── main.rs # 应用入口
│ │ ├── db/ # 数据库模块
│ │ │ ├── mod.rs # 模块声明
│ │ │ ├── sqlite.rs # SQLite 连接管理
│ │ │ ├── portfolio_service.rs # 投资组合聚合服务
│ │ │ └── models.rs # 数据模型
│ │ ├── models/ # 数据模型定义
│ │ ├── error.rs # 错误处理
│ │ └── commands/ # Tauri 命令
│ └── Cargo.toml # Rust 依赖配置
│
├── 📂 docs/ # 项目文档
│ ├── project-structure.md # 详细项目结构说明
│ ├── storage-design.md # 数据存储设计
│ ├── code-review.md # 代码审查建议
│ └── screenshots/ # 应用截图
│
├── package.json # Node.js 项目配置
├── tsconfig.json # TypeScript 配置
├── tailwind.config.ts # Tailwind CSS 配置
├── next.config.ts # Next.js 配置
└── README.md # 本文件
| 技术 | 版本 | 用途 |
|---|---|---|
| Next.js | 15 | React 框架,App Router 路由 |
| React | 19 | UI 库 |
| TypeScript | 5.7 | 类型安全编程 |
| Tailwind CSS | 3.4 | 样式框架 |
| Shadcn/ui | 最新 | 高级 UI 组件库 |
| 技术 | 版本 | 用途 |
|---|---|---|
| Tauri | 2.2 | 桌面应用框架 |
| Rust | 1.70+ | 系统编程语言 |
| SQLite | 最新 | 轻量级数据库 |
- 🔐 数据安全:所有数据存储在本地,无云同步
- ⚡ 性能优化:Rust 驱动的后端提供高效的数据处理
- 📦 轻量级:应用大小优化,快速启动
- 🔄 实时更新:前后端通信实时响应
// 持仓记录
Position {
id: string; // 唯一ID
code: string; // 股票代码
name: string; // 股票名称
buy_price: number; // 买入价格
buy_date: string; // 买入日期
quantity: number; // 买入数量
status: string; // 状态:POSITION 或 CLOSE
portfolio: string; // 所属组合
sell_price?: number; // 卖出价格(可选)
sell_date?: string; // 卖出日期(可选)
parent_id?: string; // 父记录ID(减仓拆分关联)
}
// 盈亏计算(单笔交易)
PositionProfitLoss {
profit_loss: number; // 盈亏金额
profit_loss_rate: number; // 盈亏比例
}
// 股票级汇总
TargetProfitLoss {
code: string;
cost_position_rate: number; // 成本仓位占比
target_profit_loss: number; // 总盈亏
target_profit_loss_rate: number; // 盈亏比
recommended_buy_in_point: number; // 推荐买入点
recommended_sale_out_point: number; // 推荐卖出点
}
// 组合级汇总
PortfolioProfitLoss {
portfolio: string;
sum_position_cost: number; // 总持仓成本
sum_profit_losses: number; // 总盈亏
sum_profit_losses_rate: number; // 总盈亏比
}| 文档 | 内容 |
|---|---|
| 项目结构 | 详细的目录和文件说明 |
| 存储方案设计 | 数据库架构和 API 设计 |
| 代码审查 | 优化建议和最佳实践 |
React Component
↓
lib/db.ts (Tauri API)
↓
Tauri Commands (@tauri-apps/api/core)
↓
Rust Backend
↓
SQLite Database
- 定义数据类型:在
src/lib/types.ts添加 TypeScript 类型 - 实现 Rust 逻辑:在
src-tauri/src/编写后端代码 - 创建 Tauri 命令:在
src-tauri/src/commands/暴露接口 - 编写前端调用:在
src/lib/db.ts添加 API 方法 - 创建 React 组件:在
src/components/实现 UI
# 启用 Tauri 开发者工具
TAURI_DEBUG=true npm run dev
# 查看 Rust 编译错误
npm run tauri build
# 前端独立调试
npm run next:dev # 访问 http://localhost:3000- ✅ 持仓列表显示和管理
- ✅ 投资组合多组支持
- ✅ 盈亏视图和数据分析
- ✅ 自适应交易明细表格
- ✅ SQLite 数据持久化
- ✅ Tauri 桌面应用集成
- ✅ 股票信息自动获取(名称和实时价格)
- ✅ 股票代码规范化(统一小写存储)
- ✅ 投资组合智能选择(下拉选择+手动输入)
- ✅ 买入时间精确到天(不需要分钟精度)
- ✅ 灵活减仓功能(v0.1.1 新增)
- ✅ 完善平仓操作(v0.1.1 新增)
- ✅ 实时数据刷新(v0.1.1 新增)
- ✅ 持仓拆分追踪(v0.1.1 新增)
- ✅ 已平仓交易统计(v0.1.2 新增)
- ✅ 8项交易绩效指标(v0.1.2 新增)
- ✅ 持有天数自动计算(v0.1.2 新增)
- 🔜 数据导入导出(CSV/Excel)
- 🔜 图表和数据可视化
- 🔜 更多实时行情数据(完整的K线图、技术指标等)
- 🔜 批量操作功能
- 🔜 报表生成
- 🔜 备份和恢复
什么是单标满仓金额?
这是一个仓位管理策略的核心参数,表示每只股票最多投入的资金上限。
- 🎯 作用:风险控制,避免单只股票投入过多
- 📊 用途:计算每只股票占投资组合的仓位比例
- 💡 当前默认值:50,000 元
为什么需要这个参数?
举例:
- 设置单标满仓 = 5 万元
- 某股票投入 2 万元 → 仓位占比 40%
- 某股票投入 5 万元 → 仓位占比 100%(满仓)
如何选择合适的值?
| 总投资金额 | 建议单标满仓金额 | 说明 |
|---|---|---|
| 10 万以下 | 1-2 万元 | 分散风险,每只股票占比 10-20% |
| 10-50 万 | 5-10 万元 | 根据策略灵活调整 |
| 50-100 万 | 10-20 万元 | 更多选择,更分散配置 |
| 100 万以上 | 20-50 万元 | 根据个人策略自定义 |
如何修改?
当前版本(v0.1.2)的默认值为 5 万元,适合大多数个人投资者。
未来版本将支持在设置页面自定义此参数。如有需要,可以在 Issues 中提出建议。
Q: 数据会被上传到云端吗? A: 不会。所有数据都存储在本地 SQLite 数据库,完全离线,隐私安全。
Q: 支持哪些操作系统? A: 支持 macOS、Windows 和 Linux。Tauri 确保跨平台兼容性。
Q: 如何导入已有的投资记录? A: 目前支持手动添加。未来计划支持 CSV 导入功能。
Q: 可以同时管理多个投资组合吗? A: 完全支持。每个组合独立统计,互不影响。
Q: 应用多大?需要什么配置? A: 应用大小约 50-100MB,对系统要求很低。任何现代计算机都可以运行。
我们欢迎各种形式的贡献!
- 报告问题:提交 Issue 描述遇到的问题
- 功能建议:在 Discussions 中提出新功能想法
- 代码贡献:Fork 项目,提交 Pull Request
- 文档改进:改进文档的清晰度和完整性
# 1. Fork 项目
# 2. 创建功能分支
git checkout -b feature/AmazingFeature
# 3. 提交变更
git commit -m 'Add some AmazingFeature'
# 4. 推送到分支
git push origin feature/AmazingFeature
# 5. 开启 Pull Request本项目采用 MIT 许可证。详见 LICENSE 文件。
MIT 是目前最宽松、最流行的开源许可证之一。我们选择它是基于以下考虑:
- 完全免费使用:无论个人还是商业用途,都可以免费使用本工具
- 自由修改:你可以根据自己的需求修改代码,定制属于你的版本
- 可商业化:如果你愿意,甚至可以基于此项目开发商业产品
- 无强制开源:你的修改版本不需要开源(但我们鼓励贡献回社区)
- 低门槛参与:MIT 协议简单易懂,没有复杂的法律条款
- 灵活性高:你的贡献不会被限制在特定的使用场景
- 鼓励创新:允许基于此项目衍生出更多创新工具
- 降低使用门槛:让更多投资新手敢于尝试和使用
- 鼓励社区贡献:简单的协议更容易吸引开发者参与
- 建立技术品牌:开放的态度有助于项目长期发展
本项目按"原样"提供,不提供任何明示或暗示的保证。使用本工具进行投资决策的风险由用户自行承担。作者不对使用本软件产生的任何损失负责。
投资有风险,决策需谨慎。本工具仅用于记录和分析,不构成任何投资建议。
Deewooo
- GitHub: @Deewooo
- 项目链接: InvestmentTracker
感谢所有贡献者和用户的支持!
⭐ 如果这个项目对你有帮助,请给个 Star!
Made with ❤️ by Deewooo
版本: v0.1.2 | 最后更新: 2025-11-14