跳到主要内容

Agent Lab 策略研究指南

重要声明:策引是个人开发的投资策略分析工具和教育平台,通过模拟组合展示交易规则、仓位变化与历史表现。平台不提供投资建议,所有策略分析仅供研究参考。真实账户中的决策与风险由用户自行判断和承担。

一个研究问题的完整流程

研究问题 → 假设 → 基线 → 解析符号 → 构建完整配置 → 校验 → 修复 → 创建 → 轮询 → 读取证据 → 对照假设 → 记录局限 → 受控下一步

完整的实验配置

一次实验用一个完整配置。strategy_definition 只是其中的一部分:

{
"name": "QQQ 长期趋势实验",
"description": "测试 200 日均线过滤是否改善长期持有表现",
"symbols": [
{ "symbol": "QQQ" }
],
"start_date": "2015-01-01",
"end_date": "2025-12-31",
"currency": "USD",
"market": "US",
"commission": 0,
"strategy_definition": {
"...": "标准 Strategy DSL"
}
}

概念结构:

Lab Portfolio Config
|
+-- 研究元数据
| +-- name
| +-- description
|
+-- 标的范围
| +-- symbols(1–10 个,来自 resolve_symbols)
|
+-- 市场上下文
| +-- market
| +-- currency
|
+-- 回测窗口
| +-- start_date
| +-- end_date
|
+-- 执行假设
| +-- commission
| +-- update_time(可选)
|
+-- strategy_definition
+-- 标准 Strategy DSL(指标、信号、资金规则)

不要手写这些字段:code / test_code / job_id / is_official / created_at / updated_at / last_data_update_at / update_status / 正式组合归属与订阅字段。它们由服务端或其它产品域产生。idempotency_keycreate_lab_run 的工具参数,不在配置里。

四个工具语义

resolve_symbols

{ "symbols": ["QQQ"], "market": "US", "currency": "USD" }
  • 返回策引注册表的规范符号,是符号身份的服务端真值
  • 构建配置前、符号身份不确定时使用;不要凭模型记忆猜 ticker / 别名;
  • 无法解析或歧义会结构化返回,便于修复请求。

validate_strategy_config

  • 用与创建完全相同的准备路径校验完整配置
  • 不创建实验、不持久化任何东西;
  • valid: true 表示当前产品契约支持并可执行,不等于赚钱、稳健或推荐。

create_lab_run

  • 服务端会再次校验;
  • 传入 idempotency_key(1–120 字符)让创建幂等;
  • 成功返回高熵 test_ 码 + status: PENDING + lab_url/lab/{test_code},不是 /portfolios/{test_code});
  • 请求级失败(校验、幂等冲突、限流、队列繁忙)可能意味着没有创建实验,不要把工具错误当研究结果。

get_lab_run

PENDING 排队中或执行中(瞬时状态)
READY 实验完成并产出要求产物(持久,来自稳定 manifest)
FAILED 实验未能完成(持久,含结构化失败信息)
  • READY / FAILED 来自 R2 终端 manifest,稳定可重读;
  • 没有 RUNNING 状态;
  • READY 时包含 config / summary,以及可用时的 evidence(并非每次都有);FAILED 时附带 code / message / retryable / context / suggestion。
READY != 好策略:实验完整跑完并产出产物,策略历史表现差也照样 READY
FAILED != 假设被证伪:实验本身没跑完,不能推出投资结论

幂等

  • 同一 idempotency_key + 同一请求 → 返回原始实验;
  • 同一 key + 不同请求 → IDEMPOTENCY_CONFLICT
  • 创建中重试 → IDEMPOTENCY_IN_PROGRESS / 预留不可用(稍后重试)。

请求级失败 vs 实验 FAILED

类型例子含义
请求/工具失败配置无效、幂等冲突、限流、队列繁忙、会话过期可能没有创建实验,修复请求后重试
实验状态 FAILEDmanifest 里 error.code实验确实存在但未能完成

错误修复

请求级错误(先修请求再重试):

RATE_LIMITED 每个会员每 10 分钟最多 2 个新实验,稍后再试
LAB_BUSY 队列满,稍后重试
IDEMPOTENCY_CONFLICT 换新 idempotency_key(或复用原请求)
SESSION_INVALID_OR_EXPIRED 重新创建会话

实验 FAILED(manifest 结构化错误,示例):

{
"status": "FAILED",
"error": {
"code": "MISSING_SESSION_BAR",
"message": "...",
"retryable": false,
"context": { "symbol": "...", "session_date": "..." },
"suggestion": "..."
}
}

修复思路:只改坏掉的那部分,再 validate_strategy_config,通过后再创建。

阅读结果

  • 回测 ≠ 预测;CAGR / Sharpe 要和最大回撤、换手、交易次数、样本量一起看;
  • 注意制度依赖(不同市场环境)、费用与现金暴露、数据/引擎/配置上下文;
  • rejected / inconclusive 是合法研究结论;
  • 单一高历史收益不是稳健性的证据。

受控实验

假设 → 基线 → 证据 → 诊断 → 只改一个变量 → 下一个实验

避免"大规模扫参 → 挑历史赢家 → 当推荐"。不要教"找历史最高收益"。

