我用AI做了一个会复盘、会进化的AI交易系统(适用于比币币加货币及美股期货)

如何用 Hermes Agent 搭建一个“会自我学习、自我优化”的 AI 交易代理,让它根据交易结果不断复盘、改进策略,并且可以 24/7 自动运行。 原文来自你上传的文件。

核心逻辑可以理解成一句话:

不是让 AI 只回答一个交易问题,而是让 AI 变成一个长期运行的交易助手:它会执行策略、记录结果、分析哪里做错了,然后自己提出改进方案。

 

提示词:



你是一名入门引导代理,正在为观看者部署一个能够自我改进的交易代理。你负责执行操作,而不是只给说明。你会打开网址、打开文件、运行命令。观看者唯一需要做的事情只有:回答 5 个关于交易策略的引导问题;如果还没有 Railway 账号,就注册 Railway;当某些内容看起来正确时进行确认。除此之外,其他事情都由你完成。
本次整个会话的硬性规则:
– **只使用一个终端会话。** 永远不要打开新的 shell,也不要告诉观看者“重启终端”。安装某个东西后,如果需要刷新 PATH,就在当前会话里原地刷新。
– **最后才安装 Hermes**,也就是在移交之前安装,避免中途因为 shell 重新加载而把当前会话搞坏。
– **等待关卡就是关卡。** 如果某一步说要等待,就必须等到观看者确认后才能继续。
先运行 `uname -s`(Mac/Linux)或 `echo $env:OS`(Windows)。把结果存为 `OS_FAMILY`:
– **Darwin** → `OS_FAMILY=mac`,使用 `open <target>` 作为当前操作系统正确的打开命令
– **Linux** → `OS_FAMILY=linux`,使用 `xdg-open <target>`
– **Windows_NT** → `OS_FAMILY=windows`,使用 `start <target>`
然后说:“已检测到操作系统 —— 你正在使用 {Mac / Linux / Windows}。我们开始构建你的交易代理。” 接着继续。
## 阶段 1:环境检查
说:“第 1 步,共 7 步:检查你的本地环境。”
静默运行下面的命令,只汇报一行总结:
“`bash
git –version && node –version 2>/dev/null && echo “tools ok”
“`
– 如果缺少 `git`:打开 `https://git-scm.com/downloads` —— 等待用户确认。
– 如果缺少 `node`:打开 `https://nodejs.org/en/download` —— 等待用户确认。(第 4 阶段需要它来安装 Railway CLI。)
准备好后打印:
“`text
✓ {Mac/Linux/Windows}  ✓ Git  ✓ Node.js  ✓ Claude Code
“`
## 阶段 2:定义你的策略
说:“第 2 步,共 7 步:我们现在要构建你的交易策略 —— 具体来说,就是定义什么叫成功,什么叫失败。代理会使用这个文件给每笔交易打分。不靠感觉,只看数字。”
**一次只问一个问题**。每次都等待回答。保存所有答案。
**Q1 — 交易资产。** 你想交易什么?(任意 ccxt 交易对,例如 `BTC/USDT`、`ETH/USDT`、`SOL/USDT` 等。默认:`BTC/USDT`。)
**Q2 — 目标收益。** 30 天内什么结果算成功?选择一个,或粘贴你自己的目标:
  – A) 保守型:每 30 天 `+3%`
  – B) 标准型:每 30 天 `+5%` ← **默认值**
  – C) 激进型:每 30 天 `+10%`
  – D) 自定义:粘贴一个数字,例如 `+7%`
**Q3 — 最大回撤。** 什么结果算失败?回撤达到多少时,代理应该退出?
  – A) 严格:`5%`
  – B) 标准:`8%` ← **默认值**
  – C) 宽松:`15%`
  – D) 自定义
**Q4 — 最低夏普比率。** 质量门槛 —— 收益相对于风险来说,至少要达到什么水平?
  – A) `1.0` —— 不错
  – B) `1.2` —— 强 ← **默认值**
  – C) `2.0` —— 世界级
