Align emergency option close to OKX: use bid only, never mark.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-30 17:15:38 +08:00
parent 2b7c504134
commit 021b0d0a22
4 changed files with 139 additions and 143 deletions
+2 -2
View File
@@ -367,7 +367,7 @@ class Matcher:
"""
全平一组。默认校验期权买一深度 + 买一/标记偏差(默认≤30%)。
reason=expiry:对齐实盘,期权按标的结算价的内在价值入账(不吃盘口)。
bypass_liquidity=True(紧急):绕过深度闸门,价取 max(买一, 标记, 内在价值)
bypass_liquidity=True(紧急):绕过深度/偏差闸门,成交价仍按买一(对齐 OKX 市价卖,不用标记)
成交顺序:先平期权 → 再瞬时平永续;永续盘口失败则回滚期权入账。
"""
s = get_settings()
@@ -462,7 +462,7 @@ class Matcher:
if resolved is None:
return CloseResult(
ok=False,
detail="紧急全平失败:无买一/标记/内在价值",
detail="紧急全平失败:无买一(对齐 OKX,不能用标记价平仓)",
)
close_bid = resolved
of = option_fill(
+8 -12
View File
@@ -68,21 +68,17 @@ def resolve_option_close_bid(
bypass_liquidity: bool,
) -> float | None:
"""
非到期平仓用买一价;多头卖出不得低于内在价值SIM)。
紧急 bypassmax(买一, 标记, 内在价值)
非到期平仓SIM)。
- 常规:买一,且多头卖出不低于内在价值。
- 紧急 bypass:对齐 OKX 市价卖,**只按买一**(不用标记/内在价值抬价;
标记无法在交易所成交)。bypass 只绕过深度/偏差闸门。
到期请用 option_expiry_settle,不要走本函数。
"""
candidates: list[float] = []
if bid is not None and bid >= 0:
candidates.append(float(bid))
if bypass_liquidity and mark is not None and mark >= 0:
candidates.append(float(mark))
if intrinsic is not None and intrinsic >= 0:
candidates.append(float(intrinsic))
if not candidates:
return None
_ = mark # 保留参数兼容调用方;紧急不再用标记定价
if bypass_liquidity:
return max(candidates)
if bid is None or bid < 0:
return None
return float(bid)
if bid is None:
return None
if intrinsic is not None and intrinsic >= 0:
+6 -6
View File
@@ -214,14 +214,14 @@ def test_option_intrinsic_and_close_bid_floor() -> None:
assert settled.notional == 44.0
assert abs(settled.fee - 44.0 * 0.0005) < 1e-12
# 紧急垃圾买一 0.2,内在价值 22 → 抬到 22
# 紧急:对齐 OKX 市价卖,只按买一(垃圾买一不抬到内在价值/标记)
assert (
resolve_option_close_bid(
bid=0.2, mark=0.2, intrinsic=22.0, bypass_liquidity=True
bid=0.2, mark=22.0, intrinsic=22.0, bypass_liquidity=True
)
== 22.0
== 0.2
)
# 常规也有内在价值地板
# 常规内在价值地板
assert (
resolve_option_close_bid(
bid=0.2, mark=0.2, intrinsic=22.0, bypass_liquidity=False
@@ -235,10 +235,10 @@ def test_option_intrinsic_and_close_bid_floor() -> None:
)
== 25.0
)
# bypass 无买一,用标记与内在价值
# 紧急无买一 → 无法定价(不能用标记)
assert (
resolve_option_close_bid(
bid=None, mark=3.0, intrinsic=22.0, bypass_liquidity=True
)
== 22.0
is None
)
+123 -123
View File
@@ -1,123 +1,123 @@
# OKX 实盘策略说明
> 产品:**比特骆驼自动化对冲系统** · 专用于 **OKX** LIVE。通用对冲逻辑见 [策略说明](./策略说明.md);币安见 [币安实盘策略说明](./币安实盘策略说明.md)。
> **标准仓**:永续 **1 ETH** + 期权 **2 ETH** 名义(倍数 `k` 可缩放)。
> 更新:2026-07-26
---
## 1. 一句话
ATM **期权买方** + **反向永续**;净利达标兑现,未达标拖到期。OKX 上期权多走 **USDC 保证金族**`ETH-USD_UM`),账户侧常需 **USDT ↔ USDC** 换汇,与币安「统一 USDT」体验不同。
---
## 2. 合约与资金
| 腿 | 合约(默认) | 计价 / 保证金 | 说明 |
|----|--------------|---------------|------|
| 永续 | `ETH-USDT-SWAP` | **USDT** | 张数:名义 ETH ÷ `ctVal`(常见 0.01 ETH/张) |
| 期权 | `ETH-USD_UM-YYMMDD-K-C/P` | **USDC**(偏 USDC 保证金) | 张数:名义 ETH ÷ `ctMult`(默认 0.01 |
### 2.1 USDT ↔ USDC(必做准备)
- 权利金、期权保证金以 **USDC** 为主;永续盈亏与保证金以 **USDT** 为主。
- 开仓前请保证:
- **USDT**:够永续保证金 + 缓冲;
- **USDC**:够期权权利金(约 15–60U 量级 ×k,视行情)+ 缓冲。
- 可用 OKX 闪兑 / 兑换把 USDT 换成 USDC(或反向)。**SIM 不模拟换汇**;实盘缺 USDC 会直接下单失败。
- 建议日常维持两侧都有余量,避免「有 USDT 却开不了期权」。
### 2.2 账户模式建议
| 项 | 建议 |
|----|------|
| 永续 | 设置页可选 **全仓 `cross`(默认)/ 逐仓 `isolated`**;双向持仓(hedge)与软件 `posSide` 对齐 |
| 期权 | 固定 **cash**(买方付权利金),**不受**永续保证金模式选项影响 |
| API | Key + Secret + **Passphrase**IP 白名单;交易权限最小化 |
实盘顶部资金条(总资金 / 资金账户 / 交易账户)直接读 OKX;SIM 才显示本地模拟资金。
---
## 3. 标准仓与缩放
与通用说明相同:`永续 = 1×k ETH``期权 = 2×k ETH`,净利目标 ≈ `15×k` USDT。
试跑建议 **k=0.1**0.1 + 0.2)。
---
## 4. 开仓机制(OKX
```
选 ATM → 先市价买期权(tdMode=cash)→ 再市价开永续(tdMode=cross + posSide
永续失败 → 立刻市价卖掉期权回滚
```
| 步骤 | OKX 行为 |
|------|----------|
| 1 期权 | `POST /api/v5/trade/order``ordType=market``side=buy``sz`=张 |
| 2 永续 | 同上;多=`buy`+`posSide=long`,空=`sell`+`posSide=short` |
| 失败回滚 | 期权 `side=sell` + `reduceOnly` |
**与币安差异**
-**Passphrase**;期权与永续 **币种可能不同**USDC vs USDT)。
- 永续按 **张** 下单(÷ ctVal),不是直接填 ETH 数量字符串(软件内部换算)。
- 期权 `tdMode=cash`;若账户改成其他模式,需改配置或改代码适配。
选向规则(ATM 相对现价)与通用策略说明一致。
---
## 5. 平仓机制(OKX
两大类与 SIM 相同:**目标平仓(A 双腿 / B 只平永续)**、**到期平仓**。
| 路径 | OKX 动作 |
|------|----------|
| **A 双腿全平** | 先市价卖期权(cash)→ 再市价平永续(reduceOnly + 反向 posSide |
| **B 远虚** | 只平永续;期权留账户到期,按 **内在价值** 结算;残留不挡新开 |
| **到期** | 期权一般由交易所结算内在价值,软件记账;若永续仍在则市价平掉 |
| **紧急** | 尽量双腿市价;可放宽流动性等待 |
流动性闸门(仅 A):买一深度、买一/标记偏差 ≤30%——实盘以能否成交为准,闸门主要用于避免垃圾价硬扫。
---
## 6. 监控与模式
| 状态 | 下方盘口 |
|------|----------|
| 有活跃仓 | 钉持仓行权价 |
| 空仓 / 仅残留 | 跟新 ATM(≥5 点切换) |
设置页:交易所选 **OKX**,运行模式 **LIVE**,填 Key/Secret/Passphrase → 写入 `.env`。切 LIVE 须输入 `LIVE` 确认。
---
## 7. 风险(OKX 特有加重)
| 风险 | 说明 |
|------|------|
| **换汇遗漏** | USDT 充足但 USDC 不足 → 期权拒单 |
| **模式不匹配** | 账户非 cash / 非双向持仓 → 下单参数报错 |
| **期权深度** | USDC 期权盘口偶发更薄,远虚更易走 B |
| **限流** | 独立 IP;退避重试 |
---
## 8. 上线检查(OKX
1. SIM 在 OKX 行情下跑通开平。
2. 账户 USDT + USDC 均到位;完成一次小额兑换演练。
3. API 三件套 + LIVE 确认。
4. k=0.1 试:开仓、目标平或到期、残留各至少一次。
---
## 9. 修订记录
| 日期 | 说明 |
|------|------|
| 2026-07-26 | 初稿:从通用实盘说明拆出 OKX;强调 USDT/USDC 与 cash/cross 开平仓 |
# OKX 实盘策略说明
> 产品:**比特骆驼自动化对冲系统** · 专用于 **OKX** LIVE。通用对冲逻辑见 [策略说明](./策略说明.md);币安见 [币安实盘策略说明](./币安实盘策略说明.md)。
> **标准仓**:永续 **1 ETH** + 期权 **2 ETH** 名义(倍数 `k` 可缩放)。
> 更新:2026-07-26
---
## 1. 一句话
ATM **期权买方** + **反向永续**;净利达标兑现,未达标拖到期。OKX 上期权多走 **USDC 保证金族**`ETH-USD_UM`),账户侧常需 **USDT ↔ USDC** 换汇,与币安「统一 USDT」体验不同。
---
## 2. 合约与资金
| 腿 | 合约(默认) | 计价 / 保证金 | 说明 |
|----|--------------|---------------|------|
| 永续 | `ETH-USDT-SWAP` | **USDT** | 张数:名义 ETH ÷ `ctVal`(常见 0.01 ETH/张) |
| 期权 | `ETH-USD_UM-YYMMDD-K-C/P` | **USDC**(偏 USDC 保证金) | 张数:名义 ETH ÷ `ctMult`(默认 0.01 |
### 2.1 USDT ↔ USDC(必做准备)
- 权利金、期权保证金以 **USDC** 为主;永续盈亏与保证金以 **USDT** 为主。
- 开仓前请保证:
- **USDT**:够永续保证金 + 缓冲;
- **USDC**:够期权权利金(约 15–60U 量级 ×k,视行情)+ 缓冲。
- 可用 OKX 闪兑 / 兑换把 USDT 换成 USDC(或反向)。**SIM 不模拟换汇**;实盘缺 USDC 会直接下单失败。
- 建议日常维持两侧都有余量,避免「有 USDT 却开不了期权」。
### 2.2 账户模式建议
| 项 | 建议 |
|----|------|
| 永续 | 设置页可选 **全仓 `cross`(默认)/ 逐仓 `isolated`**;双向持仓(hedge)与软件 `posSide` 对齐 |
| 期权 | 固定 **cash**(买方付权利金),**不受**永续保证金模式选项影响 |
| API | Key + Secret + **Passphrase**IP 白名单;交易权限最小化 |
实盘顶部资金条(总资金 / 资金账户 / 交易账户)直接读 OKX;SIM 才显示本地模拟资金。
---
## 3. 标准仓与缩放
与通用说明相同:`永续 = 1×k ETH``期权 = 2×k ETH`,净利目标 ≈ `15×k` USDT。
试跑建议 **k=0.1**0.1 + 0.2)。
---
## 4. 开仓机制(OKX
```
选 ATM → 先市价买期权(tdMode=cash)→ 再市价开永续(tdMode=cross + posSide
永续失败 → 立刻市价卖掉期权回滚
```
| 步骤 | OKX 行为 |
|------|----------|
| 1 期权 | `POST /api/v5/trade/order``ordType=market``side=buy``sz`=张 |
| 2 永续 | 同上;多=`buy`+`posSide=long`,空=`sell`+`posSide=short` |
| 失败回滚 | 期权 `side=sell` + `reduceOnly` |
**与币安差异**
-**Passphrase**;期权与永续 **币种可能不同**USDC vs USDT)。
- 永续按 **张** 下单(÷ ctVal),不是直接填 ETH 数量字符串(软件内部换算)。
- 期权 `tdMode=cash`;若账户改成其他模式,需改配置或改代码适配。
选向规则(ATM 相对现价)与通用策略说明一致。
---
## 5. 平仓机制(OKX
两大类与 SIM 相同:**目标平仓(A 双腿 / B 只平永续)**、**到期平仓**。
| 路径 | OKX 动作 |
|------|----------|
| **A 双腿全平** | 先市价卖期权(cash)→ 再市价平永续(reduceOnly + 反向 posSide |
| **B 远虚** | 只平永续;期权留账户到期,按 **内在价值** 结算;残留不挡新开 |
| **到期** | 期权一般由交易所结算内在价值,软件记账;若永续仍在则市价平掉 |
| **紧急** | 尽量双腿市价;可放宽流动性等待**成交价仍按买一**(不用标记) |
流动性闸门(仅 A):买一深度、买一/标记偏差 ≤30%——实盘以能否成交为准,闸门主要用于避免垃圾价硬扫。
---
## 6. 监控与模式
| 状态 | 下方盘口 |
|------|----------|
| 有活跃仓 | 钉持仓行权价 |
| 空仓 / 仅残留 | 跟新 ATM(≥5 点切换) |
设置页:交易所选 **OKX**,运行模式 **LIVE**,填 Key/Secret/Passphrase → 写入 `.env`。切 LIVE 须输入 `LIVE` 确认。
---
## 7. 风险(OKX 特有加重)
| 风险 | 说明 |
|------|------|
| **换汇遗漏** | USDT 充足但 USDC 不足 → 期权拒单 |
| **模式不匹配** | 账户非 cash / 非双向持仓 → 下单参数报错 |
| **期权深度** | USDC 期权盘口偶发更薄,远虚更易走 B |
| **限流** | 独立 IP;退避重试 |
---
## 8. 上线检查(OKX
1. SIM 在 OKX 行情下跑通开平。
2. 账户 USDT + USDC 均到位;完成一次小额兑换演练。
3. API 三件套 + LIVE 确认。
4. k=0.1 试:开仓、目标平或到期、残留各至少一次。
---
## 9. 修订记录
| 日期 | 说明 |
|------|------|
| 2026-07-26 | 初稿:从通用实盘说明拆出 OKX;强调 USDT/USDC 与 cash/cross 开平仓 |