返回 AI 项目
AI 项目
15 分钟阅读

Today Stock Finance

一款基于 TypeScript + Koa2 + React + Deepseek V4 Pro 所搭建的股票分析工具

本文所聚焦的业务需求是:搭建一个本地化的股票市场分析平台

文档的主要目的是讲如何使用Vibe Coding搭建一个相对专业的工程,因此不去讲任何安装Node.JS环境的内容,直接默认开发电脑存在了node环境

项目技术栈选择

后端技术栈:TypeScript + Koa2

  • 这便是大名鼎鼎的Koa2框架,一直在看别人使用里面的洋葱模型,很厉害,包括中间层等等内容。
  • 一直是自己想上手实际写一下,但是古法编程时代的自己太懒了,没有动力去从0到1学习一门技术的完全体,简单写一两个脚本,也没有孜孜不倦的毅力和动力沿着一个确定性的目标像一只仓鼠一样,搭出一个震惊中外的项目。
  • 现在有了Vibe Coding的加持,多少都要试一下威震八方的Koa2到底有多厉害。

前端技术栈:TypeScript + React + RTK

  • 这个项目是前后端绝对分离的一个项目,Koa2项目运行在6500端口,React项目运行在6501端口。采用CORS的形式,进行两个项目的交互行为。

Vibe Coding技术栈:

  • Trae CN + Deepseek V4 Pro

初始框架的搭建

  1. 新建一个空白的文件夹,并打开你的Trae CN,接入Deepseek V4 Pro的API。

User:

新建一个股票分析项目,其前端部分基于Vite和React实现,前端部分使用RTK进行构建页面的路由跳转模式。 后端部分使用Koa2实现。技术部分完全使用TypeScript实现,该项目为:提供股票的基本术语查询、基本面的查看,后续考虑使用AI工具进行股票的查询。 需要实现项目的数据分层,核心数据放在Koa2后端实现,React层仅作为页面展示部分。

Multi Task:

  1. 初始化项目根目录结构和配置文件

  2. 搭建后端 Koa2 + TypeScript 骨架(路由、控制器、服务、数据层)

  3. 实现后端股票术语查询和基本面数据 API

  4. 搭建前端 Vite + React + TypeScript + React Router 骨架

  5. 实现前端页面(术语查询、基本面查看)和 RTK 状态管理

  6. 安装依赖并验证项目运行

  7. 配置前后端联调与代理

Result: 在这一轮的Agent模式之中,基本上整一个Scaffold就能完整搭建起来。包括后端的API,以及前端简易的UI页面(这一块可以自己之后慢慢调试,沿着自己喜欢的UI审美风格进行多轮对话进行调整)

z_finance_stock/
├── package.json                  # 根配置,concurrently 一键启动前后端
├── server/                       # 后端 Koa2 + TypeScript
│   ├── src/
│   │   ├── index.ts              # 入口,端口 6500
│   │   ├── types/index.ts        # 类型定义
│   │   ├── middleware/errorHandler.ts
│   │   ├── controllers/          # termController, stockController
│   │   ├── services/             # termService, stockService(业务逻辑层)
│   │   ├── routes/               # termRoutes, stockRoutes
│   │   └── data/                 # 静态 mock 数据(后续替换为数据库)
│   ├── package.json
│   └── tsconfig.json
├── client/                       # 前端 Vite + React + TypeScript
│   ├── src/
│   │   ├── main.tsx / App.tsx    # 入口
│   │   ├── router/index.tsx      # React Router 路由配置
│   │   ├── store/                # RTK 状态管理
│   │   │   ├── store.ts          # store 配置
│   │   │   ├── stockSlice.ts     # 股票/术语数据 slice
│   │   │   └── hooks.ts          # typed hooks
│   │   ├── services/api.ts       # API 请求层
│   │   ├── pages/                # 页面组件
│   │   │   ├── Home.tsx          # 首页(功能导航卡片)
│   │   │   ├── TermSearch.tsx    # 术语查询(搜索+分类筛选)
│   │   │   ├── StockList.tsx     # 股票列表(关键词搜索)
│   │   │   └── StockDetail.tsx   # 股票基本面详情
│   │   ├── components/Layout.tsx # 布局(导航栏+内容区)
│   │   └── types/index.ts        # 前端类型
│   ├── vite.config.ts            # Vite 配置(含 API 代理到 6501)
│   └── package.json
[React 页面]  ←只做展示,通过 hooks 触发 action
     ↕
