Files
myquant/docs/architecture.md
T
Simon 6acf938caf docs: 文档重构 — 清理 AI agent 残留,整合 docs/ 目录结构
- 删除 11 个残留文件: continuation.md, init_plan.md, reasonix.toml, djapi/continuation.md, djapi/.serena/, djapi/.claude/, djapi/.mcp.json, .claude/skills/, docs/usage.html, docs/db_schema.md, docs/report_db_design.md
- 7 个 CLAUDE-*.md 移入 docs/ 并重命名去 CLAUDE- 前缀
- 新增 4 个文档: architecture.md, development.md, api.md, deployment.md
- 重写 usage.md, README.md
- 修复所有过时引用和交叉链接
2026-08-22 11:56:40 +08:00

196 lines
9.0 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.
# cc-cursor 项目架构
## 概述
cc-cursor 是一个 Mac Mini 单机量化研究平台,覆盖从数据获取到策略报告的全链路量化研究流程。
## 项目布局
```
cc-cursor/ # 项目根目录
│
├── finance/ # 🔥 核心量化引擎(代码实际位置)
│ ├── config/ # 全局配置:.env 加载、数据库/API 路径
│ ├── database/ # 数据库层:ORM 模型、SQLAlchemy 连接、DAO
│ ├── data/ # 数据层:DataManager 统一入口
│ │ └── sources/ # Tushare + AkShare 双数据源实现
│ ├── factors/ # 因子引擎:34 个注册因子
│ │ ├── technical/ # 技术因子(动量、RSI、MACD、布林等 10 类)
│ │ ├── fundamental/ # 基本面因子(ROE、PE、PB、EP)
│ │ └── sentiment/ # 情绪因子(Qwen NLP + 三源新闻聚合)
│ ├── backtest/ # 回测引擎:VectorBT 封装
│ │ ├── vectorbt/ # VectorBT 引擎适配
│ │ └── strategies/ # 5 个内置策略(均线、RSI、动量等)
│ ├── optimizer/ # 参数优化:Optuna 引擎 + Walk-Forward
│ ├── models/ # ML 模型:LightGBM + CatBoost + 特征工程
│ │ ├── lightgbm/ # LightGBM 模型封装
│ │ └── catboost/ # CatBoost 模型封装
│ ├── agents/ # Agent 系统:4 个 Agent + 编排器
│ ├── cli/ # 命令行入口:agent_cli + 7 个 demo 验证脚本
│ ├── reports/ # 日报输出:daily_YYYYMMDD.md + 存储层
│ ├── strategy/ # 策略层(空壳占位,仅 __init__.py)
│ ├── portfolio/ # 组合管理(空壳占位,仅 __init__.py)
│ ├── execution/ # 执行层(空壳占位,仅 __init__.py)
│ └── scheduler/ # 调度层(空壳占位,仅 __init__.py)
│
├── djapi/ # 🌐 Django API 后端
│ ├── djapi/ # 项目配置:settings、urls、env_loader
│ └── api/ # 唯一 Django app
│ ├── stock/ # A 股数据 API(16 端点)
│ ├── video/ # 新闻联播视频处理(独立模块)
│ └── report/ # 日报查询 API(news/reports + news/events)
│
├── shared/ # 🔧 共享工具
│ └── script/ # autossh.sh(MariaDB SSH 隧道)
│
├── docs/ # 📚 项目文档(13 个 md 文件)
│
├── .claude/ # Claude 配置(空目录,仅保留框架)
│
├── .git/ # Git 仓库
│
├── README.md # 项目入口文档
└── .gitignore # Git 忽略规则
```
### 各目录职责
| 目录 | 职责 | 状态 |
|------|------|------|
| `finance/` | **核心量化引擎**,全链路代码所在地 | ✅ 已实现 |
| `finance/config/` | 全局配置,`.env` 加载和路径管理 | ✅ |
| `finance/database/` | MariaDB 连接、ORM 模型、DAO 数据访问 | ✅ |
| `finance/data/` | 统一数据层,双源(Tushare→AkShare)fallback | ✅ |
| `finance/factors/` | 因子引擎,34 因子/12 分类(技术+基本面+情绪) | ✅ |
| `finance/backtest/` | VectorBT 回测,5 策略 + 截面回测 | ✅ |
| `finance/optimizer/` | Optuna 参数寻优 + Walk-Forward 验证 | ✅ |
| `finance/models/` | LightGBM/CatBoost ML 模型 + 特征工程 | ✅ |
| `finance/agents/` | 4 Agent(Research/Selection/Risk/Report)+ 编排器 | ✅ |
| `finance/cli/` | 命令行入口 + 7 个 demo 验证脚本 | ✅ |
| `finance/reports/` | 日报输出(daily_YYYYMMDD.md)+ 持久化存储 | ✅ |
| `finance/strategy/` | 策略层,预留扩展 | 🚧 空壳 |
| `finance/portfolio/` | 组合管理,预留扩展 | 🚧 空壳 |
| `finance/execution/` | 执行层,预留扩展 | 🚧 空壳 |
| `finance/scheduler/` | 调度层,预留扩展 | 🚧 空壳 |
| `djapi/` | Django API 后端,A 股数据 + 新闻联播 + 日报查询 | ✅ 已部署 |
| `shared/` | 跨项目共享工具(SSH 隧道脚本) | ✅ |
| `docs/` | 项目文档,13 个 md 文件 | ✅ |
## 数据流
```
Agent 编排层
├── ResearchAgent ── 因子发现(IC/IC_IR 评估)
├── SelectionAgent ─ 多因子打分 + ML 预测
├── RiskAgent ────── 仓位控制 + 风险预警
└── ReportAgent ──── 自动日报生成
基础引擎层
DataManager ──→ FactorEngine ──→ BaseStrategy ──→ VectorBTEngine ──→ BacktestReport
│ │ │
│ FeatureEngine OptunaEngine
│ │ │
└──────→ LightGBM/CatBoost ←────────┘
情绪增强层
NewsSource(AkShare/DB/MCP) ──→ QwenClient ──→ SentimentFactor ──→ FactorEngine
```
### 核心数据流
```
Data → Factor → Model → Strategy → Backtest → Report
```
## 设计原则
### 模块隔离
各引擎通过统一接口交互,可替换实现(VectorBT → Backtrader)。
### 接口标准化
- 因子:`calculate(df) → pd.Series`
- 策略:`generate_signals(df) → pd.Series`
- 模型:`fit/predict/save/load`
- 优化:`optimize() → OptimizationResult`
### 数据层统一
策略/模型不直连数据源,全部通过 `DataManager`。禁止:
- 策略直接访问 AkShare/Tushare
- 模型直接访问数据库
### Agent 不重建轮子
Agent 通过依赖注入复用已有引擎,编排而非重建。
### 防前视偏差
- 时间序列交叉验证(TimeSeriesSplit)
- expanding window 统计量
- 特征工程 fit 在训练集,transform 在测试集
## 技术栈
| 组件 | 技术 | 说明 |
|------|------|------|
| 数据获取 | AkShare + Tushare (双源) | Tushare 优先,AkShare fallback |
| 数据库 | MariaDB (SSH 隧道) | 本地 13306 → 远程 3306 |
| 因子/特征 | pandas / numpy / sklearn | — |
| 回测引擎 | VectorBT 1.0 | 只做多,10 万/万三 |
| 参数优化 | Optuna 4.9 | Walk-Forward 验证 |
| ML 模型 | LightGBM 4.6 + CatBoost 1.2 | 统一接口 |
| NLP 情绪 | Qwen (DashScope / Ollama) | 双后端 |
| Agent 编排 | 自研编排器 | finance/agents/ |
| API 后端 | Django 5.2 + uWSGI | djapi/ |
## 开发进度
| Sprint | 模块 | 状态 |
|--------|------|------|
| Sprint 0 | 基础设施(DataManager + MariaDB 3 表) | ✅ |
| Sprint 1 | 因子引擎(34 因子 / 12 分类) | ✅ |
| Sprint 2 | VectorBT 回测(5 策略 + 截面 + BacktestReport) | ✅ |
| Sprint 3 | Optuna 优化(+ Walk-Forward) | ✅ |
| Sprint 4 | ML 模型(LightGBM + CatBoost + MLStrategy) | ✅ |
| Sprint 5 | Qwen 情绪因子(三源新闻 + 日期对齐) | ✅ |
| Sprint 6 | Agent 系统(4 Agent + CLI + 日报 .md/.html) | ✅ |
| Sprint 7 | djapi API(日报查询 ×2) | ✅ |
**全部 8 个 Sprint 已完成。**
## 数据源架构
### finance/ 引擎层
```
DataManager
├── TushareSource(优先,需 TUSHARE_TOKEN)
├── AkShareSource(fallback,无需 token)
└── Database Cache(SQLAlchemy + MariaDB)
```
### djapi/ API 层
```
api/stock/data_source.py(统一入口)
├── get_tushare_pro() — 全局单例
├── get_daily() — 双源 fallback
└── get_mysql_db() — MySQL 全局单例
```
## 指数代码规则
- `.SH` 结尾且不以 `399` 开头 → 指数(如 `000001.SH`)
- `.SZ` 开头非 `399` → 个股(如 `000001.SZ`)
- `399*.SZ` → 指数(如 `399001.SZ`)
## 文档索引
| 文档 | 内容 |
|------|------|
| [使用指南](usage.md) | 各模块使用方法和代码示例 |
| [开发指南](development.md) | 环境搭建、开发约定、模块说明 |
| [因子与表结构速查](reference.md) | 34 因子注册表、DB 表结构、数据源接口 |
| [数据层详解](data-layer.md) | DataManager、数据库、缓存策略、已知 Bug |
| [因子引擎详解](factors.md) | 因子计算、情绪引擎、新闻源 |
| [回测引擎详解](backtest.md) | VectorBT、策略、信号工具、Optuna |
| [ML 模型详解](ml-models.md) | 特征工程、LightGBM/CatBoost、ML 策略 |
| [Agent 系统详解](agents.md) | Agent 架构、CLI、日报 |
| [部署说明](deployment.md) | 本地环境、服务器、uWSGI、rsync 部署 |
| [DJAPI 接口](api.md) | Django API 端点参考 |
| [日报查询 API](news_report_api.md) | news/reports + news/events 接口 |