Add 永期半自动: human arm, machine open/close, then stop.

Settings toggle, Plan panel, Fleet monitor, exit locks and armed TOCTOU gates; docs and dual audits.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-08 11:20:11 +08:00
parent bf3441537e
commit 4585dba3c3
22 changed files with 1147 additions and 44 deletions
+2 -2
View File
@@ -138,9 +138,9 @@ bash /opt/eth_hedge_sim/control/deploy/update.sh
- **实时推送**:浏览器通过 SSE(`GET /api/nodes/status/stream`)接收状态;中控约每秒**并行**拉取各策略机 `/api/fleet/status`,有变化才推送;断线自动重连。工具栏显示「实时 · 1s」。
- **刷新**:仍可手动走 `/api/nodes/status/all` 拉一次。
- **卡片**:在线/离线、SIM/LIVE、阶段、持仓、轮次、行情、Token 状态。
- **卡片**:在线/离线、SIM/LIVE、阶段、持仓、轮次、行情、Token 状态;模式列在开启半自动时显示「半自动」(否则永期/期期)
- **运行中**:卡片绿色;底部按钮显示「运行中」且不可点启动。
- **点击卡片**:放大弹层 — 策略详情 + **整体统计**(按需拉 `/api/nodes/{id}/stats` → 策略机 `/api/fleet/stats`,同策略页统计)+ 持仓腿表;**净浮盈 / 浮盈** 正绿负红加粗。
- **点击卡片**:放大弹层 — 策略详情 + **整体统计**(按需拉 `/api/nodes/{id}/stats` → 策略机 `/api/fleet/stats`,同策略页统计)+ 持仓腿表;**净浮盈 / 浮盈** 正绿负红加粗;半自动时状态含授权/方向,出场列显示点数与净利目标
- **登录策略机**:免密新标签打开策略页。
- **更新代码 / 勾选更新**:**二次确认**后执行;会 reload 进程,**不会**自动 start。
+100
View File
@@ -0,0 +1,100 @@
# 半自动模式说明
> 永期(永续 + 期权)专用。期期模式不可用。
> 与「手动开一组」(测试按钮)无关:半自动是**人工定看法并授权 → 机器盯开盯平 → 平完停**。
---
## 1. 流程
```text
系统设置开启半自动
→ 首页出现「半自动 · 本单」面板
→ 人工设:方向 / 波动点数 / 净利基数 / 选约门槛
→ 「授权开下一单」
→ 机器:选约 → 开仓 → 盯出场 → 双腿全平
→ phase=wait_human,清授权,不自动开下一单
→ 人工再授权才进入下一单
```
| 阶段 | 含义 |
|------|------|
| `wait_human` | 未授权,不开仓;有仓仍可盯平 |
| 授权后 `idle`/`opening`/`open` | 与全自动相同状态机,但出场走半自动规则 |
| 平仓后 | 强制回 `wait_human``semi_armed=false`,清本单出场锁 |
| 进程重启 | 无仓时清 `semi_armed`,须重新授权 |
| 开仓成功 | 锁定本单 `view/点数/净利基数`(持仓期不跟设置漂移) |
安全门:选约异步后、落 `opening` 前再次校验授权;取消授权可中止未成交开仓。LIVE 授权前过 `live_ready`。关闭/开启半自动设置时强制清授权。
---
## 2. 方向(看法)
| 看法 | 期权 | 永续 |
|------|------|------|
| 多 (`long`) | 买 Call | 空 |
| 空 (`short`) | 买 Put | 多 |
选约强制:**实值或平值**;最短剩余小时、最低杠杆用半自动本单参数(默认 ≥30h、杠杆 ≥100)。
---
## 3. 出场
净利口径与全自动一致:可平盘口估价 − 开仓费 − 预估平仓费(非乐观 mark)。
| 规则 | 条件 | close_reason |
|------|------|----------------|
| 顺方向 | 指数相对**开仓指数**达到目标点数,**且**组合净利 > 0 | `semi_target_points` |
| 逆方向 / 兑现 | 组合净利 ≥ `semi_perp_exit_unit × k`k=以损倍数,手动仓视为 1 | `semi_perp_exit` |
- 到点但净利 ≤ 0:继续持有(状态提示,不平)。
- 流动性不足:进入 `liquidity_wait`;回落未达标则取消挂起。
- 半自动平仓**禁止**远虚「只平永续、期权归档」;顺序仍为**先期权后永续**。
首页预览「指数 → 到点」用**当前指数**示意;真实触发达标用**开仓指数**。
---
## 4. 设置键
| Key | 默认 | 说明 |
|-----|------|------|
| `semi_auto_enabled` | false | 系统设置 · 节奏 |
| `semi_armed` | false | 是否已授权本单(平完清零) |
| `semi_view_side` | long | long / short |
| `semi_option_move_points` | 50 | 顺向波动点数 |
| `semi_perp_exit_unit` | 5 | 净利出场基数(×k) |
| `semi_min_option_hours` | 30 | 选约最短剩余 |
| `semi_min_option_leverage` | 100 | 选约最低杠杆 |
API(需登录):
- `POST /api/plan/semi/arm` `{ "armed": true|false }`
- `PUT /api/plan/semi/params` 本单参数(有持仓 409
---
## 5. 中控
Fleet `strategy` 透出半自动字段。监控模式列在永期开启半自动时显示「半自动」;详情状态含授权/方向,出场列显示点数与净利目标。
---
## 6. 与全自动差异
| | 全自动 | 半自动 |
|--|--------|--------|
| 方向 | 盘口信号或固定方向 | 人工看法 |
| 出场 | fixed_usdt / 权利金倍数(可锁定) | 点数+净利>0,或基数×k |
| 轮间 | 休息后自动再开 | 平完停,须再授权 |
| 期期 | 可用 | 强制关闭半自动 |
---
## 7. 修订
| 日期 | 说明 |
|------|------|
| 2026-08-08 | 初版:设置开关、首页本单、中控展示、出场与停机 |
+40
View File
@@ -0,0 +1,40 @@
# 审计说明 — 2026-08-08 永期半自动
## 范围
半自动:`semi_auto.py`、引擎授权/出场/`wait_human``/api/plan/semi/*`、设置与 Fleet 透出、首页与中控 UI。
## 轮次
| 轮次 | 工具 | 结论 |
|------|------|------|
| 1 | Security Review | 3 项中高:取消授权 TOCTOU、出场参数未锁定、关半自动未清 armed |
| 2 | Bugbot | 2 项高:重启后陈旧 armed、授权绕过 LIVE `live_ready` |
## 已修复
1. 选约后、`opening` 前、以及 `open_group` 直前再次校验 `semi_armed`;取消授权中止开仓。
2. `phase=opening` 时禁止取消授权(防 LIVE 落单窗口 TOCTOU)。
3. 开仓成功写入 `semi_trade_lock`;盯盘出场读锁;平仓/收尾清理。
4. 设置关/开半自动强制 `semi_armed=false`;设置接口不可写入 `semi_armed`
5. 进程启动无仓清 armed。
6. `arm_semi` LIVE 先过 `live_ready`
7. 已授权或活跃阶段禁止改本单参数。
8. 半自动平仓禁止远虚只平永续;平仓后勿覆盖 `wait_human` phase。
## 复审
| 轮次 | 工具 | 结论 |
|------|------|------|
| 复审 Security | 先验 MEDIUMopening→open_group 窗口) | 已用 `open_group` 直前 `is_armed` + `phase=opening` 禁止取消授权关闭 |
| 复审 Bugbot | 同窗口 TOCTOUhigh) | 同上已修;无其它半自动逻辑 bug |
## 验证
- `pytest backend/tests/test_semi_auto.py`:通过。
- 授权 API 仍 `require_user`Fleet 仅只读字段。
## 残留风险(可接受)
- 授权后至开仓完成前改系统级非半自动参数(如杠杆)仍可能影响定仓;与全自动一致,非半自动独有。
- 有仓重启保留 trade_lock;无仓清 armed 后须重新授权。
+16
View File
@@ -5,6 +5,22 @@
---
## 2026-08-08 — 永期半自动(人工授权单笔)
### 变更
1. 系统设置「节奏」增加半自动开关;期期强制关闭半自动。
2. 首页「半自动 · 本单」:看法方向、波动点数、净利基数、选约门槛;授权/取消。
3. 引擎:未授权 `wait_human`;授权后选约 ITM/ATM 开仓;出场为到点且净利>0 或净利≥基数×k;平完清授权停机。
4. 中控模式列/详情透出半自动状态与目标。
5. 文档:`docs/半自动说明.md`;审计见 `docs/审计说明-2026-08-08-半自动.md`
### 审计
两轮:Bugbot + Security Review(见审计说明)。
---
## 2026-08-07 — 期期对冲互斥模式
### 变更
+18
View File
@@ -464,6 +464,13 @@ LIVE 特殊态:`option_closed_perp_pending`(期权已在交易所卖掉、
| `oo_min_leverage` | 200 | 期期单腿最低杠杆 |
| `oo_reward_ratio` | 2 | 期期盈亏比(目标=预算×比) |
| `oo_budget_cushion` | 0.92 | 期期定仓预留比例 |
| `semi_auto_enabled` | false | 半自动总开关(永期) |
| `semi_armed` | false | 半自动本单是否已授权 |
| `semi_view_side` | long | 半自动看法 long/short |
| `semi_option_move_points` | 50 | 半自动顺向波动点数 |
| `semi_perp_exit_unit` | 5 | 半自动净利出场基数(×k) |
| `semi_min_option_hours` | 30 | 半自动选约最短剩余小时 |
| `semi_min_option_leverage` | 100 | 半自动选约最低杠杆 |
---
@@ -479,10 +486,21 @@ LIVE 特殊态:`option_closed_perp_pending`(期权已在交易所卖掉、
---
## 9.2 半自动(永期)
详见 [半自动说明](./半自动说明.md)。摘要:
- 系统设置开启后,首页「半自动 · 本单」定方向/点数/净利基数并授权。
- 机器盯选约(ITM/ATM)→ 开 → 平;平完 `wait_human`,不连开。
- 出场:顺向到点且组合净利>0,或净利≥基数×k;先期权后永续。
---
## 10. 修订记录
| 日期 | 说明 |
|------|------|
| 2026-08-08 | 半自动:人工授权单笔;点数/净利出场;中控展示 |
| 2026-08-07 | 期期对冲互斥模式;振幅高低选约;盈亏比出场;SIM/LIVE 双通道 |
| 2026-08-02 | §3/§4 展开开平仓逐步逻辑;新增 §5 实盘状态机与异常处理;残留买一 IOC 回收 |
| 2026-07-24 | 固定方向:永续多→Put / 空→Call,仅实值或平值 |