[RTK Store]   ←状态管理中心,dispatch asyncThunk
     ↕
[API Service]  ←前端请求层(fetch)
     ↕
[Koa2 路由]   ←/api/terms, /api/stocks
     ↕
[Controller]  ←参数解析、响应封装
     ↕
[Service]     ←核心业务逻辑(搜索、过滤、聚合)
     ↕
[Data Layer]  ←静态数据,后续可替换为数据库/AI接口

接入真实的股票数据查询

User:

stocks.ts 接入真实的股票数据查询

MultiTask:

1. 创建东方财富 API 数据层(搜索、行情、财务报表)
2. 将 StockService 改为异步,接入真实数据
3. 更新 StockController 适配异步调用
4. 验证真实数据 API 正常工作

Result:

Controller (async) → Service (async)
  ├── 优先: 东方财富 API (push2 + 财报)
  ├── 回退: 腾讯行情 API (qt.gtimg.cn)
  └── 兜底: 本地 mock 数据 (stocks.ts)

在这一轮的对话中,把真实数据接入进来,整个项目基本可行,至于验证数据到底是否为真实数据,就自己去看一下股价是否和当日的数据对得上与否?

修复部分BUG

user:

1. StockDetail.tsx 类型“unknown”上不存在属性“currentFundamental”。ts(2339) 
2. 检测端口是否已经打开,如果已经开发,先释放掉可用端口,再去启动这个项目,Backend的端口在6500,frontend的端口在6501
3. 详情页面出现乱码问题 
4. 股票不是最新的数据,数据更新时间不是实时
5. 缺失最新股价的内容

MultiTask:

1. 修复 StockDetail.tsx useAppSelector 类型推断
2. 修改端口:后端 6500、前端 6501,更新所有配置
3. 启动脚本增加端口检测释放逻辑,重启验证
4. 修复腾讯 GBK 编码乱码(fetchTencentQuote 用 TextDecoder('gbk'))
5. StockFundamental 类型增加 price、changePercent 字段
6. eastmoney.ts 从 push2 接口提取股价与涨跌幅
7. 前端 StockDetail 页面展示最新股价和涨跌幅
8. 端口释放后重启验证

user:

  1. <p className="update-info">财报数据更新日期: {fund.updateDate}</p> (这里的updateDate出错了!)
  2. 数据出现错误,目前一直展示的是2026.03.31,预期是实时时间

MultiTask:

  1. 问题在 stockSlice.ts —— loadFundamental 的 createAsyncThunk 缺少泛型参数,导致 action.payload 被推断为 unknown ,进而 currentFundamental 变成 unknown | null 。
  2. updateDate 取的是财报报告日期,不是数据获取的实时时间。需要将二者分开。

美化UI

user:

  1. 将整个React的项目风格,变得更加现代化一些,更加精美一些,符合现代Web风格
  1. 全局样式 & Layout 现代化(暗色主题、Glassmorphism)
  2. Home 页现代化(渐变Hero、Glass卡片、动效)
  3. StockList 页现代化(暗色表格)
  4. StockDetail 页现代化(价格卡片、渐变指标)
  5. TermSearch 页现代化(Glass 术语卡片)
  6. 构建验证

补充AI分析股票市场模块

user:

  1. 增加AI模块,使用Deepseek V4 Pro,从专业的角度,分析指定股票的各种风险、后续表现形式
  2. 提供短线持有、长线持有、买入时机、卖出时机、做T分析等等多角度的判断信号,整体报告最终以Markdown形式输出在Web中展示

