diff --git a/backend/app/sim/matcher.py b/backend/app/sim/matcher.py index 2ffbb11..c6e01cc 100644 --- a/backend/app/sim/matcher.py +++ b/backend/app/sim/matcher.py @@ -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( diff --git a/backend/app/sim/pricing.py b/backend/app/sim/pricing.py index 7acccc4..7bef071 100644 --- a/backend/app/sim/pricing.py +++ b/backend/app/sim/pricing.py @@ -68,21 +68,17 @@ def resolve_option_close_bid( bypass_liquidity: bool, ) -> float | None: """ - 非到期平仓用买一价;多头卖出不得低于内在价值(SIM)。 - 紧急 bypass:max(买一, 标记, 内在价值)。 + 非到期平仓价(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: diff --git a/backend/tests/test_p1_p2_rules.py b/backend/tests/test_p1_p2_rules.py index 35dbbf0..9d6abc1 100644 --- a/backend/tests/test_p1_p2_rules.py +++ b/backend/tests/test_p1_p2_rules.py @@ -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 ) diff --git a/docs/OKX实盘策略说明.md b/docs/OKX实盘策略说明.md index f4f991c..3091926 100644 --- a/docs/OKX实盘策略说明.md +++ b/docs/OKX实盘策略说明.md @@ -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 开平仓 |