# Quant Strategy Quick Backtest

> 证券金融工程研究员轻量化策略速回测技能。当用户要求进行策略回测、量化策略测试、简易策略验证、快速计算年化收益/最大回撤/夏普比率、策略过拟合检测时使用。包括"回测一下这个策略"、"测试均线交叉策略"、"策略速评"、"快速回测"、"算一下策略收益"、"策略有效性验证"、"帮我回测下"、"看看这个策略怎么样"、"策略表现如何"、"量化回测"、"策略回测报告"等表述。即使用户只说"回测"、"测试策略"、"算下收益"等简短表述也要触发。本技能自动解析策略规则、获取行情数据或模拟数据、执行回测计算、输出核心绩效指标，并附带过拟合风险提示，生成标准化Markdown格式回测报告。

- Skill: `aliyun/quant-strategy-quick-backtest` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aliyun/quant-strategy-quick-backtest`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aliyun/quant-strategy-quick-backtest/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: aliyun (https://skillmd.com/u/aliyun)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aliyun/quant-strategy-quick-backtest

---


# 量化策略速回测技能 (Quant Strategy Quick Backtest)

## 技能定位

为金融工程研究员提供**轻量化、快速响应**的策略回测能力，支持简易策略规则的解析与验证，快速输出核心绩效指标，并系统性提示过拟合风险。

> **适用场景**：策略灵感快速验证、晨会策略速评、投研交流中的即时测算、策略框架初步筛选。
> **不适用场景**：高频策略回测、复杂多因子模型、需要精细交易成本模拟的实盘级回测。

## 数据采集指引 (gildata-aidata 工具映射)

**所有行情数据必须通过 `gildata-aidata` 服务获取**，具体工具调用如下：

### 1. 指数行情数据 (作为基准或标的)
```
finx gildata-aidata IndexDailyQuote --body '{"query": "查询沪深300指数过去3年的每日收盘价、涨跌幅、成交量"}'
```
*   **用途**：获取宽基指数（如沪深300、中证500、创业板指）的历史日线行情，用于计算基准收益或作为 ETF 轮动策略的标的。

### 2. 个股行情数据 (作为策略标的)
```
finx gildata-aidata StockDailyQuote --body '{"query": "查询贵州茅台过去3年的每日收盘价、开盘价、最高价、最低价、成交量"}'
```
*   **用途**：获取个股历史日线行情，用于单标的策略回测或构建股票池。

### 3. 财务/估值数据 (用于基本面策略)
```
finx gildata-aidata StockValueAnalysis --body '{"query": "查询全市场A股最新PE(TTM)、PB(LF)"}'
```
*   **用途**：获取截面估值数据，辅助构建价值选股策略。

## 执行流程

### 第一步：解析策略规则

从用户输入中提取以下关键信息：

| 要素 | 说明 | 示例 |
|------|------|------|
| **策略类型** | 均线/动量/反转/突破/轮动/自定义 | 双均线交叉 |
| **标的范围** | 个股/指数/ETF/行业/自定义池 | 沪深300成分股 |
| **入场条件** | 触发买入的信号规则 | MA5上穿MA20 |
| **出场条件** | 触发卖出的信号规则 | MA5下穿MA20 / 止损8% |
| **持仓权重** | 等权/市值加权/自定义 | 等权配置 |
| **调仓频率** | 每日/每周/每月/信号驱动 | 信号驱动 |
| **回测区间** | 起止时间（默认近3年） | 2023-01-01 至 2026-04-27 |
| **基准指数** | 对比基准（默认沪深300） | 沪深300 |

**参数缺失处理**：若用户未明确指定，使用以下默认值：
- 回测区间：近3年
- 初始资金：100万元
- 基准指数：沪深300（000300.SH）
- 交易成本：单边千分之一（含佣金+印花税+滑点）
- 调仓频率：信号驱动

### 第二步：获取行情数据

按优先级尝试以下数据源：

1.  **gildata-aidata**：调用 `IndexDailyQuote` 或 `StockDailyQuote` 获取标的历史日线行情数据（开盘价、收盘价、最高价、最低价、成交量）。**这是首选数据源。**
2.  **eastmoney-mx**：若 `gildata-aidata` 未覆盖，可尝试调用 `search-data` 获取补充数据。
3.  **Python 代码 + 开源库**：在沙箱中使用 `akshare` 或 `yfinance` 获取数据。
4.  **网络搜索**：通过 `web_search` 搜索关键数据点，辅助构建数据集。
5.  **模拟数据**：若以上均不可用，生成符合统计特征的模拟数据，并在报告中明确标注。

**数据要求**：
- 频率：日线级别（最低要求）
- 字段：日期、开盘价、收盘价、最高价、最低价、成交量（至少需要收盘价）
- 长度：覆盖完整回测区间，含至少250个交易日/年

### 第三步：执行回测计算

使用 Python 代码在沙箱环境中执行回测，核心逻辑：

```python
# 回测计算核心框架
import pandas as pd
import numpy as np

