OpenStock — 开源免费的美股 / 加密行情平台
对标付费行情终端(TradingView / Bloomberg 那类)的开源替代品,Next.js 15 + MongoDB 自托管,TradingView 图表 + Finnhub 报价,含自选股、价格提醒邮件、AI 周报摘要,20.5k star、AGPL-3.0。
「Markets, minus the paywall.」一个开源的行情平台,可以白嫖官方托管站 openstock-ods.vercel.app,也可以整份拉到自己的服务器上跑,功能不打折。20.5k star、2.5k fork,社区型项目。
为什么收藏它
- 不是玩具级 demo。Next.js 15 App Router + React 19 + Tailwind v4 + shadcn/ui,Better Auth 账号体系、MongoDB 存自选股和提醒、Inngest 跑后台任务、Nodemailer 发邮件,是一套完整的生产形态。想抄「开源 SaaS 骨架」的话,这份代码结构(
app/分层 +lib/actions/+database/)比大多数模板都值得读。 - 数据源思路值得借鉴:图表全部走 TradingView 嵌入(免费、实时、还带画线工具和指标),报价走 Finnhub 免费 key。把贵的部分外包给嵌入组件,自己只做聚合与体验——这是低成本做行情产品的关键取舍。
- 免费 Finnhub key 可以池化。
FINNHUB_API_KEYS支持逗号分隔塞多个 key 轮换,每个 key 加 60 请求/分钟,等于白嫖额度叠加。 - 两档数据新鲜度可选:
cached(默认,每小时更新)和realtime(15 秒一次 + 价格提醒邮件),靠NEXT_PUBLIC_OPENSTOCK_DATA_MODE切,编译期固定。 - 部署路径齐全:Docker Compose(自带 MongoDB,不对外暴露端口)、
ghcr.io/open-dev-society/openstock预构建镜像(amd64/arm64)、Railway / Vercel / RepoCloud / ZopDay 一键部署,还有railway.json和vercel.json现成配置。 - 许可证要留意:AGPL-3.0——自己改完部署成 Web 服务,也必须开源自己的改动。想拿它做闭源商业产品,此路不通。
技术栈与依赖
| 层 | 用什么 |
|---|---|
| 前端 | Next.js 15、React 19、TypeScript、Tailwind v4、shadcn/ui + Radix |
| 账号 / 数据 | Better Auth、MongoDB + Mongoose |
| 行情 | Finnhub(报价、搜索、财报、新闻)、TradingView widgets(图表、热力图、技术面)、Adanos(情绪,可选) |
| 后台任务 | Inngest(欢迎邮件、价格提醒、周一 AI 周报) |
| 邮件 | Nodemailer(Gmail 应用密码)、Kit(订阅周报) |
| AI | Gemini / MiniMax / Siray(写欢迎邮件和新闻摘要) |
| 部署 | Vercel(vercel.json 锁孟买 bom1)、Docker、Railway |
上手成本
最少三个必填项:MONGODB_URI(Atlas 免费档够用)、BETTER_AUTH_SECRET(openssl rand -hex 32)、FINNHUB_API_KEY(免费注册)。然后 npm ci → 填 .env → node scripts/check-env.mjs 自检 → npm run test:db 验库 → npm run dev。要跑邮件和提醒,本地还得并起 npx inngest-cli@latest dev。
市场覆盖(有坑)
- 🇺🇸 美股:图表实时、报价和提醒都支持
- 加密(Binance 交易对):图表实时、报价支持
- 外汇:只有图表,没有报价
- 🇨🇦 加拿大 / 🇦🇺 澳洲:图表延迟;🇮🇳 印度 / 🇩🇪 德国:日终
- 伦敦、东京、港股、韩国等:K 线被 TradingView 屏蔽,只剩财报 / 技术面 / 公司资料
也就是说:A 股和港股不在支持范围里,别指望拿它盯 A 股。详细原因在仓库的 MARKET_SUPPORT.md。
要注意的
- 官方明确写了「不是券商、数据可能延迟、不构成投资建议」。
- 免费 Finnhub 的报价是每小时一次(社区版),想 15 秒一次得自备 key 并开 realtime 模式;官方托管的 Cloud 版($5/月,未上线)才有实时报价。
- 自托管 Docker 的 MongoDB 密码只在卷首次创建时生效,之后改
.env不会改库密码,重置得删mongo-data卷。
以后想拿它做什么
两件事:① 拿它当「开源 SaaS 骨架」的参考实现,看 Better Auth + Inngest + 多数据源聚合是怎么串起来的;② 如果后面真要看美股,直接在甲骨文节点上 Docker 起一份,用自己的 Finnhub key 开 realtime 模式跑价格提醒。