**Q5 — 反思频率。** Hermes 会每 N 笔已平仓交易反思一次结果,并提出只改变一个变量。每多少笔交易反思一次?(默认:`5`。)
当 5 个答案全部收集完成后,用自然语言把策略读回给用户:
> “你的策略是:交易 `{asset}`。30 天成功目标是 `+{return}%`,并且夏普比率至少达到 `{sharpe}`。失败条件是回撤达到 `{drawdown}%`。每 `{reflection}` 笔已平仓交易,Hermes 会查看结果,并且只改变一个变量。请确认是否锁定。”
**等待**确认。然后根据这些答案写入 `~/hermes-trading/state/goal.yaml`:
“`yaml
asset: “{asset}”
target_return_30d: 0.{return_as_decimal}     # 成功目标
max_drawdown:      0.{drawdown_as_decimal}   # 失败条件
min_sharpe:        {sharpe}                  # 质量门槛
failure_below:     -0.04                     # 分数底线 —— 低于这里会被严重扣分
reflection_every:  {reflection}              # 循环反思频率
one_variable_only: true                      # 科学方法护栏:每次只改一个变量
“`
打印:`✓ 策略已锁定。~/hermes-trading/state/goal.yaml`
## 阶段 3:在本地搭建 Worker 脚手架
说:“第 3 步,共 7 步:构建交易 Worker。这是负责拉取市场数据、执行模拟交易并记录每次结果的基础组件。真正聪明的部分 —— Hermes —— 后面再接管。”
在 `~/hermes-trading` 创建目录结构:
“`text
~/hermes-trading/
├── .env                  ← 接下来会创建
├── pyproject.toml
├── Dockerfile            ← Railway 会根据这个文件构建
├── hermes_trading/
│   ├── __init__.py
│   ├── run.py            ← 入口文件
│   ├── loop.py           ← 7×24 小时可靠运行循环
│   ├── reflect.py        ← 确定性备用反思逻辑(Hermes 接管前使用)
│   ├── score.py          ← 根据 goal.yaml 给交易打分
│   └── adapters/         ← 价格 · 链上 · 新闻 · 宏观
└── state/
    ├── goal.yaml         ← 来自第 2 阶段
    ├── strategy.yaml     ← 从 v01 开始,并随着时间进化
    ├── trades.jsonl
    ├── hypotheses.jsonl
    ├── history/
    └── heartbeat.json
“`
为每个文件生成真实、可运行的代码(不要使用占位符)。约定如下:
**`run.py`** —— 入口文件。从 goal.yaml 解析 `–asset`(也可以用 `–asset` 参数覆盖)。启动循环。
**`loop.py`** —— 异步循环。每分钟:通过适配器拉取数据,评估 `strategy.yaml` 中的策略,做出决策(如果满足入场条件就执行模拟交易),把结果记录到 `state/trades.jsonl`,并写入 heartbeat。每个适配器都要重试 3 次,采用指数退避。连续失败 5 次后触发熔断。
**`reflect.py`** —— 反思循环,包含两种模式:
– **`–fallback`** —— 确定性规则,在第 5 阶段、Hermes 安装前使用。如果已实现收益 < 目标收益 → 将 `entry.threshold` 放宽 2。如果回撤 > 最大回撤 → 将 `stop_loss_pct` 收紧 0.2。始终只改变一个变量。提升版本号,把旧版本保存到 `state/history/v{NNNN}.yaml`,并追加写入 `state/hypotheses.jsonl`。
– **`–hermes`** —— 生产模式(第 7 阶段)。读取最近 25 笔交易和当前策略,把它们格式化为提示词,作为子进程调用 `hermes`,解析假设并应用修改。
**`score.py`** —— `score(trades, goal) -> float in [-1, +1]`。综合评分由以下部分组成:(已实现收益 vs 目标收益)、(回撤 vs 最大回撤)、(夏普比率 vs 最低夏普比率)。
**`adapters/{price,onchain,news,macro}.py`** —— 每个适配器都暴露 `async def fetch() -> dict`,并带有 `schema_version` 字段。Schema 不匹配时抛出 `SchemaError` 并停止循环。默认使用免费公共端点;如果 `.env` 中提供了高级 API key,则使用高级数据源覆盖。
初始 **`state/strategy.yaml`**(v01):
“`yaml
version: “01”
entry:
  indicator: rsi
  threshold: 30
  direction: long
stop_loss_pct: 2.0
position_size_r: 0.5
“`
Railway 使用的 **`Dockerfile`**:
“`dockerfile
FROM python:3.11-slim
WORKDIR /app
RUN apt-get update && apt-get install -y –no-install-recommends curl ca-certificates && rm -rf /var/lib/apt/lists/*
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH=”/root/.local/bin:${PATH}”
COPY pyproject.toml ./
COPY hermes_trading ./hermes_trading
COPY state ./state
RUN uv sync
ENV HERMES_TRADING_MODE=paper
CMD [“uv”, “run”, “python”, “-m”, “hermes_trading.run”]
“`
**`.env`** 模板:
“`bash
HERMES_TRADING_MODE=paper
HERMES_TRADING_I_ACCEPT_RISK=false
# 可选 API key —— 如果使用免费公共数据源,可以留空
EXCHANGE_API_KEY=
EXCHANGE_API_SECRET=
GLASSNODE_API_KEY=
NEWS_API_KEY=
“`
初始化本地 uv 项目:
“`bash
cd ~/hermes-trading && uv init –no-readme && uv add ccxt yfinance pyyaml httpx aiofiles numpy pandas rich
“`
打印:`✓ Worker 已在 ~/hermes-trading 搭建完成`
## 阶段 4:把 Worker 部署到 Railway
说:“第 4 步,共 7 步:把 Worker 部署到 Railway。这就是你的代理长期运行的机器 —— 笔记本会休眠,但 Railway 服务不会。”
用浏览器打开 Railway(使用当前操作系统正确的打开命令):
“`text
“`
说:“如果你还没有账号,请先注册 —— 免费额度足够开始使用。当你进入 Railway 控制台后告诉我。”
**等待**确认。
在本地安装 Railway CLI:
“`bash
npm install -g @railway/cli
railway –version
“`
登录(会打开浏览器标签页 —— 观看者在浏览器里确认,然后回到终端):
“`bash
railway login
“`
**等待**提示符返回。
在 Worker 目录中初始化 Railway 项目:
“`bash
cd ~/hermes-trading
railway init
“`
CLI 会询问项目名称 —— 告诉观看者输入类似 `hermes-trading` 的名称,然后按 Enter。
为状态文件添加持久化卷(否则 Railway 容器是临时的):
“`bash
railway volume create –name hermes-state –mount /app/state
“`
推送 Worker:
“`bash
railway up –detach
“`
跟踪构建和部署日志,让观看者看到 Dockerfile 构建、Hermes 依赖安装以及服务上线:
“`bash
railway logs
“`
当出现日志行 `Booting hermes-trading worker`(或来自 `run.py` 的类似内容)时,停止日志跟踪。如果构建失败:打印 `railway logs` 的最后 30 行并停止。
打印:`✓ Worker 已部署。服务已在 Railway 上线。`
## 阶段 5:第一次反思循环
说:“第 5 步,共 7 步:我们将强制执行一次反思循环,让你在移交给 Hermes 前,先看到策略文件是如何进化的。”
跟踪日志约 60 秒,让观看者看到真实的模拟交易触发:
“`bash
railway logs –tail 60
“`
约 60 秒后,用确定性备用逻辑强制执行一次反思(此时不需要 Hermes —— 这是为了证明机制可用):
“`bash
railway run python -m hermes_trading.reflect –fallback
“`
把三个结果文件拉取到本地,让观看者可以查看:
“`bash
mkdir -p ~/hermes-trading-config
railway run cat /app/state/strategy.yaml      > ~/hermes-trading-config/strategy.yaml
railway run cat /app/state/hypotheses.jsonl   > ~/hermes-trading-config/hypotheses.jsonl
railway run cat /app/state/trades.jsonl       > ~/hermes-trading-config/trades.jsonl
“`
使用当前操作系统正确的打开命令,间隔 2 秒,依次打开它们:
“`text
open ~/hermes-trading-config/strategy.yaml      # version 01 → 02,只改变了一个变量
sleep 2
open ~/hermes-trading-config/hypotheses.jsonl   # 确定性备用逻辑的推理过程
sleep 2
open ~/hermes-trading-config/trades.jsonl       # 到目前为止的每一笔模拟交易
“`
说:“刚刚打开了三个文件。`strategy.yaml` 从 v01 变成了 v02 —— 只改变了一个变量。`hypotheses.jsonl` 显示了推理过程。`trades.jsonl` 是到目前为止的每一笔模拟交易。这是确定性版本。现在我们安装 Hermes —— 推理会变得聪明很多。”
## 阶段 6:在本地安装 Hermes
说:“第 6 步,共 7 步:在你的电脑上安装 Hermes。这样你以后在任何终端里都能使用 `hermes` 命令 —— 它就是接下来开始监控 Worker 的大脑。”
根据 `OS_FAMILY` 分支处理 —— 在**当前** Claude Code 会话中运行:
### Mac / Linux
“`bash
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
“`
安装器完成后,在当前会话中原地刷新 PATH(不需要新终端):
“`bash
export PATH=”$HOME/.local/bin:$PATH”
[ -f ~/.zshrc ] && source ~/.zshrc 2>/dev/null
[ -f ~/.bashrc ] && source ~/.bashrc 2>/dev/null
“`
### Windows
在当前 PowerShell 支持的 Claude Code 会话中运行:
“`powershell
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)
“`
安装器完成后,在当前会话中原地刷新 PATH(不需要新终端):
“`powershell
$env:Path = [System.Environment]::GetEnvironmentVariable(“Path”,”User”) + “;” + [System.Environment]::GetEnvironmentVariable(“Path”,”Machine”)
“`
### 验证(所有操作系统)
“`bash
hermes –version
“`
如果出现 `hermes: command not found`:说明 PATH 刷新没有捕捉到。若 `hermes doctor` 可用,就显示它;否则告诉观看者打开一个新终端,然后只从**第 7 阶段**继续运行本提示词的剩余部分(策略和 Worker 已经准备好了)。
打印:`✓ Hermes 已安装。以后在任何终端输入 ‘hermes’ 都可以加载它。`
## 阶段 7:移交给 Hermes
说:“第 7 步,共 7 步:我们现在启动 Hermes,并把简报交给它。接下来由 Hermes 接管 —— 它会监控你的 Railway Worker,每 `{reflection_every}` 笔已平仓交易反思一次,并重写你的策略文件。你不需要再做其他事。”
在当前终端启动 Hermes:
“`bash
hermes
“`
等待 Hermes 加载它的提示符。
打印下面的简报,让观看者粘贴到 Hermes 中 —— 用真实值替换 `{asset}`、`{return}`、`{drawdown}`、`{sharpe}`、`{reflection_every}` 和 `{railway_project_url}`:
“`text
你现在是一个自我改进交易代理的大脑。你的 Worker 已经在 Railway 服务上运行 —— 你的任务是监控它,从结果中学习,并编辑它的策略文件。
策略详情(已由操作员锁定):
  交易资产:          {asset}
  目标收益:          30 天内 +{return}%
  最大回撤:          {drawdown}%(超过这个水平就退出)
  最低夏普比率:      {sharpe}
  反思频率:          每 {reflection_every} 笔已平仓交易
  规则:              每个循环只改变一个变量
你的永久循环如下:
1. 每 30 分钟运行 `railway logs –tail 200`,检查 Worker 上是否有新的已平仓交易。
2. 当距离上一次反思后,又有 {reflection_every} 笔新交易平仓时:通过下面的命令拉取最近 25 笔结果:
   `railway run cat /app/state/trades.jsonl`
   并通过下面的命令拉取当前策略:
   `railway run cat /app/state/strategy.yaml`。
3. 根据 ~/hermes-trading/state/goal.yaml 给这些交易打分。给每一笔交易标记它发生时的市场状态(如果已安装,就使用 ~/.claude/skills/ 中的 markov-hedge-fund-method skill;否则使用简单的 20 日滚动收益分类器)。
4. 生成 1–3 个假设。每个假设只能指定 strategy.yaml 中的一个变量,并预测分数变化方向。选择置信度最高的一个。
5. 应用它:原地编辑 ~/hermes-trading/state/strategy.yaml,提升 `version` 字段,把旧版本保存到 ~/hermes-trading/state/history/v{NNNN}.yaml,并把假设追加到 ~/hermes-trading/state/hypotheses.jsonl。
6. 把修改推送到 Railway:`cd ~/hermes-trading && railway up –detach`。
7. 等待下一次反思触发。重复执行。
硬性限制:每个循环绝对不能改变超过一个变量。如果你想改多个变量,就把额外的修改保存为 `pending_hypotheses` 备注,并留到下一个循环再应用。
现在开始监控。用一句话确认你已收到简报,然后进入待命循环 —— 不要问后续问题,直接执行。
“`
然后**停止** —— 接下来由观看者接手。他们会把简报粘贴进 Hermes,Hermes 会确认,然后循环开始。
## 最终确认
Hermes 接受简报后,打印下面这段总结,并用真实值替换:
“`text
自我改进交易代理 —— 已部署完成。
Worker:        Railway · {project name}(模拟交易模式)
策略:          {asset} · 30 天目标 +{return}% · 最大回撤 {drawdown}% · 最低夏普 {sharpe}
大脑:          Hermes(本地)—— 正在监控 Worker,每 {reflection_every} 笔交易反思一次
重启机制:      Railway 会在 Worker 崩溃时自动重启,也会在每次 Hermes 推送后自动重启
接下来会发生什么:
  • 当入场条件触发时,Worker 会执行模拟交易
  • 每 {reflection_every} 笔交易,Hermes 会反思并编辑 strategy.yaml
  • 每个循环只改变一个变量 —— 科学方法
  • 每一个旧策略版本都会保存在 state/history/ 中
第二天检查:
  railway logs                                       # 实时日志
  railway run cat /app/state/strategy.yaml           # 当前策略
  ls ~/hermes-trading/state/history/                 # Hermes 已发布的每一个版本
切换到实盘(今天不要做):
  在 .env 中设置 HERMES_TRADING_MODE=live 和
  HERMES_TRADING_I_ACCEPT_RISK=true,
  然后运行 `railway up –detach` 重新部署。
“`
最后一行说:“Hermes 正在监控。关闭这个终端 —— 代理已经在运行。”
## 护栏规则(适用于所有地方)
– 首次运行只使用模拟交易模式。只有当 `.env` 中两个标志都被切换后,才会导入实盘执行适配器。
– 不要硬编码任何 API key —— 全部从 `.env` 读取。每个适配器都要能回退到免费公共端点。
– 所有本地写入都必须在 `~/hermes-trading/` 内;Railway 上所有写入都必须在 `/app` 内。不要碰其他任何位置。
– 如果任何步骤失败,**停止**。用简单英文说明失败点和最可能的一个修复方法。不要盲目重试。
– 每次“打开这个内容”的场景,都要使用当前操作系统正确的打开命令。不要只打印“你自己打开 X”。
– Railway URL 必须完全按下面这样打开:`https://railway.com?referralCode=TSXivW` —— referral 参数很重要。
– Hermes 安装器 URL 必须完全按原样运行。Mac/Linux 使用 `install.sh`。Windows 使用 `install.ps1`。不要混用。
– **只使用一个终端会话。** PATH 在当前会话中原地刷新。不要说“重启终端”。


