Files
myquant/djapi/README.md
T
simonandClaude Opus 4.7 271a9343a5 Initial commit: cc-cursor 全链路量化研究平台
7 Sprints 全部完成:
  Sprint 0: 基础设施 (DataManager + MariaDB)
  Sprint 1: 因子引擎 (34因子/12分类)
  Sprint 2: VectorBT 回测 (5策略+截面)
  Sprint 3: Optuna 优化 (+Walk-Forward)
  Sprint 4: ML 模型 (LightGBM+CatBoost)
  Sprint 5: Qwen 情绪因子 (三源新闻+日期对齐)
  Sprint 6: Agent 系统 (4Agent+日报.md/.html)

生产加固 (15项): Tushare双源fallback, SSH自动恢复, pool_pre_ping,
  save_daily先删后插, load_dotenv绝对路径, 日报5d/20d修复,
  RiskAgent改上证指数, 昨日对比+数据截止, mac_report utf8mb4,
  CLAUDE-*.md 9条已知Bug, demo全参数化, djapi数据源归一化,
  indexDatas API修正

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 15:59:05 +08:00

120 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# djapi
Django 5.2 项目,提供 A 股金融数据 API 和新闻联播视频处理能力。
## 架构
```
djapi/
├── manage.py # Django 入口
├── djapi/ # 项目配置
│ ├── settings.py # Django 设置、CORS、DRF
│ ├── urls.py # 根路由 + OpenAPI schema
│ └── wsgi.py # WSGI 入口
├── api/ # 唯一 app
│ ├── views.py # 视图层(薄转发,调用 stock 模块)
│ ├── urls.py # /api/* 路由(~20 个端点)
│ ├── stock/ # 股票数据模块
│ │ ├── config.py # Tushare token、扫描参数
│ │ ├── stock_utils.py # 通用工具(tscode 校验、NaN 修正、view 包装器)
│ │ ├── stock_basic.py # 日线行情、基本信息、行业查询
│ │ ├── getStockParam.py # 个股参数
│ │ ├── getStockEp.py # TTM / 季度 EPS
│ │ ├── getIndexs.py # 指数行情
│ │ ├── stockMargin.py # 融资融券
│ │ ├── getStockFina.py # 财务报表分析
│ │ ├── getStockDiv2.py # 股息率计算(TTM 分红 + 毛刺平滑)
│ │ ├── smoothBrush.py # 数据平滑算法
│ │ ├── divSearch.py # 全市场股息率批量扫描
│ │ ├── xwlbDaily.py # 新闻联播数据查询
│ │ └── mysqlHandle.py # MySQL 连接封装
│ └── video/ # 新闻联播视频处理(独立模块)
│ ├── getVideo5.py # 主流程:抓取→下载→识别→入库
│ ├── audioRead.py # 音频转换、分割、ASR 识别
│ ├── deepseek.py # DeepSeek API 封装
│ ├── ai.py # AI 调用函数
│ ├── newsProcess.py # 新闻分割+标题提取
│ └── main.py # 定时任务入口
├── static/ # 静态文件(collect 后的 admin 资源)
├── uwsgi.ini # uWSGI 配置
└── requirements.txt # Python 依赖
```
### 数据流
**股票 API**`HTTP 请求``views.py` 提取参数 → `viewFunc_tsCodeAndDate()` 统一包装 → `stock/*.py` 调用 Tushare API → pandas DataFrame → JsonResponse
**视频处理**`main.py``getVideo5.py` 抓取 CCTV 视频页 → yt-dlp 下载 → ffmpeg 提取 MP3 → pydub 静音分割 → DashScope Paraformer ASR → MySQL → `newsProcess.py` 调用 DeepSeek 分割新闻+生成标题 → MySQL
### 外部依赖
| 服务 | 用途 | 相关文件 |
|------|------|----------|
| Tushare | A 股行情、财报、分红、指数 | `api/stock/*.py` |
| DeepSeek API | 新闻文本分割、摘要 | `api/video/deepseek.py`, `ai.py` |
| DashScope (Qwen) | ASR 语音识别、文本纠错 | `api/video/audioRead.py`, `ai.py` |
| MySQL | 股票数据、新闻联播数据 | `mysqlHandle.py`stock 和 video 各一份) |
| yt-dlp + ffmpeg | 视频下载、音频提取 | `api/video/getVideo5.py` |
## 快速开始
```bash
# 安装依赖
pip install -r requirements.txt
# 开发服务器
python manage.py runserver 0.0.0.0:8000
# 数据库初始化
python manage.py migrate
python manage.py createsuperuser
# uWSGI 部署
uwsgi --ini uwsgi.ini
uwsgi --reload uwsgi.pid
uwsgi --stop uwsgi.pid
```
## API 概览
基础 URL`/api/`
| 端点 | 参数 | 说明 |
|------|------|------|
| `stockbasic/` | tscode, start_date, end_date | 日线行情 |
| `stockinfo/` | tscode | 个股基本信息 |
| `stockparam/` | tscode, start_date, end_date | 个股参数(市值等) |
| `industrys/` | industry | 按行业查股票列表 |
| `indexByName/` | index_name | 按名称查指数 |
| `indexDatas/` | index_name, start_date, end_date | 指数日行情 |
| `stockep/` | tscode, start_date, end_date | TTM EPS |
| `quarterlyEps/` | tscode, start_date, end_date | 季度 EPS |
| `finance/` | tscode, start_date, end_date | 财务报表分析 |
| `getdiv/` | tscode, start_date, end_date | 股息率(含 TTM |
| `dailymargin/` | trade_date, exchange_id | 每日融资融券汇总 |
| `stockmargin/` | tscode, start_date, end_date | 个股融资融券 |
| `xwlbNews/` | start_date, end_date | 新闻联播(原始识别文本) |
| `xwlbFine/` | start_date, end_date | 新闻联播(AI 分割后) |
API 文档(Swagger):`/api/docs/`
OpenAPI Schema`/api/schema/`
## 部署
- 服务器路径:`/home/simon/myquant/djapi/`
- uWSGI 监听 `127.0.0.1:5004`nginx 反向代理
- 域名:`api.doorcome.cn``echart.doorcome.cn`
- 虚拟环境:`/opt/miniconda/envs/django`
- Python 版本:3.10
## TODO
- [ ] 将硬编码的 API Key / Token / 数据库密码迁移到环境变量
- [ ] 视图片段从 `JsonResponse` 迁移到 DRF ViewSet + Serializer,完善 Swagger 文档
- [ ] 添加接口限流和认证机制
- [ ] 补充单元测试(当前 tests.py 为空)
- [ ] `config.py` 中的交易所、行业列表等改为可动态配置
- [ ] video 模块的 `db.sqlite3` 不应随代码提交,添加到 `.gitignore`
- [ ] 数据库密码、API Key 出现在多个 `__pycache__/*.pyc` 中,需要清理历史
- [ ] video 模块中废弃脚本(`wasted/`)确认后清理