Files
eth_hedge_sim/docs/更新说明.md
T
2026-07-27 14:30:43 +08:00

181 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 比特骆驼自动化对冲系统 — 更新说明
> 每次发版 / 合并重要改动后,在本文档顶部追加一条(日期新→旧)。
> 关联审计结论写在同条「审计」小节。
---
## 2026-07-27 — 安卓竖屏:全屏后系统锁定
### 变更
1. 说明:安卓 **Chrome 普通标签页** 不允许网页直接锁方向,必须先全屏再 `orientation.lock`(你以前能锁的,多半是 App/WebView/已装桌面,或点过全屏)。
2. 安卓首次点击 / 「点击锁定竖屏」:进入全屏并系统锁竖屏。
3. 已「添加到主屏幕」的应用走 manifest `orientation: portrait`,一般无需全屏。
4. 补充 X5/UC 竖屏 meta;锁失败时仍强制竖屏布局。
---
## 2026-07-27 — 手机端真·竖屏(禁横屏布局)
### 变更
1. 去掉「请竖屏使用」遮罩:那只是提示,不是锁定。
2. **能锁系统方向时**(常见:安卓安装到主屏幕的 PWA)调用 `orientation.lock`
3. **锁不住时**(多数浏览器页 / iOS):设备横放也不进入横屏 UI,界面仍按竖屏坐标系渲染。
4. Manifest`orientation` 改为 `portrait-primary`
---
## 2026-07-27 — 手机端竖屏锁定
### 变更
1. **PWA**`manifest.webmanifest``orientation` 改为 `portrait`(安装到主屏幕后系统侧竖屏)。
2. **浏览器**:手机横屏时全屏提示「请竖屏使用」;支持时尝试 `screen.orientation.lock`
---
## 2026-07-27 — 手机端期权卡 / 交易记录排版
### 变更
1. **期权持仓卡**:合约名与到期倒计时改为上下排,避免长 `inst_id` 被挤成竖排字。
2. **交易记录**:列表项上下堆叠(组号/状态一行,净盈亏/平仓原因一行),明细成交行窄屏同样竖排。
---
## 2026-07-27 — 手机端监控布局
### 变更
1. **底部导航**:窄屏隐藏顶栏菜单,改用底栏「监控 / 记录 / 统计 / 设置」(含安全区)。
2. **监控首页卡**:一屏看状态(启动/暂停/已停)、盘口、阶段、净盈利 vs 目标、到期倒计时、最近错误。
3. **操作区**:启动 / 暂停 / 紧急全平触摸友好;紧急全平通栏;桌面布局不变。
---
## 2026-07-26 — 企业微信通知 + 暂停盯目标
### 变更
1. **企业微信**:独立模块 `backend/app/notify/wecom.py`;系统设置「运行模式」可配 Webhook / 开关 / 测试推送。
2. **推送事件**:开仓、平仓、策略启动、暂停、故障(同类 5 分钟去重)。Markdown + 标识 `OPEN/CLOSE/START/PAUSE/FAULT`
3. **标题盘口**:模拟盘 →「模拟盘」;实盘 →「实盘·OKX」或「实盘·币安」。
4. **暂停策略**:仍执行目标平仓 + 到期平仓,**不新开仓**(策略说明已同步)。
---
## 2026-07-26 — 一键部署环境检测 / 卸载删目录
### 变更
1. **一键部署 / 更新**:检测 Python3+venv、Node/npm、PM2**已有则跳过**,缺失才 apt/npm 安装。
2. **一键卸载**:备份 `.env` 与数据库后,**直接删除** `/opt/eth_hedge_sim`(并清理历史 `.removed` / `.old` 残留);不卸载系统级 Python/Node/PM2。
---
## 2026-07-26 — 自动备份 / 下载 / 上传恢复
### 变更
1. **自动备份**:默认开启,间隔 24h,保留 14 份;落盘目录优先 `/root/eth_hedge_backups`(可用 `BACKUP_DIR` 覆盖)。内容含 `hedge.db` + `.env`
2. **系统设置 → 备份恢复**:立即备份、服务器列表下载、上传 zip 恢复(确认串 `RESTORE`)。
3. **新服务器迁移**:新机部署后上传旧机备份即可覆盖库与环境变量;恢复后进程退出由 PM2 拉起。有持仓时禁止恢复。
### 测试
- `pytest`:含 `test_backup` 等全量
---
## 2026-07-26 — LIVE 达标含估平仓费;手动/紧急全平进休息
### 变更
1. **LIVE 达标口径**:盯盘净利继续扣预估平仓手续费(与策略说明 / SIM 一致);实盘索引改为「含估平仓费」。
2. **组间休息**:手动全平成功后调用 `enter_rest_after_close()`;紧急全平成功路径同样进入休息(与自动全平共用)。
### 测试
- `pytest` 全量
---
## 2026-07-26 — LIVE 对账 / 手动开仓 UI / Token 自动换发
### 变更
1. **开仓幂等与对账**`opening` 占槽;LIVE 开仓前核对交易所永续(双侧);启动写 mismatch 日志。
2. **平仓张数**:OKX/币安平永续优先读交易所持仓,失败才回退本地账本。
3. **杠杆**LIVE 开永续前 `set_leverage`(失败仅告警)。
4. **自动运行禁手动开仓**`running=1``/api/sim/open-group` 返回 409;计划页按钮禁用。
5. **手动开仓显示**:策略设置「节奏」→「显示手动开仓」,**默认不显示**;关闭时 API 亦拒绝手动开/手动全平。紧急全平始终可用且为**红色**。
6. **启动态**:策略运行中主按钮文案为「启动中」,绿色样式。
7. **Token 自动换发**HMAC Bearer(非 Flask)。新增 `POST /api/auth/refresh`;前端登录后定时/切回前台/临近过期静默换发。默认口令未改。
### 审计(本包改后)
| 项 | 状态 |
|----|------|
| 交易所↔本地对账 / 开仓幂等 | **已修** |
| 平仓张数读交易所 | **已修** |
| set_leverage | **已修**(失败告警) |
| 自动运行仍可手动开仓 | **已修**API + UI |
| 手动开/全平默认露出 | **已修**(默认隐藏 + 设置开关) |
| 紧急全平样式 / 启动中文案 | **已修** |
| Token 长期不轮换 | **已修**refresh + 前端自动换发) |
| 对账只查单侧漏 short | **已修**flat 时 long+short |
| 放弃期权残留 / 模式切换仅本地 | **未做**(非本包;紧急全平/人工核对) |
### 测试
- `pytest`52 passed
---
## 2026-07-26 — 审计修复包(安全 / 下单 / 平仓)
### 变更
1. **LIVE 永续合约号**:开平仓统一用 `load_runtime_settings()` / 组内 `perp_inst_id`,修复 UI 切币安后仍用 env `ETH-USDT-SWAP` 的问题。
2. **到期平仓**:期权先走交易所真实平仓(失败且仓位已空才本地结算),并在永续失败前写入 `option_closed_perp_pending`
3. **成交完整性**:OKX/币安仅接受完全成交;账本数量按交易所 `accFillSz`/`executedQty` 回写。
4. **`ctVal`**:查不到合约面值时直接失败,禁止静默默认 `0.01`
5. **放弃期权路径**:优先交易所卖期权;仅深虚且卖不出时才残留归档。
6. **LIVE 重启**:启动时若为 LIVE,自动暂停策略,须人工再点启动。
7. **安全**:登录限流;切 LIVE 须服务端校验确认串 `LIVE`;生产关闭 `/docs`;改密后抬升 token 版本作废旧票;`.env` 写入后尽量 `chmod 600`CORS 改为同源优先。
8. **出场**:LIVE 净利加入保守平仓手续费缓冲,减少「刚达标但扣费后不够」的提前出场。
### 审计(本包改后复审)
| 项 | 状态 |
|----|------|
| 永续符号 env/DB 不一致 | **已修**`symbols.resolve_perp_inst_id` + 开平仓全路径) |
| 到期只本地结算期权 | **已修**(先交易所卖;失败才本地结算) |
| 到期永续失败无 pending | **已修**(统一 `_mark_option_closed_perp_pending` |
| partially_filled 当完成 | **已修**OKX 仅 `filled`;币安仅 `FILLED` |
| 放弃路径不卖期权 | **已缓解**(先 `close_group` 双腿;失败且深虚才残留) |
| 开仓崩溃双开 | **部分**LIVE 启动强制 `running=0`;仍缺交易所对账 |
| ctVal 静默默认 | **已修**(查不到直接报错) |
| LIVE 出场不计平仓费 | **已修**(保守 `est_close_fees` |
| 登录无限流 / LIVE 可 API 绕过确认 | **已修**(限流 + `confirm_live_phrase=LIVE` |
| `/docs` 公开 / CORS `*` / mask 泄露后缀 | **已修** |
| 改密后旧 token | **已修**`AUTH_TOKEN_VERSION` |
| 默认口令 / 公网 TLS | **未改默认口令**(部署须改 `.env`);TLS 仍靠反代 |
| 杠杆 set_leverage | **未做** |
| 平仓张数读交易所持仓 | **未做** |
### 残留风险(下次优先)
1. 启动时交易所↔本地仓位对账与开仓幂等键
2. 平仓前查询交易所实际持仓张数
3. 开仓前 `set_leverage`
4. 可选:拒绝默认 `AUTH_*` 启动(硬开关)
### 测试
- `pytest`46 passed(含 `test_symbols`、脱敏用例更新)
---