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 | 「优化 ~/策略研究/均线交叉/ 这个策略」 |
优化路径前置验证:
- 检查用户指定的策略目录是否存在
- 检查 STRATEGY_DESIGN.md 是否存在于目录中(通过 ls/cat 验证,不可假设)
- 不存在 → 告知用户缺少设计文档,建议先走 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 前必须确认):
- ✅ 策略目录已创建,路径确认(从 design agent 报告中提取 workspace)
- ✅
STRATEGY_DESIGN.md已写入磁盘(通过 ls/cat 验证) - ✅ 质量检查已通过(退出码 0)或脚本不存在时文件已确认存在
- ✅ 设计摘要已展示
- ✅ 用户已明确回复「确认 / OK / 继续」
以上 5 项全部为 ✅ 时,才允许进入 Phase 2。
Phase 2: 代码生成 + 回测验证
目标:将 STRATEGY_DESIGN.md 翻译为可执行代码,并验证回测结果。 核心规则:AI 生成代码时必须先读取 STRATEGY_DESIGN.md,按文档逐条翻译,不可自由发挥。
前置检查(硬性要求):
STRATEGY_DESIGN.md文件存在于策略目录中(通过 ls/cat 验证,不可假设)- 数据源已就绪(如未就绪,运行
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 棘轮决策的唯一依据。
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 | 竞品/行业动态扫描 | 策略背景分析 |
约束规则
- 不改变策略的核心逻辑方向 — 优化只调整参数和条件,不改变策略类型
- 每次只改一个变量 — 避免多个变更导致无法归因
- git 版本控制 — 所有改动在分支上,可随时回滚
- 评估独立性 — 效果评估必须用独立子Agent,避免「自己改自己评」
- MAX_ROUNDS 限制 — 连续2轮无提升时停止,防止无效循环
- 不推实盘 — 所有策略仅供学习研究,不推荐实盘交易
- 免费优先 — 只推荐免费数据源,不引导用户付费购买数据
禁止事项
- ❌ 不可使用未来数据(如用当天收盘价做当天交易决策)
- ❌ 不可忽略手续费、滑点、印花税
- ❌ 不可在信号中引入未在 STRATEGY_DESIGN.md 中定义的指标
- ❌ 不可将风控阈值设为比 STRATEGY_DESIGN.md 更宽松的值
- ❌ 不可在 Phase 3 优化中修改策略类型(如把趋势跟踪改成均值回归)
- ❌ 不可推荐实盘交易或提供投资建议
- ❌ 不可引导用户购买付费数据服务
进化日志
每次优化记录写入策略目录的 docs/changelog.md:
## 优化历史
| 日期 | 版本 | 触发原因 | 改动内容 | 基线分 | 优化分 | 状态 |
|------|------|---------|---------|--------|--------|------|
| 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 |