Files

232 lines
8.6 KiB
Markdown
Raw Permalink 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 — Mac Mini 单机量化研究平台
从数据获取 → 因子计算 → 回测 → 参数优化 → ML 模型 → 情绪因子 → Agent 系统,全链路量化研究平台。
## 架构
```
cc-cursor/
├── finance/ # 核心量化引擎
│ ├── config/ # 全局配置(MariaDB / AkShare
│ ├── database/ # ORM 模型 + DAOmac_ 前缀表)
│ ├── data/ # DataManager 统一数据层
│ ├── factors/ # 因子引擎(34 因子 / 12 分类,含情绪因子)
│ ├── backtest/ # 回测引擎(VectorBT + 5 策略 + 截面回测)
│ ├── optimizer/ # Optuna 参数优化 + Walk-Forward
│ ├── models/ # LightGBM / CatBoost ML 模型
│ ├── agents/ # Agent 系统(4 Agent + 编排器 + CLI
│ ├── cli/ # 命令行 & 验证脚本
│ ├── reports/ # 自动日报输出目录
│ └── .env # 环境变量配置(API Key / 分析范围)
├── djapi/ # Django API 后端(A 股数据 + 新闻联播 + 日报查询)
├── mcp-servers/ # MCP ServerSerena,本机工具,git 忽略)
├── shared/ # 共享工具(SSH 隧道脚本)
├── docs/ # 文档 & 使用指南
└── .claude/ # Claude Code 配置
```
## 数据流
```
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
```
全部通过 Service 层中转:策略不直连 AkShare,模型不直连数据库,Agent 不重建引擎。
---
## 开发进度
| Sprint | 模块 | 关键成果 | 状态 |
|--------|------|----------|------|
| Sprint 0 | 基础设施 | DataManager + MariaDB 3 表 | ✅ |
| Sprint 1 | 因子引擎 | 34 因子 / 12 分类 | ✅ |
| Sprint 2 | 回测引擎 | VectorBT + 5 策略 + 截面回测 | ✅ |
| Sprint 3 | 参数优化 | Optuna + Walk-Forward | ✅ |
| Sprint 4 | ML 模型 | LightGBM + CatBoost + 特征工程 | ✅ |
| Sprint 5 | 情绪因子 | Qwen + 三源新闻聚合 + 日期对齐 | ✅ |
| Sprint 6 | Agent 系统 | 4 Agent + 编排器 + CLI + 自动日报 | ✅ |
| Sprint 7 | djapi API | 日报查询 ×2news/reports + news/events | ✅ |
**全部 8 个 Sprint 已完成。**
---
## 功能模块
### 数据层 `finance/data/`
```python
from data.data_manager import DataManager
dm = DataManager(); dm.init_db()
stocks = dm.get_stock_list() # → 5,524 只
daily = dm.get_daily("000001.SZ") # → 日线
fina = dm.get_financial("000001.SZ") # → 财务数据
dm.sync_daily("000001.SZ") # → 增量同步
```
### 因子引擎 `finance/factors/`
```python
from factors.registry import get_factor, list_factors
from factors.engine import FactorEngine
engine = FactorEngine(dm)
factors = [get_factor("momentum_20"), get_factor("rsi_14")]
factor_df = engine.compute("000001.SZ", factors)
# → 34 个注册因子,12 个分类(动量/RSI/MACD/量价/布林/ATR/均线/波动率/换手率/振幅/基本面/情绪)
```
### 回测引擎 `finance/backtest/`
```python
from backtest.vectorbt.engine import VectorBTEngine
from backtest.strategies.rsi_mean_revert import RSIMeanRevertStrategy
engine_bt = VectorBTEngine(initial_capital=100_000, commission=0.0003)
report = engine_bt.run(RSIMeanRevertStrategy(oversold=30, overbought=70), price_df, factor_df)
# → 收益=29.4% 年化=4.3% 回撤=-19.1% 夏普=0.37 胜率=77.1%
```
5 个内置策略 + 自定义策略接口 + 截面回测 + BacktestReport 标准化报告。
### 参数优化 `finance/optimizer/`
```python
from optimizer.engine import OptunaEngine
from optimizer.space import rsi_revert_space
result = OptunaEngine(engine_bt).optimize(
RSIMeanRevertStrategy, rsi_revert_space, price_df, factor_df,
metric="sharpe", n_trials=200,
)
# → 最优参数: oversold=13, overbought=66
# → 夏普: 0.37→0.60 (+62%), 回撤: -19.1%→-1.8% (10倍改善)
```
7 种优化目标 + 4 个预置搜索空间 + Walk-Forward 滚动验证 + 快捷函数。
### ML 模型 `finance/models/`
```python
from models.features import FeatureEngine
from models.lightgbm.model import LightGBMModel
fe = FeatureEngine(lookahead=5)
X, y = fe.build(factor_df, price_df, fit=True)
model = LightGBMModel(params={"n_estimators": 200}).fit(X_train, y_train)
pred = model.predict(X_test) # → IC 评估 + 特征重要性 + 交叉验证 + ML 策略回测
```
Winsorize → 缺失填充 → RobustScaler → LightGBM/CatBoost 训练 → MLBenchmark 对比。
### 情绪因子 `finance/factors/sentiment/`
```python
from factors.sentiment.sentiment_engine import SentimentEngine
sent = SentimentEngine(dm)
sent_df = sent.compute("000001.SZ", max_news=20)
# → news_sent_5, news_conf_5, sent_delta_5
```
三数据源聚合(AkShare 个股新闻 + 新闻联播 DB + MCP trendradar-news)、日期对齐(非交易日→最近交易日)、xwlb 偏移(昨日新闻→今日使用)、DashScope + Ollama 双后端。
### Agent 系统 `finance/agents/`
```bash
python finance/cli/agent_cli.py daily # 完整每日流程
python finance/cli/agent_cli.py picks 15 # 选股 Top 15
python finance/cli/agent_cli.py risk # 风险评估
python finance/cli/agent_cli.py research # 因子研究
python finance/cli/agent_cli.py report # 生成日报
```
4 个 AgentResearch/Selection/Risk/Report+ 编排器 + 自动日报(reports/daily_YYYYMMDD.md)。
---
## 快速开始
```bash
# SSH 隧道
bash shared/script/autossh.sh
# Python 环境
conda activate quant # Python 3.11.13
# 每日 Agent 运行
python finance/cli/agent_cli.py daily
```
### 验证脚本
```bash
python finance/cli/demo_data_manager.py # Sprint 0 — DataManager
python finance/cli/demo_factor_engine.py # Sprint 1 — 因子引擎
python finance/cli/demo_backtest.py # Sprint 2 — 回测引擎
python finance/cli/demo_optimizer.py # Sprint 3 — 参数优化
python finance/cli/demo_ml.py # Sprint 4 — ML 模型
python finance/cli/demo_sentiment.py # Sprint 5 — 情绪因子
python finance/cli/demo_sentiment_detail.py # Sprint 5 — 情绪因子(单股详情)
```
---
## 技术栈
| 组件 | 技术 | 版本 | 状态 |
|------|------|------|------|
| 数据获取 | AkShare | 1.18.64 | ✅ |
| 数据库 | MariaDB (SSH 隧道) | — | ✅ |
| 因子/特征 | pandas / numpy / sklearn | 2.3 / 2.0 / 1.9 | ✅ |
| 回测引擎 | VectorBT | 1.0 | ✅ |
| 参数优化 | Optuna | 4.9 | ✅ |
| ML 模型 | LightGBM / CatBoost | 4.6 / 1.2 | ✅ |
| NLP 情绪 | Qwen (DashScope / Ollama) | turbo / 2.5 | ✅ |
| Agent 框架 | 自研编排器 | — | ✅ |
| API 后端 | Django + uWSGI | 5.2 | 已有 |
| 代码分析 | Serena MCP | — | 本机工具(不随仓库分发) |
---
## 设计原则
- **模块隔离**:各引擎通过统一接口交互,可替换实现(VectorBT → Backtrader
- **接口标准化**:因子 `calculate(df)→Series` / 策略 `generate_signals(df)→Series` / 模型 `fit/predict/save/load` / 优化 `optimize()→Result`
- **数据层统一**:策略/模型不直连数据源,全部通过 DataManager
- **Agent 不重建轮子**:Agent 通过依赖注入复用已有引擎,编排而非重建
- **防前视偏差**:时间序列交叉验证、expanding window 统计量
- **渐进演进**:全链路 8 个 Sprint 平滑推进,无推倒重写
## 文档
- [使用指南](./docs/usage.md) — 详细使用说明(12 章节,含代码示例)
- [使用指南 (HTML)](./docs/usage.html) — 网页版使用指南
- [新闻日报 API](./docs/news_report_api.md) — djapi 日报查询接口使用手册
## 子项目
- [djapi](./djapi/README.md) — Django API 后端:A 股数据 API(16 端点)+ 新闻联播处理 + 日报查询(news/reports、news/events
## 数据库连接
```bash
bash shared/script/autossh.sh
# host: 127.0.0.1:13306 user: myquant database: myquant table_prefix: mac_
```