# Autostrategy

> 量化交易策略自动生成工具。输入策略需求（明确或模糊）→ 深度分析 → 生成可运行的策略代码 + 回测验证 → 自动优化。 核心创新：STRATEGY_DESIGN.md 作为「系统施工图纸」，AI 生成代码时严格翻译而非自由发挥。 四种入口：(1)明确策略需求→直接分析 (2)模糊需求→诊断推荐→再分析 (3)已有策略→优化迭代 (4)大V/博主→互联网研究→提炼策略。 触发词：「量化策略」「制定策略」「写个策略」「回测」「autostrategy」「策略生成」「量化XX」「XX投资策略」「XX的投资逻辑」。 场景触发：「帮我设计一个均线交叉策略」「我想做一个A股量化策略」「这个策略回测一下」「优化这个策略的回测结果」。 适用市场：A股 / 港股 / 美股（期货、期权暂不支持，后续版本逐步加入）。 人物风格策略也触发：「写一个巴菲特投资策略」「段永平的投资逻辑量化一下」「帮我用索罗斯的反身性做个策略」。 博主策略触发：「根据XX博主的投资观点做个策略」「按XX大V的思路写个策略」「帮我量化XX的炒股方法」「XX博主的投资逻辑做策略」。

- Skill: `zach0911/autostrategy-2` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add zach0911/autostrategy-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zach0911/autostrategy-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zach0911 (https://skillmd.com/u/zach0911)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zach0911/autostrategy-2

---


# Autostrategy · 量化策略自动生成

> ⚠️ 本 Skill 生成的策略仅供学习和研究用途，不构成任何投资建议。
> 量化交易有风险，过往回测表现不代表未来收益。

---

## 核心设计原则

| # | 原则 | 说明 |
|---|------|------|
| 1 | **简洁性优先** | 分数提升必须大于复杂度增加。删条件效果不变=大胜利。 |
| 2 | **DESIGN文档是核心** | 所有策略逻辑先写入 STRATEGY_DESIGN.md，代码从文档严格翻译生成。 |
| 3 | **入口分流** | 不假设用户知道怎么用，提供明确的路径引导。 |
| 4 | **人在回路** | 策略方向、设计文档和回测结果都必须人类确认；优化循环可在用户授权后自主运行。 |
| 5 | **量化评估** | 用 score_strategy() 一个数字决定 keep 或 revert。 |
| 6 | **开箱即用** | 用户只写策略逻辑，行情接入/回测验证由 Skill 处理。 |
| 7 | **免费优先** | 只推荐免费数据源和免费回测平台，不引导用户付费。 |
| 8 | **不推实盘** | Skill 定位是策略创建和验证，不推荐实盘交易。 |
| 9 | **模板驱动** | 用模板保证输出结构和质量的一致性。 |
| 10 | **自包含** | Skill 应该是可独立复制和分发的，不依赖外部状态。 |

---

## 执行流程（调度逻辑）

```
用户输入
    ↓
入口分流（判断路径）
    ↓
Phase 1: 启动设计 Agent → 产出 STRATEGY_DESIGN.md
    ↓
⏸ 审批点 1: 用户确认设计文档
    ↓
Phase 2: 启动代码 Agent → 产出 strategy.py + 回测
    ↓
⏸ 审批点 2: 用户确认回测结果
    ↓
Phase 3: 用户选择优化方式 → 启动对应 Agent / 交互式优化
    ↓
⏸ 审批点 3: 用户最终决策（接受/重做/回 Phase 1）
```

### 入口分流

| 用户输入 | 路径 | 示例 |
|---------|------|------|
| 明确的策略需求 | 直接路径 → Phase 1 | 「帮我做一个双均线交叉策略」 |
| 人物风格策略 | 直接路径 → Phase 1 | 「写一个巴菲特投资策略」 |
| 大V/博主投资策略 | 研究路径 → Phase 1 | 「按XX大V的思路写个策略」 |
| 模糊的需求/意图 | 诊断路径 → Phase 1 | 「我想在A股做量化但不知道从哪开始」 |
| 已有策略需优化 | 优化路径 → Phase 3 | 「优化 ~/策略研究/均线交叉/ 这个策略」 |

**优化路径前置验证**：
1. 检查用户指定的策略目录是否存在
2. 检查 STRATEGY_DESIGN.md 是否存在于目录中（通过 ls/cat 验证，不可假设）
3. 不存在 → 告知用户缺少设计文档，建议先走 Phase 1

---

### Phase 1: 策略设计

> 目标：产出 STRATEGY_DESIGN.md —— 策略的精确设计规格文档。
> ⛔ Phase 1 禁止生成代码。

**启动设计 Agent**：

```
Agent({
  prompt: 读取本 skill 目录下 prompts/design_agent.md 的完整内容
          在 prompt 末尾追加实际参数：
          """
          ## 实际参数
          - user_input: {用户原始输入}
          - market: {目标市场}
          - scripts_dir: {scripts_dir}
          - workspace: {workspace_path}（如用户未指定，可留空由 agent 自行决定）
          """,
  model: sonnet
})
```

Agent 将自主完成：入口分流 → 环境检测 → 多维度分析 → 生成 DESIGN 文档 → 质量检查 → 输出设计报告。

**⏸ 审批点 1：用户确认 STRATEGY_DESIGN.md**

Agent 返回后，展示设计摘要给用户：

```
┌─────────────────────────────────────────────────┐
│  策略设计摘要                                     │
├─────────────────────────────────────────────────┤
│  策略名称:  [名称]                                │
│  策略类型:  [类型]                                │
│  适用市场:  [市场]                                │
│  数据周期:  [周期]                                │
├─────────────────────────────────────────────────┤
│  买入条件:  [条件1] + [条件2] + ...              │
│  卖出条件:  [条件1] / [条件2] / ...              │
│  止损规则:  [止损方式]                            │
│  仓位管理:  [方法]                                │
├─────────────────────────────────────────────────┤
│  信号条件总数:  [N]个                             │
│  风控规则总数:  [N]条                             │
│  已知局限:    [列出关键局限]                      │
└─────────────────────────────────────────────────┘
```

**⛔ Phase 1 → Phase 2 闸门（进入 Phase 2 前必须确认）**：
1. ✅ 策略目录已创建，路径确认（从 design agent 报告中提取 workspace）
2. ✅ `STRATEGY_DESIGN.md` 已写入磁盘（通过 ls/cat 验证）
3. ✅ 质量检查已通过（退出码 0）或脚本不存在时文件已确认存在
4. ✅ 设计摘要已展示
5. ✅ 用户已明确回复「确认 / OK / 继续」

以上 5 项全部为 ✅ 时，才允许进入 Phase 2。

---

---

### Phase 2: 代码生成 + 回测验证

> 目标：将 STRATEGY_DESIGN.md 翻译为可执行代码，并验证回测结果。
> 核心规则：AI 生成代码时必须先读取 STRATEGY_DESIGN.md，按文档逐条翻译，不可自由发挥。

**前置检查**（硬性要求）：
1. `STRATEGY_DESIGN.md` 文件存在于策略目录中（通过 ls/cat 验证，不可假设）
2. 数据源已就绪（如未就绪，运行 `python3 scripts/env_setup.py --install [市场类型]`）

**启动代码 Agent**：

`workspace` 从 Phase 1 design agent 的报告中的「文件路径」字段提取。

```
Agent({
  prompt: 读取本 skill 目录下 prompts/codegen_agent.md 的完整内容
          在 prompt 末尾追加实际参数：
          """
          ## 实际参数
          - workspace: {workspace_path}（从 design agent 报告中提取）
          - scripts_dir: {scripts_dir}
          """,
  model: sonnet
})
```

Agent 将自主完成：读取 DESIGN → 生成 strategy.py + config.yaml + README + requirements.txt → 运行回测 → 输出诊断报告。

**⏸ 审批点 2：用户确认回测结果**

Agent 返回后，展示回测摘要：

```
┌─────────────────────────────────────────────────┐
│  回测结果摘要                                     │
├─────────────────────────────────────────────────┤
│  回测分数:   [score]/100                          │
│  年化收益:   [X]%                                 │
│  最大回撤:   [X]%                                 │
│  夏普比率:   [X]                                  │
│  胜率:       [X]%                                 │
│  总交易次数: [N]                                  │
├─────────────────────────────────────────────────┤
│  过拟合风险: [高/中/低]                           │
│  未来函数:   [通过/警告]                          │
│  稳定性:     [通过/警告]                          │
└─────────────────────────────────────────────────┘
```

- 分数 ≥ 60 且用户满意 → 策略完成
- 分数 < 60 或用户想优化 → 进入 Phase 3
- 用户不满意方向 → 回到 Phase 1

---

### Phase 3: 优化

> 触发条件：Phase 2 回测不达标 / 用户说「优化这个策略」
> 核心思路：结构化诊断 → 候选方案库选方案 → 改DESIGN → 独立回测 → 棘轮决策

**进入 Phase 3 时，主动向用户展示模式选择**：

```
┌─────────────────────────────────────────────────┐
│  策略回测未达标，进入优化阶段。请选择优化方式：    │
│                                                  │
│  A. Agent 自主优化（推荐）                       │
│     → 系统自主跑最多 5 轮优化，5-15 分钟后出报告  │
│     → 期间你可以做其他事                         │
│                                                  │
│  B. 交互式优化                                   │
│     → 每轮优化都由你确认后再继续                  │
│     → 适合想深入参与优化过程的场景                │
└─────────────────────────────────────────────────┘
```

**模式 A: Agent 自主优化**

```
# Step A1: 准备上下文
收集以下信息：
  - workspace: 策略工作区目录的绝对路径
  - market: 目标市场（从 config.yaml 读取）
  - baseline_score: 初始回测分数（从 backtest_result.json 读取）
  - scripts_dir: autostrategy scripts 目录的绝对路径

# Step A2: 启动自主优化 Agent
Agent({
  prompt: 读取本 skill 目录下 prompts/optimization_agent.md 的完整内容
          在 prompt 末尾追加实际参数：
          """
          ## 实际参数
          - workspace: {workspace_path}
          - market: {market}
          - baseline_score: {score}
          - scripts_dir: {scripts_path}
          """,
  model: sonnet,
  timeout: 600000  # 10 分钟上限
})

Agent 将自主完成：基线快照 → 5轮诊断/修改/回测/评分/棘轮决策 → 输出结构化报告
```

**模式 B: 交互式优化**

沿用原有交互式优化流程（每轮用户确认），详见 prompts/optimization_agent.md 中的棘轮逻辑。

**⏸ 审批点 3：用户最终决策**

根据优化报告，给出选项：
- A. 接受当前结果 — 策略优化完成
- B. 探索性重做 — 换策略方向（需用户确认后回到 Phase 1）
- C. 换标的 — 换交易标的（需用户确认后回到 Phase 1）
- D. 回到 Phase 1 — 策略设计有根本问题，重新开始

---

## 策略评分函数 score_strategy()

> 权威实现见 `scripts/run_backtest.py`。将回测结果 + 复杂度映射为 0-100 分，是 Phase 3 棘轮决策的唯一依据。

```python
MARKET_BENCHMARKS = {
    "A股": {"index": "000300.SH", "avg_annual_return": 8.0},
    "港股": {"index": "HSI",      "avg_annual_return": 5.0},
    "美股": {"index": "^GSPC",    "avg_annual_return": 10.0},
}

def score_strategy(backtest_result: dict, design_doc: dict, market: str = "A股") -> float:
    baseline_return = MARKET_BENCHMARKS.get(market, MARKET_BENCHMARKS["A股"])["avg_annual_return"]
    score = 0
    score += min(backtest_result['annual_return'] / (baseline_return * 2), 1.0) * 25
    score += max(1 - backtest_result['max_drawdown'] / 30, 0) * 20
    score += min(backtest_result['sharpe'] / 2.0, 1.0) * 25
    score += min(backtest_result['win_rate'] / 60.0, 1.0) * 15
    score += min(backtest_result['profit_loss_ratio'] / 2.5, 1.0) * 15
    # 简洁性惩罚
    condition_count = design_doc['num_buy_conditions'] + \
                      design_doc['num_sell_conditions'] + \
                      design_doc['num_filters'] + \
                      design_doc['num_risk_rules']
    complexity_penalty = max(0, (condition_count - 10) * 1.5)
    return max(0, score - complexity_penalty)
```

---

## 简洁性准则

| 场景 | 判断 | 处理 |
|------|------|------|
| 加了2个过滤条件，score提升0.5分 | 复杂度增加不值得 | 回滚 |
| 删了1个过滤条件，score不变 | 简化胜利 | 保留 |
| 加了1个过滤条件，score提升5分 | 值得 | 保留 |
| 条件总数超过10个 | 过度复杂 | 惩罚扣分 |

---

## 策略类型参考

| 类型 | 触发示例 | 数据需求 | 回测复杂度 |
|------|---------|---------|-----------|
| **趋势跟踪** | 「均线交叉」「突破策略」 | 日线K线 | 低 |
| **均值回归** | 「超跌反弹」「RSI策略」 | 日线K线 + 技术指标 | 低 |
| **多因子选股** | 「财务因子」「价值投资」 | 基本面数据 + K线 | 中 |
| **统计套利** | 「配对交易」「协整」 | 多只股票K线 | 高 |
| **事件驱动** | 「财报后走势」「公告策略」 | 新闻/公告数据 | 高 |
| **网格交易** | 「定投网格」「震荡网格」 | 分钟线/K线 | 低 |

---

## Skill 协作关系

| 已有 Skill | 协作方式 | 调用场景 |
|-----------|---------|---------|
| **futuapi** | 数据获取 + 模拟交易 | 港美股策略 |
| **ftshare-all-in-one** | A股全品类数据获取 | A股策略首选 |
| **securities-app-radar** | 竞品/行业动态扫描 | 策略背景分析 |

---

## 约束规则

1. **不改变策略的核心逻辑方向** — 优化只调整参数和条件，不改变策略类型
2. **每次只改一个变量** — 避免多个变更导致无法归因
3. **git 版本控制** — 所有改动在分支上，可随时回滚
4. **评估独立性** — 效果评估必须用独立子Agent，避免「自己改自己评」
5. **MAX_ROUNDS 限制** — 连续2轮无提升时停止，防止无效循环
6. **不推实盘** — 所有策略仅供学习研究，不推荐实盘交易
7. **免费优先** — 只推荐免费数据源，不引导用户付费购买数据

---

## 禁止事项

- ❌ 不可使用未来数据（如用当天收盘价做当天交易决策）
- ❌ 不可忽略手续费、滑点、印花税
- ❌ 不可在信号中引入未在 STRATEGY_DESIGN.md 中定义的指标
- ❌ 不可将风控阈值设为比 STRATEGY_DESIGN.md 更宽松的值
- ❌ 不可在 Phase 3 优化中修改策略类型（如把趋势跟踪改成均值回归）
- ❌ 不可推荐实盘交易或提供投资建议
- ❌ 不可引导用户购买付费数据服务

---

## 进化日志

每次优化记录写入策略目录的 `docs/changelog.md`：

```markdown
## 优化历史

| 日期 | 版本 | 触发原因 | 改动内容 | 基线分 | 优化分 | 状态 |
|------|------|---------|---------|--------|--------|------|
| 2026-04-18 | v1.1 | 夏普比率<1.0 | 增加RSI过滤条件 | 52 | 68 | keep |
| 2026-04-18 | v1.2 | 胜率<45% | 调整止盈比例 | 68 | 71 | keep |
| 2026-04-18 | v1.3 | 收益率下降 | 增加成交量过滤 | 71 | 69 | revert |
```

