# 审计说明 — 开/平仓逻辑与实盘安全（2026-07-29）

## 结论（四轮后）

开平仓主路径已闭环：占槽 → 意图落库 → 期权 → 永续 → open；平仓先 mark pending 再平永续；崩溃可 `recover_opening`。第四轮修掉「查仓失败当空仓 finalize」等回归。

## 四轮关键项

| 轮次 | 关键修复 |
|------|----------|
| 1 | 到期双入账；abandon `allow_negative`；保证金模式；引擎锁；AUTH；盈亏查询 |
| 2 | abandon 假 residual；部分成交不当全成；residual LIVE 账本 |
| 3 | stamp + recover_opening；期权对账；已空不重卖/不下单；币安 orderId= |
| 4 | 查仓 `None`≠`0`；回滚仅确认空仓；half_open/promote 现金幂等；opening any-option；开仓张数独立 |

## 开仓

1. `claim` → `assert`（永续+期权残留）→ `stamp` → 买期权 → `stamp` 均价  
2. 开永续用 `perp_open_contracts_okx`（不跟残留）  
3. 永续失败：查仓 `None`/有仓 → 保留 opening；确认空 → 回滚期权 / half_open  
4. tick/启动/紧急：`recover_opening`（空清槽 / 仅期权 half_open / 双边 promote）

## 平仓

1. 卖期权（已空则跳过）→ mark pending 仅一次  
2. 查永续：`None` → 失败返回；`0` → finalize；`>0` → 下单  
3. abandon：已 pending 只续平；禁止假 residual  

## 已知极少人工场景

- opening 无 `option_inst_id` 且交易所有不明期权：禁止自动清槽  
- promote 入场价可能用指数近似（本地镜像；实盘盈亏可走交易所对账）

## 涉及文件

`live/reconcile.py` · `executor.py` · `binance_executor.py` · `okx_trade.py` · `binance_trade.py` · `strategy/engine.py` · `sim/matcher.py`
