Skip to content

knrlos/chicang

Repository files navigation

持仓盈亏 (chicang)

跨平台、轻量、无登录的个人持仓盈亏跟踪工具。 A 股 / 港股 / 美股 / 场内基金 / 场外基金 一页看完,不带分析、不带社区、不带广告。

License Cloudflare Pages Stack


这是什么

做股票基金这几年,账户越开越多——A 股同花顺、港美股富途/老虎、基金天天基金/支付宝。 每次想知道「现在到底赚还是亏」,要打开 4 个 App 算半天。

雪球能合一起看,但社区噪音 + 推送 + AI 推荐我都不想要。我只想要一眼盈亏。

所以做了这个。

特性

  • 🌏 跨市场:A 股 / 港股 / 美股 / 场内基金 / 场外基金 一个池子
  • 💱 多币种:原币种各自显示 + 实时汇率折算人民币算总账
  • 📈 走势图:分时 / 日K / 周K / 月K 自由切换(klinecharts)
  • 📷 OCR 截图导入:截一张券商持仓截图,AI 自动识别批量录入
  • 💾 数据完全本地:localStorage + IndexedDB,无账户、无登录、无云同步
  • 🔄 JSON 导入导出:换设备一键迁移
  • 📱 PWA 响应式:桌面双栏 + 手机单列,可装到主屏离线打开
  • 🎨 涨跌配色可切:默认红涨绿跌,国际习惯也支持
  • 🚫 无分析、无社区、无广告、无埋点

截图

截图待补充。Fork 部署后可访问 demo 体验。

技术栈

类别 技术
构建 Vite 8
框架 React 19 + TypeScript 6
样式 TailwindCSS 4
状态 Zustand 5(含 persist middleware)
K线图 klinecharts 9
PWA vite-plugin-pwa 1
后端 Cloudflare Pages Functions(无数据库)
AI Cloudflare Workers AI - @cf/meta/llama-3.2-11b-vision-instruct
部署 Cloudflare Pages(前端 + Functions 同仓)
包管理 pnpm 10

数据源

市场 / 数据 上游
A 股 / 港股 / 美股 / 场内基金 实时行情 新浪 hq.sinajs.cn
股票 K 线 新浪 money.finance.sina.com.cn
场外基金估值 天天基金 fundgz.1234567.com.cn
场外基金历史净值 天天基金 fund.eastmoney.com/pingzhongdata
汇率 jsdelivr @fawazahmed0/currency-api

全部通过 Cloudflare Workers 代理(绕 CORS),开 5s / 60s / 12h 三档边缘缓存。

都是公开接口,不保证 100% 稳定。哪天断了欢迎 PR 补救。

本地开发

需要 Node 20+ 和 pnpm 10+。

git clone https://github.com/knrlos/chicang.git
cd chicang
pnpm install

# 纯前端开发(不含 Functions)
pnpm dev
# → http://localhost:5173

# 前后端联调(含 Cloudflare Pages Functions)
pnpm wrangler pages dev --local
# → http://localhost:8788

# 生产构建
pnpm build

部署到 Cloudflare Pages

完整步骤见 DEPLOY.md,简要:

  1. Fork 本仓库到你自己的 GitHub
  2. Cloudflare Dashboard → Workers & Pages → Connect to Git → 选你 fork 的仓库
  3. 构建命令 pnpm install && pnpm build,输出目录 dist
  4. Settings → Functions → AI bindings 加 AI(OCR 功能必需)
  5. 想要自定义域名 → Custom domains 绑上

零运维,全免费额度内运行。

项目结构

chicang/
├── src/
│   ├── components/        # UI 组件
│   │   ├── layout/        # AppLayout / TopBar / Desktop/MobileLayout
│   │   ├── holdings/      # 持仓列表/表单/卡片/OCR
│   │   ├── chart/         # K 线相关
│   │   ├── settings/      # 设置抽屉
│   │   ├── common/        # Modal / ConfirmDialog / Toast
│   │   ├── providers/     # ThemeProvider
│   │   └── pwa/           # InstallPrompt
│   ├── stores/            # Zustand stores
│   ├── lib/
│   │   ├── api/           # 客户端 fetch 封装
│   │   ├── calc/          # 盈亏 / 总市值计算
│   │   ├── chart/         # klinecharts 主题
│   │   ├── hooks/         # 自定义 hooks
│   │   ├── idb.ts         # IndexedDB 封装
│   │   ├── marketRules.ts # 市场规则
│   │   └── marketHours.ts # 交易时段
│   └── types/
├── functions/             # Cloudflare Pages Functions(后端)
│   ├── _middleware.ts     # CORS
│   ├── lib/               # cache / response / sinaParser / visionPrompt
│   └── api/
│       ├── quote.ts       # 股票行情
│       ├── kline.ts       # K 线
│       ├── fund/quote.ts  # 基金估值
│       ├── fund/history.ts # 基金历史净值
│       ├── fx.ts          # 汇率
│       └── ocr.ts         # 截图 OCR
├── public/                # 静态资源 + PWA icons
├── wrangler.toml
└── vite.config.ts

数据隐私

  • 所有持仓数据仅存储在浏览器(localStorage / IndexedDB)
  • Cloudflare Workers 端不持久化任何用户数据,只做行情/OCR 转发
  • OCR 图片一次性传给 AI 模型,处理完即丢,不落盘
  • 无埋点、无 Analytics、无三方追踪

贡献

欢迎 Issue / PR。详见 CONTRIBUTING.md

常见可贡献方向:

  • 接入新行情源(雪球 / 东方财富 / Yahoo Finance)
  • 接入新数据类型(可转债 / 期权 / 加密货币)
  • 优化 OCR 提示词,提高识别准确率
  • 加更多 PWA 增强(推送通知盘中提醒等)
  • 翻译(English / 繁體中文)

赞助

如果这个工具帮你省了打开 4 个 App 的麻烦,请我喝杯咖啡呗 👇

爱发电 · ifdian.net/a/knrlos

详见 SPONSOR.md

免责声明

行情数据通过第三方公开接口获取,仅供参考,不构成投资建议。请以您所使用的券商终端为准。本工具不提供任何投资分析、推荐或预测。

协议

MIT © 2026 knrlos

About

跨平台轻量持仓盈亏跟踪 + 走势查看(A股/港股/美股/基金)

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages