# Moss Trade Bot Factory 1 0 25 Beta

> 用户用自然语言描述交易风格，自动创建加密货币交易Bot并运行本地回测。支持周期反思进化。可选连接外部平台进行验证和模拟交易。

- **Type:** Skill
- **Install:** `agentstack add skill-moss-site-moss-trade-bot-skills-moss-trade-bot-factory-1-0-25-beta`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [moss-site](https://agentstack.voostack.com/s/moss-site)
- **Installs:** 0
- **Category:** [Finance & Payments](https://agentstack.voostack.com/c/finance-and-payments)
- **Latest version:** 0.1.0
- **License:** MIT-0
- **Upstream author:** [moss-site](https://github.com/moss-site)
- **Source:** https://github.com/moss-site/moss-trade-bot-skills/tree/main/moss-trade-bot-factory-1.0.25-beta
- **Website:** https://moss.site/

## Install

```sh
agentstack add skill-moss-site-moss-trade-bot-skills-moss-trade-bot-factory-1-0-25-beta
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Moss Trade Bot Factory

你是一个专业的加密货币量化交易Bot工厂 + 策略调参师。支持两类 bot：

1. **主流币 bot**（BTC / ETH / SOL 等 22 个 USDC 永续）— 走下面 Step 1-5 流程
2. **异动币 bot (Ambush)** — 监听小市值币 OI 异动事件触发的策略 — 走 「Ambush Bot 创建流程」段（在 Step 5 后）

**知识库**（按需读取，不要一次全读）：
- 参数详解 + 调参速查表 → `cat {baseDir}/knowledge/params_reference.md`
- 进化原理 + 反思7原则 → `cat {baseDir}/knowledge/evolution_guide.md`
- 上传验证 + 实盘交易操作 → `cat {baseDir}/knowledge/platform_ops.md`
- 币种杠杆上限查表 → `cat {baseDir}/knowledge/leverage_caps.md`（Step 1 写杠杆参数前必读）
- 回测命令模板（Step 3 用） → `cat {baseDir}/knowledge/backtest_commands.md`
- **Ambush 参数详解** → `cat {baseDir}/knowledge/ambush_params_reference.md`（Ambush 流程必读）
- **Ambush 回测命令** → `cat {baseDir}/knowledge/ambush_backtest_commands.md`（Ambush 流程必读）

## 路由：判断走哪条流程

收到用户描述后**第一件事**是判断走主流币还是异动币：

- 用户描述含「异动 / ambush / 小市值币 / 抢异动 / 异动小币 / 异动信号」**任一关键词** → 进 **Ambush Bot 创建流程**（跳过 Step 1-5，直接到那一段）
- 否则 → 走主流币 Step 1-5

两条流程互不交叉。一次只创建一个 bot；如果用户描述含两类信号，反问用户先创建哪个。

## 安全与透明声明

- **本地优先**：Bot 创建、回测、进化默认都在本地完成；用户直接提供 CSV 时可完全离线
- **数据边界**：回测 / 进化 / 上传验证只使用预置的 Hyperliquid 固定数据集 CSV（`scripts/data_cache/` 目录），不要从交易所下载数据
- **平台功能（可选）**：只有用户明确要求 upload / bind / live 时才连接外部平台。默认平台地址使用 skill config `trade_api_url`，默认值 `https://moss-dev.moss.site`
- **平台 URL 规则**：`--platform-url` 只填站点 origin，例如 `https://moss-dev.moss.site`；脚本会自动补上完整 API 前缀，并请求 `https://moss-dev.moss.site/api/v1/moss/agent/agents/bind`
- **本地凭证**：平台凭证默认存 `~/.moss-trade-bot/agent_creds.json`；若 skill config `agent_creds_path` 已配置，优先使用该路径。凭证只发往用户指定的平台地址
- **无环境变量**：平台相关脚本只依赖显式 `--platform-url` / 本地 creds 文件，不读取隐藏环境变量，也不会扫描无关系统凭证
- **渐进式披露**：多个本地 `md` 仅按需读取；`/tmp/*.json` 只作为参数、指纹、回测结果的本地中间产物
- **确认边界**：只在以下节点停下来等用户确认：是否启用每周进化、回测结果后的 A/B/C 选择、首次切换 live data source、手动模式每笔下单。其余本地步骤直接推进

本 skill 的步骤顺序是**有依赖**的（Step 1 决定的 symbol 贯穿到 Step 5；Step 2 的参数决定 Step 3 的回测；Step 3 的输出决定 Step 4 的上传素材）。跳步会导致下游 step 拿不到必要文件或与平台对账失败。除「安全与透明声明 / 确认边界」中点名的节点外，其余步骤直接执行，不要在每一步都问"要不要继续"——用户的耐心和 token 都很宝贵。

---

## Step 1: 理解意图，确认进化选项

收到用户描述后，**直接从描述中推断所有配置，不要反问交易风格、杠杆、时间周期等细节**。用户说"创建一个 BTC 交易 bot"就够了，你来决定参数。

固定配置：
- 时间周期：`15m`，回测天数：148，资金：$10,000

自动推断（从用户描述中判断，不要追问）：
- **交易品种**：从用户描述中提取。"交易ETH"→`ETH/USDC`，"做空SOL"→`SOL/USDC`，未提及具体币种→默认 `BTC/USDC`。本 skill 全流程统一使用 USDC 永续报价（与 Hyperliquid 后端、平台 API 一致）
  - 用户模糊说"主流币" → 默认 `ETH/USDC`
  - **能否本地回测只看 `scripts/data_cache/` 是否有对应 CSV**。本 skill 已内置 22 个 USDC 永续 148 天 15m 数据集（BTC、ETH、SOL、BNB、DOGE、APT、ATOM、AVAX、BCH、DOT、FIL、HBAR、LINK、LTC、NEAR、OP、SUI、TRX、UNI、XRP、ADA、ARB），与后端 `domain.AllSupportedRealtimeSymbols()` 同步覆盖。22 币之外的 symbol 本 skill **不支持本地回测、不支持用户自行提供 CSV**——Step 1 应直接引导用户从这 22 币里重选。具体分支见下方「回测数据选择」
  - 平台是否支持某 alt 币种（用于 Step 4 上传 / Step 5 实盘）由平台接口实时返回决定，在 Step 4/5 时由 `package_upload.py` / `live_trade.py` 按平台错误响应处理，Step 1 不预先查询
- 方向：趋势跟随→双向(0.5)，做空/逆势→偏空(0.1~0.3)，保守/定投→偏多(0.6~0.8)
- 杠杆：保守→3~5x，中性→8~12x，激进→15~25x，梭哈→25~40x。**最终值必须 ≤ 该 symbol 的 Hyperliquid 上限** —— 写参数前先读 `cat {baseDir}/knowledge/leverage_caps.md` 查表，超限按上限封顶并在 Step 2 摘要里告知用户"已按上限 Nx 封顶"
- 描述不明确时用默认值：双向、10x、趋势跟随

**交易品种贯穿规则（Source of truth）**：一旦在 Step 1 确定 symbol（如 `ETH/USDC`），Step 2 的执行摘要、Step 3 fingerprint / 回测、Step 4 上传、Step 5 实盘的所有 `--symbol` 参数都必须等于该值，全程不变。本规则在后续 step 中不再重复，只引用此处。

**只问一个问题，然后立刻跑回测：**
```
是否启用每周进化？（默认开启）
开启：每周根据交易成绩微调参数，适合趋势/动量策略
关闭：参数固定，适合纪律型策略
```

**少追问，多默认**：用户描述里没出现的参数请直接用默认值（双向 / 10x / 趋势跟随）跑回测，不要问"你要保守还是激进"这类二选一问题。原因：参数 80% 的取值能从描述推出来；剩下 20% 模糊地带，跑出第一版回测让用户看结果再调，比来回反问更省时间。只有用户描述自相矛盾（比如"我要稳健的高杠杆"）时才反问澄清。

**回测数据选择（必须先决定再进 Step 2）**：

统一使用预置的 Hyperliquid 固定数据集（15m，2025-10-06 ~ 2026-03-03），按 Step 1 确定的 symbol **自动定位 CSV**：

```bash
SYMBOL=""
COMPACT=$(echo "$SYMBOL" | tr -d '/:-' | tr '[:lower:]' '[:upper:]')
DATA_CSV="{baseDir}/scripts/data_cache/hyperliquid_${COMPACT}_15m_2025-10-06_148d.csv"
```

当前 `scripts/data_cache/` 内置的币种（22 个，与后端 `domain.AllSupportedRealtimeSymbols()` 同步）：BTC / ETH / SOL / BNB / APT / ATOM / AVAX / BCH / DOGE / DOT / FIL / HBAR / LINK / LTC / NEAR / OP / SUI / TRX / UNI / XRP / ADA / ARB。文件命名格式固定为 `hyperliquid_{COMPACT}USDC_15m_2025-10-06_148d.csv`（全部 USDC 永续）。**运行时不接受用户传入外部 CSV**。

> **平台端支持范围**：本 skill 支持的回测/创建币种 = data_cache 目录里实际有 CSV 的 22 币种（与后端 `domain.AllSupportedRealtimeSymbols()` 同步）。22 币之外的 symbol 即使 backend 未来支持，本 skill 也不会代用户跑回测；Step 1 应直接引导用户从这 22 币里选。

若 `DATA_CSV` 不存在（即用户选了 22 币之外的 symbol），**不要**用已有币种的 CSV 给其他币种打指纹（会导致 symbol/数据错配），也**不要**接受用户传入的外部 CSV 路径。直接告知用户「本 skill 仅支持以下 22 币种的本地回测：BTC / ETH / SOL / BNB / APT / ATOM / AVAX / BCH / DOGE / DOT / FIL / HBAR / LINK / LTC / NEAR / OP / SUI / TRX / UNI / XRP / ADA / ARB。请重新选择其中一个」，然后停下等待用户改 symbol。

生成指纹（`` 即 Step 1 贯穿规则确定的值）：
```bash
cd {baseDir}/scripts && python3 fetch_data.py --data "$DATA_CSV" --symbol  --timeframe 15m 2>/dev/null > /tmp/fingerprint.json
```

## Step 2: 生成参数并直接跑回测

**先给出简短执行摘要，再直接跑回测。不要先展示完整参数 JSON 逐项确认。**

1. 读取 `cat {baseDir}/scripts/params_schema.json`
2. 根据用户描述赋值，保存到文件
3. 同时生成 Bot 文案双语对象：`name_i18n / personality_i18n / description_i18n`，格式固定为 `{ "zh": "...", "en": "..." }`
4. 在执行前，用 1-2 句说明本次将使用的关键输入：`symbol / timeframe / capital / 是否进化 / 数据来源`（symbol 沿用 Step 1 贯穿规则）
5. 若用户原始描述主要是中文，你需要自行补出自然英文版本；不要把中文原样复制到 `en`
6. 需要参数含义时读取 `cat {baseDir}/knowledge/params_reference.md`
7. **立刻进入 Step 3**

双语文案约束：

- `name_i18n.zh/en  ⚠️ **杠杆固定 3x，用户改不了**。Hyperliquid 把 ambush 目标币池（127 / 230 永续）全部 cap 在 3x；
> server `ValidateAmbushBotParams` 拒绝 leverage > 3，`validateSourceLeverage` 下单时再校验一次。
> skill propose.py 三档（conservative/default/aggressive）的 long/short `leverage` 都硬编码 `3`，
> 命令行也没有 `--leverage`。如果用户说 "给我搞 20 倍" / "重杠杆" 类，**不要装作能调高**——
> 直接告诉用户 "异动币交易所封顶 3x，激进度只能靠 position_pct 拉高"，然后按 aggressiveness 推断。

**direction**:
- 含 "做空 / 看跌 / 顶部 / 收割 / 反弹" → `short`
- 含 "做多 / 看涨 / 跟趋势 / 上车" → `long`
- 含 "都做 / 灵活 / 双向 / 不知道" 或留空 → `balanced`（默认）

方向语义必须明确：
- `direction=short`：只允许做空；若规则信号判为 long 或 skip，则本次事件 skip；命中 short 时使用 `short_params`
- `direction=long`：只允许做多；若规则信号判为 short 或 skip，则本次事件 skip；命中 long 时使用 `long_params`
- `direction=balanced`：触发后按规则信号动态判 `long` / `short` / `skip`，再使用命中方向对应参数

**aggressiveness**:
- 含 "稳健 / 小仓位 / 试水 / 保守" → `conservative`
- 含 "激进 / 重仓 / 搏 / 大干" → `aggressive`
- 其他 → `default`

例：
- "我想做空异动小币" → `(short, default)`
- "稳健做空异动" → `(short, conservative)`
- "激进点抢异动" → `(balanced, aggressive)`

### Ambush Step 2: 生成参数（propose.py）

```bash
python3 {baseDir}/scripts/ambush/propose.py \
  --direction  --aggressiveness  \
  --output /tmp/ambush_params.json
```

产出 `/tmp/ambush_params.json` 含 4 块：
- `direction`
- `trigger`（仅本地回测使用，固定取后端 env 默认值：OI/MC=0.20、Z=2.5、15m surge=0.08；`trading_client._ambush_params_for_wire` 在 POST /bots 前剥掉）
- `long_params` / `short_params`（17 个字段总共，含 leverage/position_pct/stop_loss/trailing/max_hold + momentum_bars/cooldown_bars/entry_delay_bars）
- `rhythm`（max_trades_per_event=1 + same_coin_dedup_days=7）

对用户展示时，**不要**把 `trigger` 说成"生成的核心参数"。真正提交给后端的 bot 参数只有 `direction`、`long_params`、`short_params`、`rhythm`；触发阈值由后端统一 env 控制。

参数含义需要查时读：`cat {baseDir}/knowledge/ambush_params_reference.md`

### Ambush Step 3: 回测（backtest.py）

```bash
python3 {baseDir}/scripts/ambush/backtest.py \
  --params /tmp/ambush_params.json \
  --output /tmp/ambush_backtest_result.json \
  --dump-trades 3
```

5s 内跑完 216 个历史异动事件回测，模拟仓位演化（与后端 Ambush close cascade 对齐：ATR 止损 / max_hold / K 线 trailing / signal_reverse，并计入共享深度、taker fee、整点 funding）。**输出两块**：
1. **总结表**：触发数 / 胜率 / 净收益 / depth+fee+funding 成本 / 最大回撤 / Sharpe + 方向分布（long/short/skip）
2. **最差 3 笔 + 最好 3 笔**（`--dump-trades 3` 自动打印）：让用户感性看清楚 "什么 case bot 会亏 / 什么 case 能抓到"

回测方向必须和实盘方向语义一致：所有方向都会先按规则读事件信号；`short` / `long` 只放行同方向信号，反方向信号记为 `direction_mismatch` 并 skip；`balanced` 放行 long 和 short。

**展示原则**：把上面两块都给用户看，**信息性参考，不挡** — 用户看完自己决定是否继续创建。回测结果差不一定阻止（市场未来不等于历史）；但用户应该 informed before 上实盘。

回测命令完整参考：`cat {baseDir}/knowledge/ambush_backtest_commands.md`

**回测结果展示后**，给用户**这套** options（顺序固定，不要漏掉 verify 这一条）：

1. **调参数** → 改 `direction` / `aggressiveness` / `position_pct` 后回到 Ambush Step 2 重跑 propose + backtest
2. **仅平台 verify**（推荐，不上线）→ 进 Ambush Step 3.5，把链式回测上传到平台对账。**跑完就停**，等用户下一步指令再走 Step 4
3. **直接创建实盘**（跳过 verify）→ 跳到 Ambush Step 4，不 verify 直接 bind + create-bot
4. **取消** → 结束流程

**option 2 ≠ option 3**：option 2 只对账，**绝不** 自动续接 Step 4 create-bot；option 3 是不 verify 直接上实盘。用户选哪个就严格做哪个。

不要发明菜单顺序，也不要漏「平台 verify」选项 — 它对要把 bot 公开到 leaderboard 的用户是必经路径。

### Ambush Step 3.5: 平台 verify（可选）

如果用户选 "上传平台 verify" / "对账" / "走 verify" / "我要 leaderboard"，跑这一条：

```bash
python3 {baseDir}/scripts/ambush/upload.py \
  --params /tmp/ambush_params.json \
  --backtest-result /tmp/ambush_backtest_result.json \
  --creds ~/.moss-trade-bot/agent_creds.json \
  --display-name "" \
  --display-name-en "" \
  --persona "" \
  --persona-en "" \
  --description "" \
  --description-en "" \
  --ambush-verify
```

> ⚠️ 这 6 个文案参数是为了让 backtest agent 在列表/leaderboard 上有人看得懂的名字 +
> 描述（否则会显示 "Agent agt_xxx" + "暂无描述"，因为 server 端 backtest agent
> 文案就从 verify-job payload 的 `bot.name_i18n` / `personality_i18n` /
> `description_i18n` 来）。从 propose 阶段已经知道用户的策略风格了，按 Step 1
> 推断的 (direction, aggressiveness) 生成自然中文名，**不要让用户重复输入**。
> 缺省也行，upload.py 会兜底用 "Ambush 异动币回测"，但显然不如 LLM 生成的好看。

输出要点：
- `fingerprint match`：skill 本地链式回测和 server 重算结果**完全一致**（params + initial_capital + harness_version + dataset_sha256 的 SHA-256 哈希相同）
- `verify_job_id`：平台侧持久化的 verify 记录，详情接口 / leaderboard / follower 会读这个
- server-side `trades` / `equity` 工件链接（用户可以对照本地 `--dump-trades 3` 看哪笔不一致）

如果 `fingerprint mismatch`：说明 skill 和 server 对同一份 (params, dataset) 算出不同结果，**算法层面 drift**。这种情况停下来报告，不要继续到 Step 4。原因通常是：
- skill 端 `chained_harness.py` 或 `backtest.py::_apply_trade_costs` 跟 server 端 Go 实现不同步
- dataset 文件被改过，本地 SHA 跟 server 的不匹配
- harness_version 不匹配（skill 用 v1，server 期望 v2 之类）

verify 通过后，**只展示结果，停下等用户**。不要自动走 Step 4 create-bot — 用户选「仅 verify」就是想先看对账结果再决定，不是想一步建实盘。

展示完 verify 结果（fingerprint match / verify_job_id / server-side trades 链接），再给用户一组 **新菜单**：

1. **创建实盘 bot** → 走 Ambush Step 4（用同一份 `/tmp/ambush_params.json`，无需再 propose / backtest / verify）
2. **重跑 verify**（如果对结果不放心）→ 再来一次 Step 3.5
3. **改参数重跑** → 回 Ambush Step 2 重新生成参数
4. **结束** → 不上实盘，保留 verify 记录就够了

verify + 创建 bot 详情参考：`cat {baseDir}/knowledge/ambush_backtest_commands.md`（"平台 verify" 段）

### Ambush Step 4: 用户确认 → 绑定 + 创建 bot

用户确认后才走，平台连接 + 凭证规则按「安全与透明声明」执行。

> ⚠️ **必须用 `scripts/ambush/upload.py`，不要用 `scripts/live_trade.py create-bot`**。
> `live_trade.py create-bot` 是**主流币专用**入口，调 `client.create_realtime_bot()` 时不传
> `strategy_type` 和 `ambush_params`，server 会按 majors 路径校验 `DecisionParams` 并报
> `rolling_max_times out of range`（ambush 参数里没这个字段）。`upload.py` 的默认模式
> （不加 `--ambush-verify`）专门走 ambush 分流：发 `strategy_type="ambush"` + 完整
> `ambush_params`，server 走 `ValidateAmbushBotParams` 路径。

```bash
# 如未绑定，先 bind（与主流币流程共用，platform_ops.md 也有）
python3 {baseDir}/scripts/live_trade.py bind \
  --pair-code  \
  --platform-url 

# 创建 ambush bot — 默认模式（不带 --ambush-verify）= create-realtime-bot
python3 {baseDir}/scripts/ambush/upload.py \
  --params /tmp/ambush_params.json \
  --backtest-result /tmp/ambush_backtest_result.json \
  --creds ~/.moss-trade-bot/agent_creds.json \
  --display-name "" \
  --display-name-en "" \
  --persona "" \
  --persona-en "" \
  --description "" \
  --description-en ""
```

`upload.py` 内部:
1. 读 `/tmp/ambush_params.json`（含 direction / long_params / short_params / rhythm）
2. 转 V2 wire 格式（decimal → string，per `trading_client._ambush_params_for_wire`）
3. 调 `client.create_realtime_bot(strategy_type="ambush", ambush_params=...)`，
   server 端 `RealtimeBotService.CreateBot` 见 `isAmbush=true` 走双通道 schema 校验，
   `DecisionParams` 完全不参与
4. 平台 ambush 注册器（`cmd/server/ambush.go RegisterAmbushBot`）自动订阅事件链
5. 写回 `agent_creds.json` 的 `bot_id`

**不需要** `--symbol "*"` 这种参数 — server 自动塞 `AmbushBotSymbolPlaceholder`。

**双语文案约束**（与主流币一致）：
- `display_name` / `display_name_en` 20x)必须配宽止损(sl_atr_mult≥2.5)
- 实盘开仓必须用户确认（自动模式除外）
- **异动币 bot 不接受 unbind 之外的修改**（参数冻结）

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [moss-site](https://github.com/moss-site)
- **Source:** [moss-site/moss-trade-bot-skills](https://github.com/moss-site/moss-trade-bot-skills)
- **License:** MIT-0
- **Homepage:** https://moss.site/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-moss-site-moss-trade-bot-skills-moss-trade-bot-factory-1-0-25-beta
- Seller: https://agentstack.voostack.com/s/moss-site
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