MultiTask:

  1. 后端:创建 DeepSeek AI 分析 Service(prompt构建+API调用)
  2. 后端:创建 AI Controller + Route
  3. 前端:安装 react-markdown,扩展 API service 和 Redux slice
  4. 前端:创建 AIAnalysis 页面(Markdown渲染)
  5. 前端:StockDetail 添加 AI分析按钮,Home 激活 AI 卡片
  6. 路由注册 & 构建验证

user:

  1. AI的System Prompt可以更加专业,结合着最新的情况从基本面、情绪面、买入时机、卖出时机、应对暴跌与暴涨等等位置去判断股票的价值
  2. 可以切换长期持有和短期买入卖出做T可能去判断,并且补充一个是否已经持仓、持股平均价以及持股数量的位置,更加靠近数据去分析这一块的内容。

MultiTask:

  1. 更新类型定义(AIAnalysisParams)
  2. 重写 aiService 专业 Prompt(基本面/情绪面/持仓分析/策略切换)
  3. 后端改为 POST 接口,接收持仓+策略参数
  4. 前端 AIAnalysis 页面增加策略切换+持仓表单
  5. 前端 Redux/API 适配 POST 请求
  6. CSS 样式 & 构建验证

user:

  1. 加入一个功能,可以把这篇文章导出到本地存储起来
  2. 在Markdown报告的上方(不纳入Mark down报告中),加入System Prompt的展示

MultiTask:

  1. 后端 aiService 返回 systemPrompt + controller 传递
  2. 前端类型和页面:报告上方展示 System Prompt
  3. 构建验证

效果图预览

  • Trae CN IDE的工程图 alt_text

  • Web实际运行的图片

  • 首页 alt_text

  • 炒股术语查询 alt_text

  • 炒股基本面所有股票信息 alt_text

  • 炒股基础信息 alt_text

  • 复盘笔记 alt_text

  • 股价展示情况,基本数据 alt_text

  • Deepseek 分析基本面中 alt_text

  • Deepseek 分析基本面的情况 alt_text

后续的一些拓展

  1. 可以接入Docker模式

如果后续这个东西自己用起来觉得很不错,并且有意愿去分享出去,可以用docker hub的形式上传,然后如果别人有兴趣,他自然就会部署起来。

做大做强之后,可以按照MT Photos的这套商业模式去运转,按照特定的功能进行相应的收费,这是他们产品的Docker仓库

  1. 收费模式

针对于像查询股价这些比较常见的功能需求,是可以按照普通模式去进行直接公开化。

而针对自己写特定的Prompt这一块内容,可以做成付费板块。那这里面就考验真正的产品和运营能力了,什么样的股票专业Prompt,会适合Deepseek并向用户提供一份更加详细的股票分析报告呢?

人对于能赚到钱这个事情,是非常疯狂的。如果你的产品能够帮一个人赋能,将他的能力从原来的赚10块钱,提升到能赚到50块,然后以一套很系统化机制的方式,去中间约定好分成,这套逻辑感觉是能走得通的。当然中间还有很多细节化的事情需要去斟酌,要把事情做得不那么糙,不过大致的方向上,感觉是没有大问题的。

  1. 新增爬虫功能去爬取一些公众号的文章

股票行业里面的人,和技术行业里面的人,都很纯粹,总是很乐意分享自己对于一个事情的看法。包括他们本身的一套思考模式链路,很多文章或许会有一些个人情绪向,但是里面还是有可以提取出来学习的内容的。在这一个基础之上,其实是可以把很多好文章爬下来,然后做一次训练。

或许是通过AI应用层的内容,直接让LLM去学习里面的内容,然后输出一套skills,然后再结合当日的行情去做分析,辅佐自己做决策。

也可以是采用AI架构层的内容,把这些文章的内容作为训练数据,让LLM学习里面的思路,然后直接使用一个自定义的LLM模型去每日定向分析各种各样的盘面,直接成为一套可用的workflow,搭配hooks,以量化的那种模式去进行股票交易行为。

一些个人的小看法

个人关于Vibe Coding更多的小看法,放在了这篇文章里面。

相关文章

更多
12 分钟
关于我在 Vibe Coding 的这一面
个人对 Vibe Coding 趋势的看法,以及用它搭建博客、股票工具与国际象棋等项目的实践。