Files
eth_hedge_sim/docs/开发方案.md
T
2026-07-25 11:43:51 +08:00

222 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# eth_hedge_sim — 自动对冲模拟盘开发方案
> 独立项目,与现网 `crypto_monitor` / `zk.hyf2.cc` **无部署、无进程、无密钥共用关系**。
> 可参考现有仓库的实现思路或复制片段到本仓库,但 **禁止修改** `crypto_monitor` 内任何文件。
> Git 仓库由负责人自行创建;本目录为本地工程骨架与文档。
---
## 1. 项目定位
| 项 | 约定 |
|----|------|
| 项目名 / 目录名 | `eth_hedge_sim` |
| 本机路径 | `C:\Users\dekun\Desktop\新建文件夹\eth_hedge_sim` |
| 云服务器 | **单独一台 Ubuntu**(或同机不同目录/不同 PM2 进程名,且与现网隔离) |
| 部署 | PM2 |
| 行情 | OKX **实盘只读** APIREST + WebSocket |
| 成交(默认) | **本地模拟撮合 + 本地虚拟资金**(非 OKX 模拟盘) |
| 后期 | 支持切换 **实盘下单**(显式开关 + 二次确认) |
### 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 推送
FrontendOKX 风格四页)
```
### 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 + PM2
### 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×手续费)+ OKX 风四页前端 + Ubuntu/PM2 单独部署;可抄现网思路,但不改现网代码、不共用现网进程。**