# 比特骆驼自动化对冲系统 — 开发方案

> **产品名**：比特骆驼自动化对冲系统  
> **工程名 / 目录**：`eth_hedge_sim`  
> 独立项目，与现网 `crypto_monitor` / `zk.hyf2.cc` **无部署、无进程、无密钥共用关系**。  
> 可参考现有仓库的实现思路或复制片段到本仓库，但 **禁止修改** `crypto_monitor` 内任何文件。  
> Git 仓库由负责人自行创建；本目录为本地工程骨架与文档。

---

## 1. 项目定位

| 项 | 约定 |
|----|------|
| 产品名 | **比特骆驼自动化对冲系统** |
| 工程名 / 目录名 | `eth_hedge_sim` |
| 部署操作系统 | **Ubuntu 22.04** LTS |
| 云服务器 | **单独一台 Ubuntu 22.04**；规格选型见 [§6.0 云服务器配置选择](#60-云服务器配置选择说明) |
| 部署 | PM2 |
| 行情 | OKX **实盘只读** API（REST + WebSocket） |
| 成交（默认） | **本地模拟撮合 + 本地虚拟资金**（非 OKX 模拟盘） |
| 后期 | 支持切换 **实盘下单**（显式开关 + 二次确认） |
| 中控 | 同仓 `control/`，本地局域网运维面板（多机监控/启停/更新）；见 [中控 Fleet 说明](./中控Fleet说明.md) |

### 1.1 硬边界

- 模拟阶段：**零交易类 API**（不下单、不撤单、不改单）。
- 永续：全部 **市价**（不做限价）。
- 期权：只吃 **买一 / 卖一**。
- 仓位固定：永续 **1 ETH**，期权 **2 ETH** 名义（始终 2 倍，与权利金金额无关）。
- 卖一比对 **仅用于选方向**；平仓用买一，并检查买一流动性。

---

## 2. 业务规则

### 2.1 时间与次数

- 期权合约：按 **剩余时长下限**（可配）筛选到期；行权价默认 **ATM**（同到期、最接近指数/标记的同一行权价 Call+Put）。
- **开仓时间窗已取消**（全天可尝试开仓，仍受选约条件约束）。
- **周六 / 周日跳过开仓**（上海时区，设置项 `skip_weekends`，默认开启）：禁止新开仓；**已有持仓仍盯盘平仓**。
- **不做横盘识别**：波动过滤难以精准，避免假信号；用周末跳过等确定性规则代替。
- 同时最多 **1 组**仓；一轮全平结束后 **休息**（可配 `rest_seconds`，默认 300 秒）再开下一组。

### 2.2 方向（Call 卖一 vs Put 卖一；期权只买入、永不为卖方）

| 条件 | 期权（名义 2 ETH） | 永续（1 ETH） |
|------|-------------------|---------------|
| Call 卖一 > Put 卖一 | **买入 Call**（吃卖一） | **市价做空** |
| Call 卖一 < Put 卖一 | **买入 Put**（吃卖一） | **市价做多** |
| 相等 | 不开仓，等待 | — |

### 2.3 平仓（任一触发 → 该组全平）

1. **净盈利达标**（设置可选）：固定 USDT，或初始权利金 × 倍数。
2. **到期强制全平**：到达期权到期时刻（OKX 惯例 UTC 08:00 = 上海 16:00）→ 整组卖出；绕过买一流动性闸门（与紧急平仓同类）。策略暂停时仍执行。  
   波动小、拖到到期亏损权利金，按预算内成本接受。

平仓执行：

- 永续：本地市价平仓。
- 期权：多头平仓吃买一；买一深度需覆盖名义（到期/紧急可绕过偏差与深度校验）。

### 2.4 组（Group）标识

每一轮开→平为一组，稳定 ID 例如：`G-YYYYMMDD-序号`（`G-20260724-01`）。  
前端、交易记录、统计全部按组聚合。

---

## 3. 本地撮合与费用

### 3.1 手续费与滑点

- 永续、期权 **均收取手续费**，费率可配置，默认按 OKX taker 档位。
- **滑点 = 1 倍手续费**（费率 `f` 时，滑点幅度按 `f` 计入成交价；手续费另扣）。

### 3.2 永续（仅市价）

本地市价定义（无真实交易所市价单时）：

- 开多 / 平空：基准 **卖一**，成交价 = 基准 × `(1 + f)`，再扣手续费。
- 开空 / 平多：基准 **买一**，成交价 = 基准 × `(1 - f)`，再扣手续费。
- UI 与引擎均不提供限价单。

### 3.3 期权（只吃买卖一）

- 买入：吃 **卖一**，成交价 = 卖一 × `(1 + f)`，再扣费。
- 卖出：吃 **买一**，成交价 = 买一 × `(1 - f)`，再扣费。
- 开仓成交后锁定该组 **初始权利金总额**（按成交价 × 2 ETH 名义）。

### 3.4 本地账本

虚拟权益、可用、占用、持仓、成交、滑点、手续费、按组盈亏；持久化 SQLite（或等价本地 DB）。  
**不是** OKX 模拟盘余额。

---

## 4. 系统架构

```
OKX 实盘只读行情 (WS/REST)
        ↓
   market 行情网关（本地缓存/可选落盘）
        ↓
   strategy 策略状态机（时间窗 / 选向 / 开平 / 3 次 / 组 ID）
        ↓
   executor
     ├─ SIM（默认）→ LocalMatcher + Ledger
     └─ LIVE（后期）→ OkxTradeAdapter
        ↓
   API + WebSocket 推送
        ↓
   Frontend（OKX 风格四页）
```

### 4.1 与现网隔离

| | crypto_monitor（现网） | eth_hedge_sim（本项目） |
|--|----------------------|------------------------|
| 代码仓 | 独立 | 独立（负责人自建 remote） |
| 服务器目录 | 如 `/opt/crypto_monitor` | 如 `/opt/eth_hedge_sim`（另定） |
| PM2 进程名 | 现有一套 | **新名字**，如 `eth-hedge-api` / `eth-hedge-web` |
| 域名/端口 | 现网 | 独立端口或独立域名 |
| 密钥 | 现网 `.env` | 本项目独立 `.env`（先只读行情 Key） |

允许：从现网 **复制** 盘口解析、OKX WS 订阅、流动性检查等代码到本仓库后改。  
禁止：在现网仓库里改文件、共用 PM2 restart 脚本、共用生产 Key（除非只读 Key 故意共用且你知情）。

---

## 5. 前端

视觉：复刻 OKX 交易台观感（深色、盘口、持仓、紧凑数字）。

### 导航（4 项）

1. **自动对冲计划**  
   模式 SIM/LIVE、时间窗状态、当前组 ID、方向、1+2 仓位、初始权利金、永续浮盈、距触发差值、30 点进度、永续/期权盘口、启动暂停、紧急全平（模拟）。

2. **交易记录**  
   按组列表与组内成交明细；筛选日期、平仓原因、盈亏。

3. **统计**  
   组数、胜率、总盈亏、总手续费、总滑点、平仓原因分布、按组权益曲线。

4. **系统设置**  
   虚拟资金、费率 `f`（滑点自动 1×f）、轮次与时间、30 点定义、选约规则、OKX Key、SIM/LIVE 开关（LIVE 二次确认）。

每组必须有明确标识（组 ID + 状态标签：持仓中 / 已平 / 流动性等待等）。

---

## 6. 部署（Ubuntu 22.04 + PM2）

### 6.0 云服务器配置选择说明

本系统为 **轻量常驻进程**（行情 WebSocket + 策略 tick + FastAPI + SQLite），对 CPU/内存要求不高，但对 **网络延迟与稳定性** 要求高（连交易所 API）。

#### 推荐规格（单机专跑本系统）

| 场景 | vCPU | 内存 | 系统盘 | 带宽 | 说明 |
|------|------|------|--------|------|------|
| **最低可用（SIM 试跑）** | 1 | 1 GB | 20 GB SSD | ≥3 Mbps | 可装 Ubuntu + 本服务；偏紧，构建前端时可能吃紧 |
| **推荐（SIM / 小仓 LIVE）** | **2** | **2 GB** | **40 GB SSD** | **≥5 Mbps** | 日常够用；前端 `npm build`、依赖安装更稳 |
| **余量（LIVE 长期 / 同机反代）** | 2～4 | 4 GB | 40～80 GB SSD | ≥5 Mbps | 同机跑 nginx、日志、备份更从容 |
| **不建议** | 共享超售极低配、无稳定公网、国内机访问境外交易所极慢 | — | — | — | 行情断连、下单超时风险高 |

#### 地域与网络（比「堆配置」更重要）

| 项 | 建议 |
|----|------|
| **机房地域** | 优先选 **香港 / 新加坡 / 东京** 等对 OKX、币安延迟低的区域；大陆机房常需稳定出网或代理，不适合作为默认 LIVE 节点 |
| **公网** | 要有 **固定公网 IP**（或稳定入口）；安全组放行 **5155**（或仅反代 443） |
| **延迟** | 部署后用本机测交易所 REST/WS；持续高延迟或频繁断线应换区，而不是盲目加 CPU |
| **隔离** | **单独一台**跑本系统；勿与现网 `crypto_monitor` 混用同一套密钥/同一 PM2 `restart all` |

#### 软件与其它选型

| 项 | 约定 |
|----|------|
| OS | **Ubuntu 22.04 LTS**（与一键脚本一致） |
| 磁盘 | SSD；日志与 SQLite 在本机，无需独立数据盘（仓位不大） |
| 架构 | **x86_64**（常规云主机）；ARM 需自行验证 Node/Python 构建 |
| 面板 | 可选；一键部署只依赖 SSH + apt，不依赖宝塔等面板 |
| 反代 | 公网建议 **Nginx/Caddy + HTTPS**，后端仍监听本机 `5155` |

#### 选型速查

- **只想先 SIM 看盘跑策略**：香港/新加坡 **2C2G** 即可。  
- **要 LIVE 真下单**：同样 **2C2G 起**，重点换到 **低延迟机房** 并配齐非默认 `AUTH_SECRET` + 交易密钥。  
- **同机还要跑其它重服务**：升到 **4G 内存**，或把本系统拆到独立机。

### 6.1 建议目录

```text
/opt/eth_hedge_sim          # git clone 目标
  .env                      # 仅本机/本项目，不进 git
  deploy/
    ecosystem.config.cjs    # PM2 配置
    pull_and_restart.sh     # 仅重启本项目进程
```

### 6.2 PM2 进程（示例名，可改）

| 进程名 | 作用 |
|--------|------|
| `eth-hedge-api` | 行情网关 + 策略 + 本地撮合 + HTTP/WS API |
| `eth-hedge-web` | 前端静态或 Node 服务（若前后端合一可合并为一个进程） |

原则：**不要** `pm2 restart all` 误伤现网；脚本里写死本项目进程名。

### 6.3 发布流程（负责人自建仓库后）

```bash
cd /opt/eth_hedge_sim
git pull
# 安装依赖 / 构建前端（按实际栈）
pm2 startOrReload deploy/ecosystem.config.cjs --update-env
pm2 save
```

### 6.4 环境变量（示例）

```bash
MODE=SIM
OKX_API_KEY=...          # 模拟阶段只需能拉行情的权限
OKX_API_SECRET=...
OKX_API_PASSPHRASE=...
FEE_RATE=0.0005          # 示例；滑点 = 1 × FEE_RATE
INITIAL_EQUITY=10000
TZ=Asia/Shanghai
```

---

## 7. 分期实施

| 阶段 | 内容 | 完成标准 |
|------|------|----------|
| P0 | 仓库骨架、依赖、OKX 只读行情（永续 + 次日期权盘口） | 能稳定收到真盘口 |
| P1 | 本地账本 + 撮合（永续市价、期权吃一、费+1×费滑点） | 手动开平一组账目正确 |
| P2 | 策略状态机（选向、两套平仓、3 次、08:00 停开、组 ID） | 无 UI 也能跑完业务窗 |
| P3 | 四页前端 | 可完整操作与复盘 |
| P4 | 行情落盘与回放 | 重放结果与当时一致 |
| P5 | 实盘适配器 | 显式开关下最小仓验证 |

---

## 8. 已拍板摘要

1. 期权只买入 Call 或 Put（永不卖出开仓）。
2. N 点 = 标的 ETH 波动点数，设置可配（默认 30）。
3. 行权价 ATM。
4. 权利金覆盖触发不含手续费。
5. Call 卖一 = Put 卖一：跳过等待。
6. 测试访问：`https://dc.hyf2.cc` → 本机 `5155` / PM2 `eth-hedge-api`。

---

## 9. 一句话

**独立仓 `eth_hedge_sim`（产品：比特骆驼自动化对冲系统）：OKX/币安真行情只读 + 本地虚拟资金撮合（永续市价、期权只买吃买卖一、滑点=1×手续费）+ 四页前端 + Ubuntu 22.04 / PM2 单独部署；可抄现网思路，但不改现网代码、不共用现网进程。**