class QuickBacktest:
    def __init__(self, prices, signals, initial_capital=1000000, cost_rate=0.001):
        self.prices = prices          # 价格序列
        self.signals = signals        # 交易信号（1=买入，-1=卖出，0=持有）
        self.initial_capital = initial_capital
        self.cost_rate = cost_rate
    
    def run(self):
        # 计算每日持仓权重
        positions = self.signals.cumsum().clip(-1, 1)  # 简化为多空或纯多
        # 计算每日收益（扣除交易成本）
        daily_returns = prices.pct_change()
        strategy_returns = positions.shift(1) * daily_returns
        # 扣除交易成本
        trades = positions.diff().abs()
        strategy_returns -= trades * self.cost_rate
        # 计算净值曲线
        nav = (1 + strategy_returns).cumprod() * self.initial_capital
        return nav, strategy_returns
```

### 第四步：计算核心绩效指标

必须计算以下指标：

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **年化收益率** | `(总收益率 + 1)^(252/交易日数) - 1` | 年化复利收益 |
| **最大回撤** | `max((nav_peak - nav_trough) / nav_peak)` | 历史最大亏损幅度 |
| **夏普比率** | `(年化收益 - 无风险利率) / 年化波动率` | 风险调整后收益，无风险利率取2.5% |
| **胜率** | `盈利交易次数 / 总交易次数` | 交易成功比例 |
| **盈亏比** | `平均盈利 / 平均亏损` | 盈利与亏损的比值 |
| **年化波动率** | `日收益率标准差 × √252` | 收益波动程度 |
| **Calmar比率** | `年化收益 / 最大回撤` | 收益回撤比 |
| **超额收益** | `策略年化收益 - 基准年化收益` | 相对基准的alpha |
| **信息比率** | `超额收益均值 / 超额收益标准差 × √252` | 超额收益的稳定性 |

### 第五步：过拟合风险检测

系统性检查以下过拟合信号，逐项评估：

#### 过拟合检测清单

| 检测项 | 评估标准 | 风险等级 |
|--------|----------|----------|
| **参数数量** | 自由参数 ≤ 3 个为安全，> 5 个高风险 | 🟢🟡🔴 |
| **样本外表现** | 训练期与测试期夏普差异 > 50% 预警 | 🟢🟡🔴 |
| **交易频率** | 年化交易次数 > 100 次可能过度拟合噪音 | 🟢🟡🔴 |
| **参数敏感性** | 参数微调 ±10% 导致夏普变化 > 30% 预警 | 🟢🟡🔴 |
| **经济逻辑** | 策略是否有合理的经济学解释 | 🟢🟡🔴 |
| **数据窥探** | 是否经过大量策略筛选后报告最优结果 | 🟢🟡🔴 |
| **幸存者偏差** | 是否仅使用当前存活标的回测 | 🟢🟡🔴 |

**过拟合风险评级**：
- 🟢 **低风险**：0-1 项预警
- 🟡 **中风险**：2-3 项预警
- 🔴 **高风险**：≥4 项预警

### 第六步：生成回测报告

严格按照以下模板生成 Markdown 格式报告：

```markdown
# [策略名称] 速回测报告

> **报告日期**：YYYY-MM-DD
> **回测区间**：YYYY-MM-DD 至 YYYY-MM-DD
> **数据频率**：日线
> **标的范围**：[标的描述]

---

## 一、策略概要

| 要素 | 内容 |
|------|------|
| 策略类型 | [均线/动量/反转/突破/轮动] |
| 入场信号 | [具体规则] |
| 出场信号 | [具体规则] |
| 持仓方式 | [等权/市值加权/自定义] |
| 调仓频率 | [每日/每周/每月/信号驱动] |
| 交易成本 | 单边 ‰ |

---

## 二、核心绩效指标

