Skip to content

djj45/ths

Repository files navigation

证券复盘系统

基于 thsdk 的 A 股每日复盘工具,支持 CLI 和 Web 界面。

项目结构

ths/
├── backend/              # Python 后端
│   ├── web.py            # FastAPI 服务
│   ├── fetcher.py        # 同花顺数据拉取
│   ├── cache.py          # SQLite 缓存层
│   ├── analysis.py       # 数据解析与分析
│   ├── config.py         # 配置(数据库路径、指数代码等)
│   ├── fetch_history.py  # 批量拉取历史数据脚本
│   ├── models.py         # 数据模型
│   ├── cli.py            # CLI 命令行入口
│   └── display.py        # CLI 显示模块
├── web/                  # Vue 3 前端
│   ├── src/
│   │   ├── views/        # 页面(首页、排行榜、板块、个股详情)
│   │   ├── components/   # 组件(K线图、分时图、表格等)
│   │   └── api/          # API 客户端和类型定义
│   └── dist/             # 构建产物
└── stock_codes.csv       # 股票代码列表

安装

uv sync
cd web && npm install

配置

复制 .env.example.env,填入同花顺账号信息:

cp .env.example .env
THS_USERNAME=你的同花顺用户名
THS_PASSWORD=你的同花顺密码
THS_MAC=你的MAC地址

启动服务

cd /Users/djj45/code/ths

# 一键启动(开发模式,后端 + 前端,访问 http://localhost:5173)
./start.sh

# 一键启动(生产模式,构建前端 + 启动服务,访问 http://localhost:8000)
./start-prod.sh

# 手动分别启动
uv run uvicorn web:app --app-dir backend --reload --host 0.0.0.0 --port 8000  # 终端 1:后端
cd web && npm run dev                                                   # 终端 2:前端

构建后访问 http://localhost:8000 即可使用(web.py 会自动 serve web/dist 目录)。

技术栈

  • 后端: FastAPI + uvicorn,复用现有 fetcher/analysis/cache 模块
  • 前端: Vue 3 + TypeScript + Vue Router + ECharts
  • 构建: Vite

数据库

SQLite 数据库位于 ~/.ths_review/cache.db

查看数据库中的数据

# 查看整体概览
sqlite3 ~/.ths_review/cache.db "
SELECT 'stock_daily  日期: ' || min(date) || ' ~ ' || max(date) || '  记录: ' || count(*) FROM stock_daily;
SELECT 'index_daily  日期: ' || min(date) || ' ~ ' || max(date) || '  记录: ' || count(*) FROM index_daily;
SELECT 'sector_daily 日期: ' || min(date) || ' ~ ' || max(date) || '  记录: ' || count(*) FROM sector_daily;
SELECT 'market_daily 日期: ' || min(date) || ' ~ ' || max(date) || '  记录: ' || count(*) FROM market_daily;
SELECT 'klines       缓存: ' || count(*) || ' 条' FROM klines;
SELECT 'stock_list   股票: ' || count(*) || ' 只' FROM stock_list;
"

# 查看每天有多少条个股记录
sqlite3 ~/.ths_review/cache.db "SELECT date, count(*) FROM stock_daily GROUP BY date ORDER BY date"

# 查看每天的两市成交额
sqlite3 ~/.ths_review/cache.db "SELECT * FROM market_daily ORDER BY date"

# 查看所有表的日期范围
sqlite3 ~/.ths_review/cache.db "SELECT 'stock_daily', min(date), max(date) FROM stock_daily
UNION ALL SELECT 'index_daily', min(date), max(date) FROM index_daily
UNION ALL SELECT 'sector_daily', min(date), max(date) FROM sector_daily
UNION ALL SELECT 'market_daily', min(date), max(date) FROM market_daily"

清除缓存

# 清除某天的个股数据(下次请求时重新拉取)
sqlite3 ~/.ths_review/cache.db "DELETE FROM stock_daily WHERE date='2026-04-23'"

# 清除所有缓存(慎用)
rm ~/.ths_review/cache.db

批量拉取历史数据

使用 fetch_history.py 脚本批量拉取指定日期范围的历史行情数据:

cd /Users/djj45/code/ths

# 拉取指定日期范围(自动跳过周末)
uv run python backend/fetch_history.py 2026-04-20 2026-04-24

# 强制刷新(覆盖已有缓存)
uv run python backend/fetch_history.py 2026-04-20 2026-04-24 --force

# 跳过板块数据(加快速度)
uv run python backend/fetch_history.py 2026-04-20 2026-04-24 --skip-sectors

# 仅拉取今天
uv run python backend/fetch_history.py --today

# 构建板块成分股映射(首次使用或板块变更后需运行一次,约需几分钟)
uv run python backend/fetch_history.py --build-sector-map

每个交易日会拉取:个股行情、指数快照、两市成交额、行业板块、概念板块。

注意:

  • 同花顺的 market_data_index 是实时接口,不支持查历史。历史两市场成交额通过指数日K线获取,数据更准确
  • 拉取历史日期时,stock_daily 中的数据来自 market_data_cn,部分字段(如主力净流入、量比)可能不完整
  • 拉取速度取决于同花顺 API 的响应速度,每个交易日大约需要 10-30 秒
  • 建议不要一次拉取太多天的数据,避免触发限流
  • 非交易日的数据拉取会自动跳过(仅判断周末,不判断节假日)

API 接口

接口 说明
GET /api/indices 指数快照
GET /api/market-breadth 涨跌统计 + 两市成交额
GET /api/rankings?sort_by=change_pct&top_n=20 排行榜
GET /api/capital-flow?top_n=20&direction=inflow 资金流向
GET /api/sectors/industry 行业板块
GET /api/sectors/concept 概念板块
GET /api/stock/{ths_code} 个股详情
GET /api/stock/{ths_code}/klines 日K线
GET /api/stock/{ths_code}/intraday?date= 分时数据
GET /api/sectors/{ths_code}/constituents 板块成分股
GET /api/stock/{ths_code}/sectors 个股所属板块
GET /api/search?q= 股票搜索(支持拼音首字母)
POST /api/refresh 刷新今日数据

CLI 命令

uv run python backend/cli.py overview              # 完整每日复盘
uv run python backend/cli.py top-gainers -n 30     # 涨幅前30
uv run python backend/cli.py top-losers -n 30      # 跌幅前30
uv run python backend/cli.py turnover-leaders      # 换手率排行
uv run python backend/cli.py capital-flow          # 主力资金流向
uv run python backend/cli.py sectors               # 板块行情
uv run python backend/cli.py stock 000001          # 个股详情(含K线)
uv run python backend/cli.py index                 # 指数概览
uv run python backend/cli.py refresh               # 强制刷新缓存
uv run python backend/cli.py overview --no-cache   # 不使用缓存

数据说明

  • 数据源:通过 thsdk 实时行情接口获取,仅支持当日数据
  • K 线查询:支持历史区间查询,在个股详情页设置开始/结束日期即可获取对应区间的日 K 数据
  • 股票列表:从 stock_codes.csv 读取,约 5200 只 A 股
  • 缓存:SQLite(~/.ths_review/cache.db),当日数据自动复用

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors