← 返回 下载 README.md
# quantlab —— 偏好参数驱动的量化策略生成与回测(Python + PHP)

一句话:**调因子、调周期,直接给出下个周期的推荐股票(含量化权重);想验证就先跑回测、出报告。**
Python 侧负责"资料研究 → 策略生成 → 回测 → HTML 报告";PHP 侧提供同规则、可挂到现有
nginx + PHP-FPM 后端的轻量策略/信号引擎(配置 JSON 两边通用)。

> ⚠️ 免责声明:全部输出仅供量化学习与研究,不构成投资建议。历史回测不代表未来表现,市场有风险,投资需谨慎。

## 目录结构

```
map/
├── run.py                        # 回测入口:偏好参数 → 策略 → 回测 → HTML 报告
├── recommend.py                  # 推荐入口:调因子+调周期 → 下个周期推荐股票
├── quantlab/
│   ├── periods.py                # 周期定义:周/双周/月/季/半年/年 + 自定义交易日数
│   ├── dashboard.py              # 交互式选股看板(单文件 HTML,前端实时重算)
│   ├── dataloader.py             # 腾讯/新浪日线抓取(分段窗口+缓存)、沪深300池
│   ├── factors.py                # 7 个价量因子 + MAD去极值 + 截面Z-score
│   ├── strategy_generator.py     # 偏好参数 → 策略规格推导(核心)
│   ├── backtest.py               # T+1 回测引擎(成本/波动率目标/回撤降仓/IC统计)
│   ├── metrics.py                # CAGR/夏普/回撤/卡玛/月度/年度收益
│   ├── report.py                 # HTML 报告(ECharts)
│   ├── data/
│   │   ├── universe_sample.csv   # 内置大市值样本池(静态,有幸存者偏差)
│   │   └── kline/*.csv           # 日线缓存(自动生成)
│   └── docs/量化研究资料汇编.md    # 量化资料收集成果
├── quantlab-php/                 # PHP 7.3+ 版(无外部依赖)
│   ├── src/StrategyGenerator.php # 与 Python 同一套偏好映射
│   ├── src/FactorEngine.php      # 因子计算 + 截面选股
│   ├── cli.php                   # 命令行:生成配置 + 最新信号
│   └── api.php                   # HTTP API(可挂 nginx)
└── out/                          # 策略规格/回测明细/推荐清单 JSON、HTML 报告与看板
```

## 快速开始

### 环境要求

| 依赖 | 版本 | 说明 |
|---|---|---|
| Python | 3.10+(本项目 3.13 实测) | 负责数据抓取、因子计算、回测、报告 |
| pandas | 最新即可 | Python 唯一第三方依赖 |
| PHP | 7.3+(本项目 7.3.4 实测) | 仅 PHP 侧信号引擎需要,无外部依赖、无需 Composer |

```bash
# 1) 安装 Python 依赖
pip install pandas

# 2) 用偏好参数生成并回测(首次运行自动抓取约 120 只股票的日线,几分钟)
python run.py --risk 稳健 --horizon 波段
python run.py --risk 进取 --horizon 中线 --style momentum=0.4,low_vol=0.2,trend=0.4 --positions 8
python run.py --risk 保守 --horizon 长线 --cash 0.2 --report out/report.html

# 3) 下个周期推荐股票(最常用,见"用法一")
python recommend.py --period 月

# 4) PHP 侧(复用同一份日线缓存,见 quantlab-php/README.md)
php quantlab-php/cli.php --risk 稳健 --horizon 波段
```

### PHP 版单独说明

PHP 版有独立的完整使用文档:**[`quantlab-php/README.md`](quantlab-php/README.md)**,
包含环境要求、CLI 全部参数、HTTP API 定义、以及挂到 nginx + PHP-FPM 的分步部署教程。

## 用法一:下个周期推荐股票(最常用)

```bash
python recommend.py --period 月                        # 月度推荐(默认)
python recommend.py --period 周                        # 周度(动量20日+反转)
python recommend.py --period 季 --top 8                # 季度,只要 8 只
python recommend.py --days 15 --risk 进取              # 自定义 15 个交易日
python recommend.py --period 月 --style momentum=0.5,low_vol=0.2,trend=0.3   # 自定义因子权重
python recommend.py --period 月 --dashboard out/dashboard.html               # 生成交互看板
```