| 指标 | 策略 | 基准（沪深300） | 超额 |
|------|------|-----------------|------|
| 年化收益率 | **%** | % | +.% |
| 最大回撤 | **.%** | .% | -.% |
| 夏普比率 | **.** | . | — |
| Calmar比率 | **.** | . | — |
| 年化波动率 | .% | .% | — |
| 胜率 | **.%** | — | — |
| 盈亏比 | **.** | — | — |
| 信息比率 | **.** | — | — |
| 总交易次数 | **次** | — | — |

---

## 三、净值曲线与关键统计

[如有条件，生成并插入净值曲线对比图]

### 分年度表现

| 年份 | 策略收益 | 基准收益 | 超额收益 |
|------|----------|----------|----------|
| 2024 | .% | .% | +.% |
| 2025 | .% | .% | +.% |
| 2026 | .% | .% | +.% |

### 最大回撤区间

- **最大回撤**：.%
- **回撤区间**：YYYY-MM-DD 至 YYYY-MM-DD（持续 个交易日）
- **恢复时间**：个交易日（若未恢复则标注"尚未恢复"）

---

## 四、过拟合风险评估

### 风险检测清单

| 检测项 | 结果 | 风险等级 |
|--------|------|----------|
| 参数数量 | [ ] 个 | 🟢/🟡/🔴 |
| 样本外表现 | [描述] | 🟢/🟡/🔴 |
| 交易频率 | [ ] 次/年 | 🟢/🟡/🔴 |
| 参数敏感性 | [描述] | 🟢/🟡/🔴 |
| 经济逻辑 | [描述] | 🟢/🟡/🔴 |
| 数据窥探 | [描述] | 🟢/🟡/🔴 |
| 幸存者偏差 | [描述] | 🟢/🟡/🔴 |

### 综合评级：🟢低风险 / 🟡中风险 / 🔴高风险

### 风险解读

[针对每一项预警项，给出具体解释和改进建议。例如：
- **参数数量**：策略使用2个自由参数（MA5、MA20周期），在安全范围内。但需注意，若后续优化中增加止损、止盈、仓位管理等参数，可能引发参数过拟合。
- **交易频率**：年化交易次数45次，处于合理区间。若超过100次/年，需警惕策略可能在拟合市场噪音。]

---

## 五、策略评价与建议

### 优势
1. [列出策略的核心优势]
2. [...]

### 局限
1. [列出策略的已知局限]
2. [...]

### 改进建议
1. [给出具体可操作的改进方向]
2. [...]

---

## 六、重要声明

> ⚠️ **本回测为轻量化快速验证，不构成投资建议。**
> 
> 1. 回测结果基于历史数据，不代表未来表现
> 2. 交易成本采用简化假设，实际交易摩擦可能更高
> 3. 未考虑流动性约束、涨跌停限制、停牌等实盘因素
> 4. 过拟合风险评估为定性判断，建议进一步进行样本外检验和蒙特卡洛模拟
> 5. 实盘部署前，请务必进行更严格的回测验证和模拟盘测试
```

## 常见策略模板

### 模板1：双均线交叉策略

```
策略规则：
- 短期均线：MA_N（N=5/10/20）
- 长期均线：MA_M（M=20/60/120）
- 入场：MA_N 上穿 MA_M
- 出场：MA_N 下穿 MA_M
- 持仓：全仓或等权
```

### 模板2：动量策略

```
策略规则：
- 观察窗口：过去N日（N=20/60/120）
- 排序指标：区间收益率
- 买入：排名前K%的标的
- 卖出：排名后K%或持仓跌出排名
- 调仓：每月/每季度末
```

### 模板3：均值反转策略

```
策略规则：
- 参考基准：MA_N 或布林带
- 入场：价格跌破下轨 / 偏离均线超过X个标准差
- 出场：价格回归均线 / 触及上轨
- 止损：固定百分比或ATR倍数
```

### 模板4：突破策略

```
策略规则：
- 突破参考：N日最高/最低价、唐奇安通道
- 入场：收盘价突破N日高点
- 出场：收盘价跌破M日低点
- 过滤：突破时需伴随成交量放大
```

## 注意事项

1.  **数据源优先**：优先使用 `gildata-aidata` 获取行情数据，确保数据质量和一致性。
2.  **参数稳健性**：建议在报告中展示参数敏感性分析（如参数 ±20% 的表现变化）。
3.  **基准选择**：基准应与策略风险特征匹配，股票策略用沪深300，债券策略用中债综合。
4.  **报告透明度**：若使用模拟数据，必须在报告开头显著位置标注。
5.  **迭代建议**：速回测仅用于初步筛选，有潜力的策略应进入深度回测流程。