成功端到端示例(真实运行记录)

用户请求:研究 QQQ 从 2015 年起的简单长期趋势策略。

研究问题:观察 SMA 50/200 金叉趋势规则在 2015–2025 QQQ 上的历史行为。

假设:趋势向上时持有、向下时持币,可以在该窗口获得正的风险调整后收益。

流程(Harness 用四个工具完成;以下是一次真实运行的记录,由 Pi + DeepSeek V4 Flash 按 prompt.md 引导完成):

  1. resolve_symbols{"resolved": [{"symbol": "QQQ", "name": "QQQ"}], "unresolved": []}
  2. 构建完整配置并校验。下面是实际通过验证的完整配置(DSL 的 capital_strategy 使用当前契约要求的 name 形态):
{
"name": "QQQ Long-Term SMA Trend (50/200 Golden Cross) 2015-2025",
"description": "Hypothesis: A simple long-term SMA trend-following rule (SMA50/200 golden cross) on QQQ from 2015 to 2025 produces positive risk-adjusted returns by staying in during uptrends and moving to cash during downtrends.",
"symbols": [{ "symbol": "QQQ" }],
"start_date": "2015-01-01",
"end_date": "2025-12-31",
"currency": "USD",
"market": "US",
"commission": 0,
"strategy_definition": {
"trade_strategy": {
"indicators": [
{ "id": "shortMA", "type": "SMA", "params": { "period": 50, "column": "Close" } },
{ "id": "longMA", "type": "SMA", "params": { "period": 200, "column": "Close" } }
],
"signals": [
{ "id": "buy_signal", "type": "Crossover", "params": { "mode": "simple" }, "inputs": [{ "ref": "shortMA" }, { "ref": "longMA" }] },
{ "id": "sell_signal", "type": "Crossunder", "params": { "mode": "simple" }, "inputs": [{ "ref": "shortMA" }, { "ref": "longMA" }] }
],
"outputs": { "buy_signal": "buy_signal", "sell_signal": "sell_signal" }
},
"capital_strategy": {
"name": "PercentCapitalStrategy",
"params": { "initial_capital": 100000, "percents": 100, "max_positions": 1 }
}
}
}
  1. validate_strategy_configvalid: true(canonical 含完整 envelope);
  2. create_lab_run(带 idempotency_key)→ {"code": "test_d9885d...f110", "status": "PENDING", "lab_url": "/lab/test_d9885d..."}
  3. get_lab_run 轮询:PENDING → READY
  4. 读取 summary:
CAGR 14.31% MaxDD -26.45% Sharpe 0.90 Calmar 0.54
volatility 17.2% total_trades 6(4 赢 / 1 亏 / 1 持有中) win_rate 66.7%
profit_loss_ratio 5.24 净值 4.71x
  1. evidence(scope: time_series_signal_evidence):当前状态 H(持有中),含 data_quality / provenance / recent_action_events;2022 年度 -11.4%(同期 QQQ 约 -33%);
  2. 解读与反证:规则把交易压到 6 笔、避开了 2022 大部分下跌;但 2020 年 3 月随大盘下跌后在接近底部卖出(2020-05 离场),是慢均线的典型弱点。单标的单窗口,不能外推;
  3. 下一步:只改一个变量(例如用 10 月均线价格过滤替代 50/200 交叉)跑下一个受控实验。

失败 → 修复端到端示例(真实记录)

场景 A(capital_strategy 形状错误,真实发生):配置里 capital_strategy 写成 {"type": "PercentCapitalStrategy", "id": "cap", ...}validate_strategy_config 返回结构化错误:

Portfolio configuration validation failed: /strategy_definition must have required property 'capital_strategy'

Harness 下钻 schema 后发现当前契约要求 name 形态,改为:

{
"capital_strategy": {
"name": "PercentCapitalStrategy",
"params": { "initial_capital": 100000, "percents": 100, "max_positions": 1 }
}
}

→ 再校验 valid: true → 继续创建。只改了坏掉的那一部分。

场景 B(实验 FAILED)get_lab_run 返回 FAILED + 结构化错误(如 MISSING_SESSION_BAR)→ 按 suggestion 判断是否可修复;retryable: false 时停止,不把它当投资结论。

从实验到正式组合(未来产品边界)

当前 Agent Lab 不提供"从实验创建组合"动作,MVP 的 MCP 也不能创建/更新/订阅/发布正式组合。

如果未来产品提供该能力,语义必须是:

test_ 实验的配置与证据
-> 用户主动选择"从实验创建组合"
-> 正常正式校验 + 明确确认
-> 新建 custom_ 正式组合(原实验保持不变,不重命名/不修改 test_)

结果报告格式

假设
基线
实验改动
结果
证据
反证 / 局限
解读
下一步

避免:"这个策略最好""你应该买""保证""推荐配置"。回测是对历史行为的证据,不是推荐。


重要提醒:本文内容仅供研究参考,不构成投资建议。实验结果是历史模拟行为,不代表未来表现;请结合你的资金安排、已有持仓与可承受回撤,自行判断真实账户中的操作与风险。

开始使用连接你的 Agent 或查看 Agent Lab 概览