周期档位(自动匹配因子回看窗口,避免“用周线数据做季度决策”):

| 周期 | 交易日 | 动量窗口 | 趋势窗口 | 反转权重 |
|---|---|---|---|---|
| 周 | 5 | 20 | 20 | 20% |
| 双周 | 10 | 60 | 60 | 10% |
| 月 | 20 | 120 | 120 | 0 |
| 季 | 60 | 180 | 200 | 0 |
| 半年 | 120 | 250 | 250 | 0 |
| 年 | 250 | 250 | 250 | 0 |
| 自定义 | 3–250 | ≈3×N | ≈6×N | 0 |

输出:每只票的综合得分、因子贡献拆解(如“动量+0.50、质量动量+0.32、低波+0.14”)、
建议权重、收盘价、距 200 日线幅度、年化波动;外加**各周期推荐对比**,一眼看出周期切换后换了哪些票。

### 交互式选股看板

`out/dashboard.html` 是单文件、离线可用的看板:左侧拖 7 个因子权重滑块、点周期按钮(周/双周/月/季/半年/年,
或填自定义交易日数),右侧排序、权重、单票得分实时重算;点某一行可展开该票的因子贡献,支持导出 CSV。
前端算法与 Python 后端完全一致(已做逐票得分对齐校验)。

## 用法二:回测验证(可选)

```bash
python run.py --risk 稳健 --horizon 月 --report out/report_月.html
```

## 可调偏好参数

| 参数 | CLI 选项 | 取值 | 说明 |
|---|---|---|---|
| 风险偏好 | `--risk` | 保守/稳健/平衡/进取/激进 | 决定目标波动率、回撤熔断线、持仓数、单票上限、低波倾斜 |
| 持有周期 | `--horizon` | 短线/波段/中线/长线,或 周/双周/月/季/半年/年 | 决定调仓频率、动量/趋势回看窗口、反转权重 |
| 风格权重 | `--style` | momentum / quality_momentum / low_vol / trend / reversal / high_52w / liquidity | 覆盖默认因子权重,自动归一化 |
| 持仓数量 | `--positions` | 整数 | 覆盖风险等级默认值 |
| 调仓间隔 | `--rebalance` | 交易日数 | 覆盖周期默认值 |
| 现金缓冲 | `--cash` | 0~1 | 常备现金比例 |
| 趋势过滤 | `--no-trend-filter` | 开关 | 关闭"低于200日线不入选" |

生成器会把偏好翻译成:因子权重表、回看窗口、调仓频率、目标波动率、回撤降仓阈值、
单票/现金约束、成本假设等完整策略规格(JSON 落盘到 `out/`),并输出推导说明。

## 回测假设(重要)

- T 日收盘出信号,T+1 生效(无前向偏差);持仓权重按日收益自然漂移
- 成本:佣金 0.03%/单边 + 卖出印花税 0.05% + 滑点 0.10%/单边(可改 JSON)
- 风控覆盖层:60 日已实现波动率超目标 → 降仓;组合回撤超阈值 → 减半仓位
- 数据:腾讯行情日线前复权(公开接口,非一手),沪深300 基准;股票池为**静态样本池**
  (幸存者偏差:只含当前存活大市值股,回测收益因此偏乐观,正式研究需用历史成分快照)

## 两个口径的关系

- `recommend.py`(推荐)= 用最新截面因子值排一次序,回答"下个周期买什么";
- `run.py`(回测)= 历史上每隔 N 天重复同样的排序,回答"这套规则靠不靠谱"。
两者共用同一套因子定义、去极值/标准化逻辑与权重口径,改动一处另一处同步生效。

## 扩展点

- 基本面因子(PE/PB/ROE):需要历史基本面面板数据(当前接口只有快照),接入后可加价值/质量因子
- 历史(point-in-time)成分股:消除幸存者偏差
- 分钟级执行 / VWAP 拆单:见资料汇编 §2