Files
eth_hedge_sim/docs/策略说明.md
T
dekun 0ee1d8be5d Add fixed-direction switch for perp/option open side.
When enabled, lock perp long→buy Put or short→buy Call with ITM/ATM only; off keeps ATM/ask rules.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-29 19:18:12 +08:00

361 lines
19 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`
> 依据当前代码逻辑整理(SIM 默认真值参数)。
> 关联:[开发方案](./开发方案.md)、[商业化与授权方案](./商业化与授权方案.md)、[实盘索引](./实盘策略说明.md)、[OKX实盘](./OKX实盘策略说明.md)、[币安实盘](./币安实盘策略说明.md)
> 更新:2026-07-26
**运行模式**:设置页「运行模式」可切 **SIM / LIVE**;交易所 API 录入后写入服务器 `.env`(不回传明文)。LIVE 须二次确认输入 `LIVE`;**OKX / 币安均可真下单**(须选对应当前交易所并配齐密钥)。有持仓时不可切模式。
---
## 1. 策略一句话
**ATM 期权买方** 表达方向弹性,用 **反向永续** 做对冲腿;波动大时争取多轮兑现净盈利,波动小时接受权利金磨损,**到期自动全平**。
本质是 **概率与样本**:不追求每天固定轮次,而按行情吃机会。
**行情来源可切换(SIM**:系统设置中可选 **OKX****币安** 公共行情;成交仍为本机模拟撮合,**不下真单**。
| 交易所 | 永续(默认) | 期权 | 说明 |
|--------|--------------|------|------|
| OKX | ETH-USDT-SWAP | ETH-USD_UM(偏 USDC 保证金族) | 当前默认 |
| 币安 | ETHUSDTUSDT-M | 欧洲期权 ETH-YYMMDD-行权价-C/PUSDT | 后期实盘优先候选 |
有持仓时不可切换交易所;切换后自动套用该所合约并重连行情。
---
## 2. 仓位结构(默认)
| 腿 | 默认数量 | 方向规则 | 成交方式 |
|----|----------|----------|----------|
| 永续 ETH-USDT-SWAP | **1 ETH** | 见下表 | 市价(吃买一/卖一 + 滑点) |
| 期权 ETH-USD_UM | **2 ETH** 名义 | 只买不卖 | 开仓吃卖一,平仓吃买一 |
**开仓顺序**:先成交期权 → 确认后再市价成交永续。永续盘口失败则回滚期权扣款,不留半边仓。
**平仓顺序**:同样先平期权(买一薄)→ 再瞬时平永续。平期权期间永续对冲先留着;永续盘口失败则回滚期权入账。
永续杠杆默认 **3×**(可配)。同时最多 **1 组**仓,禁止叠仓开下一组。
### 2.1 开仓方向
#### 默认(`fixed_direction_enabled=false`):ATM 相对现价优先
行权价相对标的有偏离时(币安粗档常见),**先按 ATM 偏上/偏下选向**;仅当行权价与标的贴平(≈)时,才回退卖一比价。
| 条件 | 期权 | 永续 | bias |
|------|------|------|------|
| ATM 行权价 **<** 标的(如 1850 vs 1859 | 买入 Call | 做空 | `strike_below_spot` |
| ATM 行权价 **>** 标的(如 1875 vs 1859 | 买入 Put | 做多 | `strike_above_spot` |
| ATM ≈ 标的,且 Call 卖一 > Put 卖一 | 买入 Call | 做空 | `call_ask_gt_put` |
| ATM ≈ 标的,且 Put 卖一 > Call 卖一 | 买入 Put | 做多 | `put_ask_gt_call` |
| ATM ≈ 标的且卖一相等 | 不开仓,继续等待 | — | — |
直觉:偏下行权价用 Call+空,偏上行权价用 Put+多;贴平时再按权利金溢价侧选向。
#### 固定方向(`fixed_direction_enabled=true`
设置里可开「固定方向」(默认关),并指定永续多或空:
| `fixed_perp_side` | 永续 | 期权 | 行权价约束 | bias |
|-------------------|------|------|------------|------|
| `long` | 做多 | 买入 Put | 实值或平值(K ≥ 标的),优先贴近标的 | `fixed_long_put` |
| `short` | 做空 | 买入 Call | 实值或平值(K ≤ 标的),优先贴近标的 | `fixed_short_call` |
固定方向开启时:**不买虚值**;ATM 偏差限制不适用(由实值/平值规则替代)。
---
## 3. 开仓机制
### 3.1 流程概览
```
策略运行中
→ 无持仓且不在休息期
→ 非周末跳过(若开启)
→ 选到期:剩余时长 ≥ min_option_hours(默认 12h
→ 若固定方向关:该到期 ATM;若开:按 Put/Call 选实值或平值档
→ 若未开固定方向且开启 atm_open_offset_enabled|ATM 标的| ≤ max_atm_open_offset(默认 3)否则跳过
→ 选向:固定方向按设置;否则 ATM 偏下→Call+空;偏上→Put+多;贴平→卖一比价
→ 期权杠杆 = 标的价 ÷ 卖一权利金 ≥ min_option_leverage(默认 100
→ 先开期权(吃卖一)→ 再市价开永续(一组)
→ 锁定 initial_premium = 期权成交价 × 期权名义(不含费)
```
### 3.2 选约约束
| 参数 | 默认 | 作用 |
|------|------|------|
| `min_option_hours` | 12 | 过滤过近到期,减少刚开仓就到期 |
| `min_option_leverage` | 100 | 权利金相对标的不能太贵(现价/卖一) |
| `fixed_direction_enabled` | false | 固定方向开关(默认关) |
| `fixed_perp_side` | long | 开启后:long=多+Put / short=空+Call |
| `atm_open_offset_enabled` | false | 开仓 ATM 偏差限制开关(默认关;固定方向开启时忽略) |
| `max_atm_open_offset` | 3 | 开关开启后:\|ATM − 标的\| 超过则不开 |
| ATM / 实值平值 | — | 默认 ATM;固定方向时同到期实值或平值、最贴近标的 |
无合格合约时:状态停留等待,记录「无合格期权…」,不硬开。
### 3.3 时间与节奏
| 规则 | 说明 |
|------|------|
| 开仓时间窗 | **已取消**,全天可尝试(仍受选约约束) |
| 周六/周日 | 默认 **跳过新开仓**(上海时区,`skip_weekends`);持仓仍可平 |
| 每日轮次上限 | **不限制**;波动大可能多轮,波动小可能一轮都难 |
| 组间休息 | 全平后默认休息 **300 秒**`rest_seconds`)再开下一组;**自动达标/到期、手动全平、紧急全平**成功后均进入休息 |
| 暂停时 | **不新开仓**;仍执行 **目标平仓 + 到期平仓**(防重启/暂停漏平) |
| 同时持仓 | 最多 1 组 |
### 3.4 费用(SIM
- 永续、期权均按可配 `fee_rate`(默认 0.0005)计费。
- **SIM**:滑点按约 1 倍费率计入成交价,手续费另扣;统计拆分「永续手续费 / 期权手续费 / 滑点」。
- **LIVE**:用交易所真实成交价与真实手续费,**不计、不展示**模拟滑点。
- 开仓现金:支付期权权利金 + 开仓手续费;永续开仓主要扣费。
---
## 4. 平仓机制
平仓分两大类:**① 目标平仓**(净盈利达标);**② 到期平仓**(目标未达标,拖到到期)。
目标平仓又分两种落地方式(双腿全平 / 只平永续+期权归档到期)。
### 4.1 目标平仓(第一优先级)
**净盈利**口径(盯盘用,主要看买一,不看标记价):
```
净盈利 ≈ 永续浮盈 + 期权浮盈 − 预估平仓手续费
期权浮盈 = 当前买一 × 数量 − 初始权利金
```
| 出场模式 | 默认 | 触发条件 |
|----------|------|----------|
| `fixed_usdt` | 目标 **15 USDT** | 净盈利 ≥ `net_profit_target` |
| `premium_multiple` | 倍数 **1.0** | 净盈利 ≥ `initial_premium × premium_exit_multiple` |
说明:权利金倍数模式下,**1× = 赚回一倍权利金金额的净利**(例如权利金 20.41,目标约 20.41,不是 40.82)。
达标后按期权状态走下面 **A / B** 两套(不是互相替换,按能否平掉期权分支):
#### 4.1.A 双腿全平(期权仍有可平价值 / 非远虚)
- 条件:净利达标,且期权 **不是远虚**(仍可能有买一可平)。
- 动作:校验买一深度 + 买一/标记偏差(默认 ≤30%)→ **先平期权、再平永续**
- 通不过流动性 → `liquidity_wait`,继续等待(不改开仓组)。
#### 4.1.B 只平永续 + 期权归档到期(远虚)
筛选约 **100× 杠杆** 期权时,标的波动约 **1%** 量级后,买方腿常变为**远虚**(内在价值≈0),买一往往枯死、整组硬平会卡死。
- 条件:净利达标,且期权已是 **虚值且远虚**(内在价值 ≈ 0)。
- 动作:
1. **只市价平掉永续**,兑现净利里永续那一截;
2. 本张期权 **不再盯盘、不再参与平仓扫描**,归档为「到期残留」;
3. 因期权 **逐仓**,残留 **不占用活跃持仓****不挡住下一组开仓**
4. 下一组开平仓 **只扫当前活跃组期权**,不扫描历史残留腿;
5. 残留期权到到期日再按 **内在价值** 单独结算(多半接近 0);
6. 页面:**活跃持仓区变空**;归档腿出现在「残留期权(待到期)」;下方期权盘口 **切回新 ATM**(见 4.6)。
残留到期结算口径:
```
结算价 = 内在价值(Put: max(KS,0) / Call: max(SK,0)
期权盈亏 ≈ (结算价 − 开仓均价) × 数量 − 结算手续费
整组净利 = 已实现永续盈亏 + 期权结算盈亏 − 全部手续费
```
> 直觉:能双腿平就走 A;期权已经远虚平不掉就走 B,别把永续利润和下一单机会一起卡死。
### 4.2 到期平仓(目标未达标)
- 净利一直未达标 → **不主动砍仓**,持有到期权到期。
- 到达期权到期时刻(OKXUTC 08:00 = **上海 16:00**)→ 原因 `expiry`
- **活跃组**:期权按标的结算价的 **内在价值** 入账;若永续仍在则市价平掉。
- **残留组**(曾走 4.1.B):永续早已平掉,**只结算归档期权**,不碰当前活跃仓、不改下方 ATM。
- 策略 **暂停时仍执行目标平仓与到期结算**,不新开仓;避免重启/暂停后漏平。
- 波动小、拖到到期:权利金亏损视为 **预算内成本**,可接受。
### 4.3 平仓流动性闸门(仅 4.1.A)
双腿全平时:
- 期权买一深度需覆盖平仓名义;
- 买一相对标记偏差默认 ≤ **30%**`close_bid_mark_max_pct`);
- 不满足 → `liquidity_wait`,继续等待。
**4.1.B / 到期 / 紧急全平**:不适用「必须卖掉期权买一」这套闸门(到期与残留按内在价值;紧急可绕过)。
**紧急全平**:活跃组尽量双腿平掉;残留期权一并按内在价值结算;成功后进入组间休息(与手动全平相同)。
### 4.4 其它平仓入口 / 原因码
| 原因码 | 含义 |
|--------|------|
| `fixed_usdt` / `premium_multiple` | 目标平仓 · 双腿全平(4.1.A) |
| `target_perp_only` | 目标平仓 · 只平永续,期权归档到期(4.1.B) |
| `expiry` | 到期结算(活跃组或残留期权) |
| `emergency` | 界面紧急全平 |
| `manual` | 手动平仓 |
### 4.5 流程总览
```
有活跃持仓
├─ 净利达标?
│ ├─ 是 · 期权远虚(内在价值≈0)→ 平永续,期权归档到期,可开下一组
│ └─ 是 · 非远虚 → 试双腿全平(流动性闸门)→ 失败则等待
└─ 否 → 持有直到到期 → 内在价值结算(+ 若有永续则平永续)
残留期权(已归档)
└─ 仅到期结算;不参与盯盘、不参与下一组平仓扫描
```
### 4.6 行情监控与页面展示
计划页下方期权盘口 **不是永远跟现价 ATM**,也 **不是永远跟开仓那张**,按仓位状态切换:
| 状态 | 持仓区 | 「残留期权(待到期)」 | 下方期权盘口 |
|------|--------|---------------------|--------------|
| **有活跃组**(永续+期权都在) | 显示当前组 | 无(或仅历史残留) | **钉在持仓行权价**(标题「持仓期权 @ K」);浮盈亏/平仓价 **只用持仓合约盘口**,禁止借用新 ATM |
| **空仓**(无活跃组) | 空 | 无 | **跟现价 ATM**\|ATM 标的\| ≥ **5** 点时自动切到新行权价,供下一组选约 |
| **仅残留**(4.1.B:永续已平,期权归档等到期) | 空(活跃已 flat) | **显示归档合约**(到期/行权价) | **显示新 ATM**(为下一组开仓);**不**继续钉归档那张 |
要点:
1. **活跃持仓期间**:现价怎么走,下方监控都盯开仓那张;重启服务也不会漂到新 ATM。
2. **平掉活跃组或走 4.1.B 后**:下方立刻回到「下一单 ATM」;归档腿只出现在残留列表,到期按内在价值结算。
3. **浮盈亏口径**:持仓合约买一;不得用其他行权价的买一顶替(避免 1880 持仓显示成 1890 盘口)。
```
有活跃仓 → 下方 = 持仓期权 @ 开仓行权价
无活跃仓 → 下方 = 期权 ATM @ 当前现价档(可随价漂移 ≥5 点切换)
残留腿 → 只在「残留期权」行;到期结算;不占用下方 ATM
```
---
## 5. 策略侧重点
| 侧重点 | 说明 |
|--------|------|
| **吃波动,不赌横盘** | 买方期权需要标的走动;大波动利于达标出场 |
| **概率与轮次** | 波动日可能多轮;磨盘日可能零轮或一轮认亏 |
| **确定性时间规则** | 用周末跳过、到期全平,**不做**难以精准的横盘识别 |
| **费用后净利** | 出场看扣完预估平仓费后的净盈利,避免「账面赚、平完亏」 |
| **单组纪律** | 活跃持仓最多 1 组;远虚归档的残留期权不挡下一组(逐仓) |
| **权利金是成本预算** | 小波动拖到期亏权利金,属于策略设计内损耗,不是异常 bug |
| **目标平仓两分支** | 能平期权则双腿全平;远虚则只平永续、期权到期归档 |
| **监控分工** | 有仓钉持仓行权价;空仓/仅残留时下方跟新 ATM;残留腿单独列表 |
适合对外表述:
> 适合有波动的时段;震荡磨盘是主要磨损源。不怕单边大波动本身,怕没波动却持续付时间价值。
---
## 6. 风险点评估
### 6.1 主要风险
| 风险 | 等级 | 说明 | 缓解(已有/建议) |
|------|------|------|------------------|
| **横盘 / 低波动** | 高 | Theta 消耗权利金;永续几乎不贡献利润 | 周末跳过;到期认亏全平;接受磨损日 |
| **方向选错** | 中高 | 卖一比价并非预测圣杯;错向时期权可能失利,永续端也可能承压 | 净盈利达标才兑现;到期强平止损时间 |
| **开平滑点与手续费** | 中 | 双边 taker + 滑点侵蚀小目标利润 | 目标默认 15U 需覆盖费用;勿把目标设过低 |
| **期权流动性** | 中 | 远虚时买一枯死 | 4.1.B 只平永续+归档;到期内在价值结算 |
| **杠杆与保证金** | 中 | 永续 3×,标的急跌/急涨挤压保证金 | 控制名义、保留资金缓冲;实盘注意强平线 |
| **同到期 ATM 拥挤** | 低–中 | 临近到期价差与盘口恶化 | `min_option_hours`;到期强平 |
| **SIM≠实盘** | 高(若直接外推) | 本地撮合、深度与成交假设简化 | 小资金实盘验证后再放大 |
| **交易所限流 / 断连** | 中 | 行情中断导致延误开平 | 健康检查;部署侧监控 |
### 6.2 明确不做什么(边界)
- 不做卖方期权(不收权利金那套)。
- 不做横盘「智能识别」开仓过滤。
- 不做多组并行。
- 当前主路径为 **SIM**;实盘需另行授权与二次确认(见商业化方案)。
### 6.3 损益直觉
- **有利波动**:期权端弹性(2 ETH 名义)常快于永续(1 ETH)的对冲损耗 → 易达净利目标。
- **不利 / 无波动**:权利金贬值 + 费用 → 拖到到期全平,单组亏损量级约在 **权利金量级 + 双边费用**(再叠加永续期间浮亏/浮盈)。
---
## 7. 最小资金推荐
以下按 **默认仓位**(永续 1 ETH、期权 2 ETH 名义、杠杆 3×)估算,标的价按 **ETH ≈ 1,8002,200 USDT** 量级。
### 7.1 单组占用粗算
| 项目 | 约略金额(USDT) |
|------|------------------|
| 永续保证金(名义÷杠杆) | ≈ 1,800–2,200 ÷ 3 ≈ **600750** |
| 期权权利金(ATM、短期限,2 ETH) | 常见约 **1560**(行情波动大时更高) |
| 开平手续费 / 滑点缓冲 | **2050** |
| 逆向波动缓冲(避免过紧) | **300800**(经验缓冲,非精确 VaR |
### 7.2 建议档位
| 档位 | 建议权益(USDT) | 适用 |
|------|------------------|------|
| **绝对下限(不推荐)** | ≥ **1,500** | 仅能勉强覆盖保证金 + 小权利金,缓冲极薄,易心态与风控双紧 |
| **最小可用** | ≥ **3,000** | 默认参数下可跑 SIM / 极小实盘验证,仍偏紧 |
| **推荐起步** | ≥ **5,000** | 留出磨损日与波动缓冲,更符合「概率样本」玩法 |
| **较舒适** | ≥ **10,000** | 参数微调、连续多日磨损时更从容 |
> 缩放规则:若把永续改为 `0.5 ETH`、期权 `1 ETH`,资金需求大约可按比例减半,但费用占比会上升,小目标更难赚。
### 7.3 与出场目标的关系
- 默认净利目标 **15 USDT**:在费用后属于「小而频」目标,依赖波动日多次兑现。
- 单日/单组最坏常见情形更接近 **亏掉当期权利金 + 费用**(外加永续路径损益),资金规划应按 **多次磨损日** 而非「每组必赚 15」来留余量。
### 7.4 SIM 默认
系统默认虚拟权益 `initial_equity = 10,000` USDT(策略设置可改;保存且数值变更时在无持仓下重置账本),**不代表**实盘建议入金。
实盘试跑建议仓位:**永续 0.1 ETH / 期权 0.2 ETH 名义**(k=0.1),并同比下调净利目标。分所口径见 [OKX实盘策略说明](./OKX实盘策略说明.md)、[币安实盘策略说明](./币安实盘策略说明.md)。
---
## 8. 关键可配参数速查
| 参数 | 默认 | 类别 |
|------|------|------|
| `perp_qty_eth` | 1 | 仓位 |
| `option_qty_eth` | 2 | 仓位 |
| `leverage` | 3 | 永续 |
| `fee_rate` | 0.0005 | 成本 |
| `exit_mode` | fixed_usdt | 出场 |
| `net_profit_target` | 15 | 出场 |
| `premium_exit_multiple` | 1.0 | 出场 |
| `rest_seconds` | 300 | 节奏 |
| `skip_weekends` | true | 时间 |
| `min_option_hours` | 12 | 选约 |
| `min_option_leverage` | 100 | 选约 |
| `fixed_direction_enabled` | false | 固定方向开关 |
| `fixed_perp_side` | long | 固定永续方向 |
| `atm_open_offset_enabled` | false | 开仓 ATM 偏差开关 |
| `max_atm_open_offset` | 3 | 开仓 ATM 偏差上限 |
| `close_bid_mark_max_pct` | 30 | 平仓流动性 |
---
## 9. 修订记录
| 日期 | 说明 |
|------|------|
| 2026-07-24 | 选约增加固定方向开关:永续多→Put / 空→Call,期权仅实值或平值;关则沿用 ATM/比价 |
| 2026-07-25 | 初稿:对齐当前开平仓、周末跳过、到期全平、净盈利口径与资金建议 |
| 2026-07-25 | 平仓顺序改为先期权后永续(与开仓同理:薄腿优先) |
| 2026-07-26 | 到期按内在价值结算(对齐实盘);紧急平仓仍用 max(买一,标记,内在价值) |
| 2026-07-26 | 明确两套目标平仓:双腿全平 / 远虚只平永续+期权归档到期;到期为未达标路径 |
| 2026-07-26 | 补充 §4.6:有仓钉持仓监控、空仓/仅残留跟新 ATM、残留列表与到期内在价值结算展示分工 |
| 2026-07-26 | 设置页 SIM/LIVE 切换;API 密钥落 `.env`;OKX LIVE 开平仓;币安密钥可存 |