股票K线图和技术指标分析工具。
- 后端: FastAPI + Tushare Pro
- 前端: Next.js + TradingView lightweight-charts
- 图表: K线图、MACD、RSI、移动平均线
复制 backend/.env.example 为 backend/.env 并配置以下变量:
| 变量 | 说明 | 获取方式 |
|---|---|---|
TUSHARE_TOKEN |
Tushare Pro API Token | https://tushare.pro |
MINIMAX_API_KEY |
MiniMax API Key | 用于AI股票分析 |
TAVILY_API_KEY |
Tavily API Key | https://tavily.com - 用于搜索股票新闻 |
- 注册 Tushare Pro
- 登录后在「个人中心」→「API Token」获取 Token
- 创建
backend/.env文件:
cd backend
cp .env.example .env- 编辑
backend/.env,填入你的 Token:
TUSHARE_TOKEN=你的Tokencd backend
uv sync方式一:使用 uv run(推荐)
cd backend
uv run uvicorn main:app --reload --port 8000python-dotenv 会自动读取 .env 文件中的环境变量。
方式二:使用快捷脚本
./start-backend.sh方式三:手动设置环境变量
export TUSHARE_TOKEN=你的Token
uv run uvicorn backend.main:app --port 8000后端启动后,访问 http://localhost:8000/docs 查看 API 文档。
cd frontend
npm install
npm run dev如果网络无法直接访问 Tushare,需设置代理:
export https_proxy=http://127.0.0.1:10887
export http_proxy=http://127.0.0.1:10887- 访问 http://localhost:3000
- 输入股票代码(如 000001、600000、300750)
- 查看 K 线图和技术指标
| 端点 | 说明 |
|---|---|
GET /api/stock/{symbol} |
股票基本信息 |
GET /api/stock/{symbol}/kline?days=100 |
K 线数据 |
GET /api/stock/{symbol}/realtime |
实时行情 |
GET /api/stock/{symbol}/indicators?days=100 |
技术指标 |
GET /health |
健康检查 |
cd frontend
npm run buildcd backend
uv run uvicorn backend.main:app --port 8000访问 http://localhost:8000 查看前端页面。
迁移到新服务器时,按以下步骤检查:
确保防火墙打开以下端口:
- 3000 - 前端
- 8000 - 后端 API
watchlist.db 需要创建以下表才能正常运行:
sqlite3 backend/watchlist.db "
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS captchas (
id INTEGER PRIMARY KEY AUTOINCREMENT,
code TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS user_sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
token_jti TEXT NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NOT NULL
);
CREATE TABLE IF NOT EXISTS user_watchlist (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
symbol TEXT NOT NULL,
name TEXT NOT NULL,
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
UNIQUE(user_id, symbol)
);
"如果前端和后端不在同一服务器,或使用非 localhost 访问,需创建 frontend/.env.production:
echo "NEXT_PUBLIC_API_URL=http://你的服务器IP:8000" > frontend/.env.production然后重新构建:
cd frontend
npm run build
npm startbackend/watchlist.db- 用户、验证码、会话数据backend/trend_predictions.db- 股票趋势预测数据(可选,如不存在会自动创建)
cd backend
uv sync方式一:使用快捷脚本(推荐)
./start.sh方式二:手动启动
# 后端
cd backend && nohup ./backend/.venv/bin/python -m uvicorn backend.main:app --host 0.0.0.0 --port 8000 &
# 前端
cd frontend && npm run build && nohup npm start &CAPTCHA CORS 错误:检查前端 .env.production 是否设置正确的 NEXT_PUBLIC_API_URL
sqlite3.OperationalError: no such table:运行上面的数据库初始化 SQL
net::ERR_CONNECTION_TIMED_OUT:检查防火墙是否打开 8000 端口
| 代码 | 名称 |
|---|---|
| 000001 | 平安银行 |
| 600000 | 浦发银行 |
| 300059 | 东方财富 |
| 300750 | 宁德时代 |
| 510300 | 300ETF |