Align emergency option close to OKX: use bid only, never mark.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -367,7 +367,7 @@ class Matcher:
|
|||||||
"""
|
"""
|
||||||
全平一组。默认校验期权买一深度 + 买一/标记偏差(默认≤30%)。
|
全平一组。默认校验期权买一深度 + 买一/标记偏差(默认≤30%)。
|
||||||
reason=expiry:对齐实盘,期权按标的结算价的内在价值入账(不吃盘口)。
|
reason=expiry:对齐实盘,期权按标的结算价的内在价值入账(不吃盘口)。
|
||||||
bypass_liquidity=True(紧急):绕过深度闸门,价取 max(买一, 标记, 内在价值)。
|
bypass_liquidity=True(紧急):绕过深度/偏差闸门,成交价仍按买一(对齐 OKX 市价卖,不用标记)。
|
||||||
成交顺序:先平期权 → 再瞬时平永续;永续盘口失败则回滚期权入账。
|
成交顺序:先平期权 → 再瞬时平永续;永续盘口失败则回滚期权入账。
|
||||||
"""
|
"""
|
||||||
s = get_settings()
|
s = get_settings()
|
||||||
@@ -462,7 +462,7 @@ class Matcher:
|
|||||||
if resolved is None:
|
if resolved is None:
|
||||||
return CloseResult(
|
return CloseResult(
|
||||||
ok=False,
|
ok=False,
|
||||||
detail="紧急全平失败:无买一/标记/内在价值",
|
detail="紧急全平失败:无买一(对齐 OKX,不能用标记价平仓)",
|
||||||
)
|
)
|
||||||
close_bid = resolved
|
close_bid = resolved
|
||||||
of = option_fill(
|
of = option_fill(
|
||||||
|
|||||||
@@ -68,21 +68,17 @@ def resolve_option_close_bid(
|
|||||||
bypass_liquidity: bool,
|
bypass_liquidity: bool,
|
||||||
) -> float | None:
|
) -> float | None:
|
||||||
"""
|
"""
|
||||||
非到期平仓用买一价;多头卖出不得低于内在价值(SIM)。
|
非到期平仓价(SIM)。
|
||||||
紧急 bypass:max(买一, 标记, 内在价值)。
|
- 常规:买一,且多头卖出不低于内在价值。
|
||||||
|
- 紧急 bypass:对齐 OKX 市价卖,**只按买一**(不用标记/内在价值抬价;
|
||||||
|
标记无法在交易所成交)。bypass 只绕过深度/偏差闸门。
|
||||||
到期请用 option_expiry_settle,不要走本函数。
|
到期请用 option_expiry_settle,不要走本函数。
|
||||||
"""
|
"""
|
||||||
candidates: list[float] = []
|
_ = mark # 保留参数兼容调用方;紧急不再用标记定价
|
||||||
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
|
|
||||||
if bypass_liquidity:
|
if bypass_liquidity:
|
||||||
return max(candidates)
|
if bid is None or bid < 0:
|
||||||
|
return None
|
||||||
|
return float(bid)
|
||||||
if bid is None:
|
if bid is None:
|
||||||
return None
|
return None
|
||||||
if intrinsic is not None and intrinsic >= 0:
|
if intrinsic is not None and intrinsic >= 0:
|
||||||
|
|||||||
@@ -214,14 +214,14 @@ def test_option_intrinsic_and_close_bid_floor() -> None:
|
|||||||
assert settled.notional == 44.0
|
assert settled.notional == 44.0
|
||||||
assert abs(settled.fee - 44.0 * 0.0005) < 1e-12
|
assert abs(settled.fee - 44.0 * 0.0005) < 1e-12
|
||||||
|
|
||||||
# 紧急垃圾买一 0.2,内在价值 22 → 抬到 22
|
# 紧急:对齐 OKX 市价卖,只按买一(垃圾买一不抬到内在价值/标记)
|
||||||
assert (
|
assert (
|
||||||
resolve_option_close_bid(
|
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 (
|
assert (
|
||||||
resolve_option_close_bid(
|
resolve_option_close_bid(
|
||||||
bid=0.2, mark=0.2, intrinsic=22.0, bypass_liquidity=False
|
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
|
== 25.0
|
||||||
)
|
)
|
||||||
# bypass 无买一,用标记与内在价值
|
# 紧急无买一 → 无法定价(不能用标记)
|
||||||
assert (
|
assert (
|
||||||
resolve_option_close_bid(
|
resolve_option_close_bid(
|
||||||
bid=None, mark=3.0, intrinsic=22.0, bypass_liquidity=True
|
bid=None, mark=3.0, intrinsic=22.0, bypass_liquidity=True
|
||||||
)
|
)
|
||||||
== 22.0
|
is None
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-1
@@ -79,7 +79,7 @@ ATM **期权买方** + **反向永续**;净利达标兑现,未达标拖到
|
|||||||
| **A 双腿全平** | 先市价卖期权(cash)→ 再市价平永续(reduceOnly + 反向 posSide) |
|
| **A 双腿全平** | 先市价卖期权(cash)→ 再市价平永续(reduceOnly + 反向 posSide) |
|
||||||
| **B 远虚** | 只平永续;期权留账户到期,按 **内在价值** 结算;残留不挡新开 |
|
| **B 远虚** | 只平永续;期权留账户到期,按 **内在价值** 结算;残留不挡新开 |
|
||||||
| **到期** | 期权一般由交易所结算内在价值,软件记账;若永续仍在则市价平掉 |
|
| **到期** | 期权一般由交易所结算内在价值,软件记账;若永续仍在则市价平掉 |
|
||||||
| **紧急** | 尽量双腿市价;可放宽流动性等待 |
|
| **紧急** | 尽量双腿市价;可放宽流动性等待;**成交价仍按买一**(不用标记) |
|
||||||
|
|
||||||
流动性闸门(仅 A):买一深度、买一/标记偏差 ≤30%——实盘以能否成交为准,闸门主要用于避免垃圾价硬扫。
|
流动性闸门(仅 A):买一深度、买一/标记偏差 ≤30%——实盘以能否成交为准,闸门主要用于避免垃圾价硬扫。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user