1. 从「手动盯盘」到「循环自跑」:量化交易 Agent 的真实痛点
先说结论:量化交易本身就是一个循环——拉行情、算信号、回测、下单、风控、复盘,然后重复。区别只在于,这个循环里塞的是几百个分析师,还是一个会自己迭代的 Agent 系统。
大多数散户量化的现状是这样的:打开 Claude Code,贴一段行情数据,等它给个信号,看一眼觉得有道理,再手动跑个回测,然后关掉窗口。第二天重复一遍。你以为你在用 AI,其实你自己就是那个 for 循环的循环体。Agent 只是循环里被调用的一次函数,状态不累积,经验不复利,你合上电脑它就停了。
Loop Engineering(循环工程)要解决的就是这件事。它的核心不是「让 Agent 更聪明」,而是「让循环自己转起来」:你定义目标和停止条件,系统自己拉数据、生成信号、独立验证、执行、写回教训,然后进入下一轮。Agent 单次运行会忘掉上下文,但循环不会——状态写在文件里,教训写进技能文件,跨运行累积。
这套东西适合谁?适合已经会用 Claude Code 或类似 agentic 工具、手上有基础策略逻辑、但被「必须全程坐在键盘前」卡住的 solo builder。你不需要几百人的团队,你需要的是把六个组件接成一个闭环。下面我把整套配置拆成可复制的步骤,包括 MCP 工具接入、失败重试和日志回放验证。
2. 前置准备:TaoToken 接入与 Claude Code 环境配置
在写循环之前,得先让 Agent 能稳定调用模型。这一步很多人卡在鉴权和 Base URL 上,我直接把配置给全。
TaoToken 是一个模型调用入口,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api (注意 API 地址不加 UTM 参数)。它的作用是让你在 Claude Code、Codex 这类工具里统一配置模型访问,不用每个工具单独折腾一遍鉴权。
先拿 Key。打开控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面创建一个新 Key,复制出来。这个 Key 后面会写进配置文件,别贴到公开仓库里。
Claude Code 的配置走 settings 文件。在项目根目录建.claude/settings.json,写入下面这段(路径和字段名保持原样,别改):
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-5-20250929" }, "permissions": { "allow": ["Bash", "Read", "Write", "Edit"] } }三件套对齐一下:Base URL 是https://taotoken.net/api,Key 是你在控制台生成的那串,Model ID 用claude-sonnet-4-5-20250929(生成信号用 Sonnet,验证阶段我们换成 Opus,后面会讲)。这三个字段任何一个写错,请求都会失败,最常见的报错是 401 和local proxy failed,第 5 节专门排。
如果你用的是 Codex,配置写在~/.codex/auth.json,结构类似:
{ "OPENAI_BASE_URL": "https://taotoken.net/api", "OPENAI_API_KEY": "sk-你的TaoToken密钥", "model": "gpt-5-codex" }Cline 或带 MCP 的编辑器,则在 MCP 配置里填 Base URL 和 Key,Model ID 单独指定。不管哪个工具,记住「Base URL + Key + Model ID」这三件套必须同时正确,缺一个都连不上。
配完之后先别急着写循环,跑一次最小验证:在 Claude Code 里输入一句「列出当前目录文件」,能正常返回就说明链路通了。这一步过了,再往下搭循环。
3. 可复制配置:把六个组件接成自改进闭环
循环工程要能稳定跑,必须凑齐六个组件,缺一个都会在某天悄无声息地失效。我按量化场景逐个给配置。
Automation(触发器):循环的心跳。用 cron 或 Claude Code 的 hook 都行。固定节奏用/loop,跑到条件满足才停用/goal。比如每 5 分钟拉一次行情:
*/5 * * * * cd /path/to/quant-loop && claude -p "$(cat prompts/ingest.md)" >> logs/ingest.log 2>&1Skill(技能文件):建SKILL.md,写你的交易规则、历史教训、避坑清单。这是系统自我改进的落点——每次亏损,把教训追加进去,下一轮 Agent 读到的就是更新后的规则。
# SKILL.md ## Alpha 规则 - 动量突破需成交量放大 1.5 倍以上才有效 - 震荡市禁用趋势策略 ## 历史教训 - 2024-11-03:未过滤财报日,信号被跳空打穿,新增「财报前 2 日禁开仓」State 文件:建STATE.md,Agent 每轮开始读、结束写。它是循环的记忆脊柱,也是出事时唯一能回溯的审计日志。
# STATE.md ## 当前持仓 - BTCUSDT long 0.5 @ 62000 ## 上轮动作 - 生成 3 个信号,2 个通过验证,1 个被风控拦截 ## 待处理 - 回测 Sharpe 未达 1.5,需调整参数Verifier(验证器):生成信号的 Agent 不能自己当裁判。单独起一个验证 Agent,用不同模型(生成用 Sonnet,验证用 Opus),只看信号结果不看生成推理。这是 Maker-Checker 模式,华尔街 prop shop 内部都这么干。
Worktrees(工作树):用 git worktree 让信号研究、回测、风控并行跑,互不干扰:
git worktree add ../quant-signal feature/signal git worktree add ../quant-risk feature/riskConnectors(连接器):基于 MCP 接外部世界。行情源、数据库、通知渠道都走 MCP。在.claude/mcp.json里配:
{ "mcpServers": { "market-data": { "command": "npx", "args": ["-y", "@your/market-mcp"], "env": { "API_KEY": "your-data-key" } }, "notify": { "command": "npx", "args": ["-y", "@your/slack-mcp"], "env": { "SLACK_TOKEN": "xoxb-xxx" } } } }六个组件接成五个子循环:数据摄取 → 信号生成 → 验证 → 执行 → 风控,教训写回 SKILL.md,然后重新开始。停止条件必须外部可验证,比如「最近 30 笔 Sharpe > 1.5 且最大回撤 < 5%」,绝不能用「Agent 说它做完了」当退出条件——它经常干到一半就宣称完成,坏仓位还开着。
4. 验证请求与日志回放:一次失败重试的完整演示
配置写完,得验证循环真的在转。我演示一次失败重试加日志回放。
先手动触发一轮信号生成,看返回:
claude -p "读取 SKILL.md 和 STATE.md,拉取最近 1 小时 BTCUSDT 行情,生成交易信号,写入 STATE.md"正常返回会带信号和写入确认。假设这次验证 Agent 判定信号无效(比如成交量没放大),循环应该自动重试而不是退出。重试逻辑写在 prompt 里:
## 重试规则 - 若验证未通过,读取验证 Agent 的拒绝理由 - 将理由追加到 SKILL.md 的「历史教训」 - 调整参数后重新生成,最多重试 3 次 - 3 次仍失败则写入 STATE.md 并通知跑一轮看日志:
tail -f logs/ingest.log你会看到类似这样的回放:
[12:05:01] 拉取行情 60 条 [12:05:03] 生成信号: BTCUSDT long [12:05:05] 验证: 拒绝 - 成交量未达 1.5 倍 [12:05:06] 写入教训到 SKILL.md [12:05:08] 重试生成信号 [12:05:10] 验证: 通过 [12:05:11] 写入 STATE.md日志回放的价值在于:出问题时你能完整回溯每一步,而不是面对一个黑盒。我试过把 STATE.md 和日志对照着看,能快速定位是数据源断了、验证器误杀,还是风控规则太严。
验证模型是否正常响应,可以在模型对话页 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 手动发一条测试请求,确认 Sonnet 和 Opus 都能调通。如果长期跑编码和 Agent 任务,Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 更适合高频循环场景。
5. 常见报错排查:401、local proxy failed 与 OAuth 问题
循环跑不起来,九成是配置问题。我把踩过的坑列出来对照。
401 Unauthorized:Key 错了或没生效。检查.claude/settings.json里的ANTHROPIC_AUTH_TOKEN是否和控制台生成的一致,注意别多复制空格。如果刚改完配置,重启 Claude Code 让环境变量重新加载。
local proxy failed:通常是 Base URL 写错或网络层拦截。确认ANTHROPIC_BASE_URL是https://taotoken.net/api,结尾不要多加斜杠。如果用了本地代理工具,检查它是否把请求转丢了。
reading choices 报错:模型返回结构不符合预期,多半是 Model ID 写错或该模型不支持当前调用方式。核对 Model ID 拼写,生成和验证用的模型要分别确认可用。
OAuth 相关报错:如果你之前用官方登录方式鉴权,切到 Key 鉴权后旧 token 可能冲突。清掉旧的凭据缓存,只保留 settings 里的 Key 配置。
MCP 连接失败:检查mcp.json里的 command 和 args 是否正确,npx能否正常拉包。先手动跑一次npx -y @your/market-mcp看是否报错。
循环空转不产出:多半是停止条件写成了「Agent 自我宣称完成」。改成外部可验证条件,比如让脚本检查 STATE.md 里的 Sharpe 字段是否达标。
排查顺序建议:先确认三件套(Base URL + Key + Model ID),再确认 MCP 连接,最后看循环逻辑。接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 里有各工具的完整配置示例,对着抄一遍能省很多时间。
6. 把循环跑起来:从架构师视角重新定义你的工作
搭完这套系统,你的角色变了。你不再是那个为一笔交易打一个提示、等着结果的人,你是设计循环的人。循环在你合上电脑后继续跑,每轮把教训写回 SKILL.md,一百笔交易后它是一份活文档,一千笔后接近机构级知识密度。
资金量越小,这套系统反而越重要——它是 solo builder 唯一能系统性缩小与大基金差距的方式。华尔街用几百人把同一个循环跑到极致,你用六个组件加五个子循环,让系统自己完成。
现在的问题不是「要不要用 AI」,而是「你还在当循环本身,还是已经开始写循环」。前者你永远坐在键盘前,后者你设计一次,之后接近零干预。
需要开始的话,先去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 拿 Key,把三件套配好,然后从最小的数据摄取子循环跑起。别一上来就接实盘,先用日志回放验证每一环,确认验证器和风控都在正常工作,再逐步放开执行权限。循环工程的核心不是快,是稳——一个能持续自我修正的慢循环,胜过一个需要你全程盯着的快循环。