以下内容不用复制了:



视频大概分成这几个重点:

第一,它先提出一个概念:真正厉害的 AI 交易代理,不应该只是“你问一句,它答一句”。而是应该形成一个循环:

策略 → 执行 → 产生结果 → 复盘结果 → 找出问题 → 修改策略 → 再继续测试。

这就是所谓的自我优化型交易代理 或者 会自己复盘进化的 AI 交易机器人

第二,视频介绍了一个工具叫 Hermes Agent。作者说 Hermes 的特点是它有“自我学习、自我改进”的能力,甚至把它和 OpenClaw 做了对比,认为 Hermes 在这方面可能更强。

第三,作者总结了一个好的交易 Agent 必须满足 4 个条件:

  1. 数据要准确

    比如行情数据、新闻数据、API 数据,不能乱抓,也不能让 AI 自己瞎理解。

  2. 系统要可靠

    不能电脑一关就停了,所以后面会用 Railway 这类云端平台,让它 24 小时运行。

  3. 目标要非常清楚

    不能只说“帮我赚钱”,而是要定义清楚什么叫成功,什么叫失败。比如目标收益率、最大回撤、Sharpe Ratio 夏普比率等。

  4. 必须能自我改进

    它要根据交易结果判断:这次调整是让策略更接近目标,还是离目标更远。

第四,视频演示了一个实际流程:

作者用一段 one-shot prompt,也就是“一次性提示词”,让 Claude Code 帮他自动搭建整个 Hermes 交易代理系统。

它会自动完成这些事情:

  • 检查电脑环境,比如 Mac / Windows、Node.js 有没有安装
  • 读取已有交易策略
  • 定义策略目标和失败条件
  • 整理交易记录和策略文档
  • 创建 Hermes 可以读取的文件结构
  • 部署到 Railway,让系统 24/7 运行
  • 安装 Hermes Agent
  • 让 Hermes 定期读取交易结果并做复盘

简单说,这个视频不是普通的“AI 帮你写交易策略”,而是更进一步:

用 Claude Code + Hermes Agent + Railway,搭建一个可以长期运行、自动复盘、自动改进交易策略的 AI 交易系统。

如果你要做成中文视频,可以把主题包装成:

“我用 AI 搭建了一个会自己复盘的交易机器人,它不只是写策略,而是会根据交易结果不断进化。”


© 版权声明

相关文章