User edition: prune docs, license gate, obfuscate core lib.

Keep deploy/basic docs only; integrate sq.bz121.com license client; encrypt strategy/trade/key_monitor/options/hedge_plan for release.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-17 16:30:58 +08:00
parent 53863559f4
commit 16ef0f31e3
154 changed files with 1998 additions and 27914 deletions
-130
View File
@@ -1,130 +0,0 @@
# 账户冷静期 / 日冻结风控
三所实例(币安 / OKX / Gate / Gate)共用 `account_risk_lib.py`.
**仅用户主动平仓**计入风控;交易所止盈/止损,空仓同步,改保本/改委托等**不触发**冷静期.
## 状态展示
实例页顶,中控监控卡片账户名旁显示风控徽章:
| 状态 | 含义 | 倒计时 |
|------|------|--------|
| 正常 | 可新开仓 | 无 |
| 1h冻结 | 冷静期中(通常为复盘后缩短的 1 小时) | 剩余时间,如 `1h冻结 · 52m 08s` |
| 4h冻结 | 冷静期中(默认 4 小时) | 剩余时间,如 `4h冻结 · 3h 12m` |
| 日冻结 | 当日禁止一切新开仓 | 至下一 **交易日切点**(`TRADING_DAY_RESET_HOUR`) |
- 倒计时每秒刷新;到期后徽章自动恢复为 **正常**(下次轮询/API 刷新会再次对齐服务端状态).
- 鼠标悬停徽章可见完整说明(含解除时刻,如有).
## 什么算「手动平仓」(计入风控)
以下操作通过 `close_source` 登记为 **用户主动平仓**:
| 来源标识 | 操作 |
|----------|------|
| `user_instance` | 实例页删单/手动平仓(`del_order`) |
| `user_hub` | 中控「平仓」「全平」「紧急全平」 |
| `user_trend_stop` | 趋势计划 **「结束计划」**(手动结束) |
**不算**手动平仓(不触发风控):
- 趋势 **「保本移交下单监控」**
- 中控/实例修改委托,挂止盈止损,移动保本
- 交易所止盈/止损/条件单成交
- 后台 `reconcile_external_closes` 空仓同步(即使记账为「外部平仓」)
- 监控轮询自动止盈/止损/保本
## 触发规则
| 事件 | 行为 |
|------|------|
| 第 1 次用户主动平仓 | 默认 **4h** 冷静期 |
| 第 2 次用户主动平仓(同一交易日) | **日冻结** |
| 复盘勾选任意情绪标签 | **日冻结** |
| 复盘:离场=手动平仓 且说明非空 | 将当前冷静期降为 **1h**(须处于 4h 档冷静期中) |
情绪标签:怕踏空,报复开仓,盈利飘了,拿不住单,扛单,重仓违规.
### 复盘缩短为 1h
任选一种方式,并填写说明:
| 方式 | 必填 |
|------|------|
| **复盘表单**提交 | 离场触发 = **手动平仓**;**离场补充** 非空(不是下方「备注」) |
| **核对修改**保存 | 结果 = **手动平仓**;**备注** 非空 |
说明:
- 中控全平 / 实例手动平仓后,只要在 4h 窗口内完成上述操作即可降为 1h.
- 复盘保存后会同步更新 `last_close_at_ms`,倒计时以 **最后一次手动平仓 + 当前档位数** 为准,不会继续读库内旧 4h 结束时间.
- 1h 窗口已结束后,即使库里残留旧 `cooloff_until_ms`,状态也会恢复 **正常**.
- 若超过「平仓 + 1h」才复盘,则从 **保存复盘时刻** 起再计 1h(不延长原 4h).
- **止盈 / 保本止盈 / 止损** 等自动平仓不触发风控,也不会刷新冷静期.
- 代码更新后需 **重启对应实例** 并硬刷新页面.
### 倒计时与标签
- 结束时刻 = `last_close_at_ms + cooloff_hours`(`APP_TIMEZONE` 默认北京时间)
- 1h / 4h 标签按实际剩余时长判断,与倒计时一致
- 切交易日后,若冷静期已过期,自动清库内残留字段
## 环境变量
```env
RISK_CONTROL_ENABLED=true
RISK_COOLING_HOURS_MANUAL=4
RISK_COOLING_HOURS_MANUAL_JOURNAL=1
RISK_MANUAL_CLOSE_DAILY_LIMIT=2
RISK_MOOD_ISSUES_DAILY_FREEZE=true
TRADING_DAY_RESET_HOUR=8
APP_TIMEZONE=Asia/Shanghai
```
`RISK_COOLING_HOURS_EXTERNAL` 已废弃(外部平仓不再触发风控).
## API 与 `risk_status` 字段
| 接口 | 说明 |
|------|------|
| `GET /api/account_snapshot` | 实例页轮询,含 `risk_status` |
| `GET /api/account_risk_status` | hub_bridge 专用 |
| `GET /api/hub/monitor` | 中控监控板,每账户含 `risk_status` |
| `POST /api/hub/account-risk/user-close` | 中控登记用户平仓,`body: { source, count }` |
`risk_status` 主要字段:
| 字段 | 说明 |
|------|------|
| `status` | `normal` / `freeze_1h` / `freeze_4h` / `freeze_daily` / `freeze_position` |
| `status_label` | 中文标签 |
| `can_trade` | 是否允许新开仓(仅风控维度) |
| `reason` | 悬停提示文案 |
| `active_count` / `max_active_positions` | 当前活跃持仓与 `.env``MAX_ACTIVE_POSITIONS` |
| `cooloff_until_ms` | 1h/4h 冷静期结束时间戳(毫秒) |
| `freeze_until_ms` | 倒计时结束时间戳(日冻结为下一交易日切点) |
| `freeze_remaining_sec` | 服务端计算的剩余秒数(供调试) |
**仓位上限冻结**:当 **计入上限的** 活跃持仓数(不含趋势回调)≥ 实例 `.env``MAX_ACTIVE_POSITIONS`(默认 1)且账户无时间类冻结时,徽章显示 **仓位上限冻结**;此时 **新开仓** 被禁止,但 **顺势加仓**(在已有同向监控持仓上加仓)仍可用.仅存在趋势回调持仓时不触发该冻结.时间冻结(1h/4h/日)优先展示.
`risk_status.can_roll`:仓位上限冻结时为 `true`,表示顺势加仓不受该冻结限制.
## 前端倒计时
- 共用脚本:`static/account_risk_badge.js?v=4`
- 样式:`static/account_risk_badge.css`
- 展示格式:`4h冻结 · 3h 12m`;日冻结为距下一交易日切点剩余时间
- 倒计时优先用服务端 `freeze_remaining_sec` 推算结束时刻,避免绝对时间戳与时区/脏数据偏差
- 服务端在冷静期**已结束**或锚点无效时**自动清库**,避免重启后误读旧 `account_risk_state` 仍显示冻结
- 无效的未来 `last_close_at_ms` **不会**被当作「现在」重启计时
- 若当日手动平仓**已复盘**(journal 有说明)且 1h 窗口已过,即使 risk 表被误写也会强制恢复 **正常**
- 勿与交易记录列表中的历史平仓时间混淆:风控只看 `account_risk_state` 表内 **最后一次用户主动平仓** 及其复盘结果
## 相关代码
- `account_risk_lib.py` — 状态机,`enrich_risk_status_countdown`,`apply_position_limit_risk`,`on_user_initiated_close`
- `hub_bridge.py``/api/hub/account-risk/user-close`
- `manual_trading_hub/hub.py` — 中控平仓成功后调用 user-close
- `strategy_trend_register.py``stop_trend_pullback` 结束计划时登记风控
- `tests/test_account_risk_lib.py`
-45
View File
@@ -1,45 +0,0 @@
# 每日自动划转(三所统一)
## 行为
`.env` 开启 `AUTO_TRANSFER_ENABLED=true` 后,监控轮询在**北京时间 `AUTO_TRANSFER_BJ_HOUR` 整点所在小时**内(默认 8:00–8:59)执行一次(按 **UTC 自然日** 去重):
| 交易账户 (`AUTO_TRANSFER_TO`,默认 swap) | 动作 |
|------------------------------------------|------|
| 余额 **低于** `AUTO_TRANSFER_AMOUNT` | 从 `AUTO_TRANSFER_FROM`(默认 funding)划入差额 |
| 余额 **高于** `AUTO_TRANSFER_AMOUNT` | 将多余划回 `AUTO_TRANSFER_FROM` |
| 与目标相差 &lt; 0.01U | 跳过,不写划转 |
| 存在 **active** 持仓(`order_monitors`,或 Gate回调已开仓计划) | **不划转**,写账簿 `skipped`,并**企业微信**说明「持仓中,本次资金无划转」 |
## 配置示例(目标 50U)
```env
AUTO_TRANSFER_ENABLED=true
AUTO_TRANSFER_AMOUNT=50
AUTO_TRANSFER_FROM=funding
AUTO_TRANSFER_TO=swap
AUTO_TRANSFER_BJ_HOUR=8
```
`AUTO_TRANSFER_AMOUNT``DAILY_START_CAPITAL`(每日开仓基数)**独立**.
API Key 须具备万向划转权限(与手动划转相同).
## 用脚本更新三所 `.env`
详见 **[env-sync-scripts.md](./env-sync-scripts.md)**.常用命令:
```bash
git pull
# 仅补全划转相关项
python scripts/sync_four_exchange_transfer_env.py
# 目标 50U 并开启自动划转
python scripts/sync_four_exchange_transfer_env.py --set-amount 50 --enable-auto-transfer
# 计仓 + 划转一并补全
python scripts/sync_four_exchange_env.py --set-transfer-amount 50 --enable-auto-transfer
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
```
-81
View File
@@ -1,81 +0,0 @@
# 单日开仓次数限制(三所统一)
各交易实例(Binance / OKX / Gate)在 `.env` 中独立配置,互不影响.
## 交易日口径
-**北京时间** `TRADING_DAY_RESET_HOUR`(默认 **8:00**)切分交易日,与统计,顶栏「交易日」一致.
- **次日恢复**:过了切日时刻后 `session_date` 变为新日期,计数自动归零,无需清库.
## 计数口径
每成功新建一条 `order_monitors` 记录计 **1 次**,包括:
- 人工「实盘下单」
- 关键位自动开仓
- 其他写入 `order_monitors` 的成功开仓
平仓后再开仍算新的一单.当日总次数到硬上限后 **当天不再允许新开**(即使已空仓).
## 环境变量
在「交易执行 / 人工风控」段配置:
```env
# 【单日开仓 AI 提醒】本交易日开仓次数达到该值时,企业微信推送 AI 克制提醒(不拦单)
DAILY_OPEN_ALERT_THRESHOLD=5
# 【单日开仓硬上限】本交易日开仓次数 >= 该值后,禁止一切新开仓直至下一交易日;0=不启用
DAILY_OPEN_HARD_LIMIT=0
```
### 配置示例
```env
# 保守户:3 次提醒,5 次封死
DAILY_OPEN_ALERT_THRESHOLD=3
DAILY_OPEN_HARD_LIMIT=5
# 仅提醒,不封(与旧版行为接近)
DAILY_OPEN_ALERT_THRESHOLD=5
DAILY_OPEN_HARD_LIMIT=0
# 严格户:到 3 次即封
DAILY_OPEN_ALERT_THRESHOLD=2
DAILY_OPEN_HARD_LIMIT=3
```
建议 `DAILY_OPEN_ALERT_THRESHOLD <= DAILY_OPEN_HARD_LIMIT`(硬上限为 0 时除外).
## 程序行为
| 次数 | 行为 |
|------|------|
| 未达提醒阈值 | 正常开仓 |
| 达到 `DAILY_OPEN_ALERT_THRESHOLD` | 成功开仓后 AI 企业微信提醒 |
| 达到 `DAILY_OPEN_HARD_LIMIT`(>0) | `precheck_risk` 拒绝人工/关键位开仓;顶栏 `can_trade=false` |
硬限制与以下规则 **同时生效**(取交集):
- `TRADING_DAY_RESET_OPEN_GUARD_ENABLED`:切日前禁止新开
- `MAX_ACTIVE_POSITIONS`:同时持仓上限
- Gate:`precheck_trend_pullback_start` 同样校验单日硬上限
## 页面与接口
- 顶栏 / `api/account_snapshot` 返回 `opens_today`,`daily_open_hard_limit`,`daily_open_alert_threshold`.
- 达硬上限时提示:`本交易日开仓 N/M 已达上限,次日 8:00 后恢复`(`M` 为配置的硬上限).
## 部署
修改各实例 `.env` 后重启对应 pm2 进程,例如:
```bash
pm2 restart crypto_binance crypto_okx crypto_gate
```
## 实现位置
- 共享逻辑:`daily_open_limit_lib.py`
- 三所 `app.py`:`precheck_risk`,`can_trade`,`api/account_snapshot`,开仓成功后的 AI 提醒文案
- 单元测试:`tests/test_daily_open_limit_lib.py`
-135
View File
@@ -1,135 +0,0 @@
# 内照明心与永久 K 线
## 概述
「内照明心」页(`/archive`)用于 **复盘语录 + 交易记录回顾 + 按需 K 线**.左侧维护每日复盘语录(最多 100 条);右侧按日期区间列出开仓记录,展示区间统计,并可展开 K 线图表对照单笔交易.
与行情区 `hub_kline.db`(15 天滚动缓存)**完全独立**:档案库只增不删,从建档起永久保留.
## 页面布局
| 区域 | 说明 |
|------|------|
| **复盘语录** | 左栏;按日期添加/编辑/删除,一日一条 |
| **日期与筛选** | 顶栏:本日 / 本周 / 本月 / 自选区间;盈利单,亏损单,犯病,交易所,搜索 |
| **区间统计** | 统计栏随日期选择自动更新(见下) |
| **K 线图表** | 默认折叠;点「图表」或展开后按需加载 |
| **交易记录** | 默认展开;犯病行 **红色字体**(无红底);可编辑标签与备注 |
## 日期区间
交易日按北京时间 **8:00** 切日(`TRADING_DAY_RESET_HOUR`).
| 模式 | 范围 |
|------|------|
| **本日** | 可选单个交易日(默认当前交易日) |
| **本周** | 当周周一至当前交易日 |
| **本月** | 当月 1 日至当前交易日 |
| **区间** | 自选 `date_from``date_to`(含首尾交易日) |
## 区间统计(统计栏)
基于当前 **列表筛选结果**(含盈利/亏损/犯病勾选,合约搜索;交易所下拉仍限定数据源):
| 指标 | 说明 |
|------|------|
| 总开仓次数 | 区间内开仓笔数 |
| 盈利单 / 亏损单 | 盈亏 &gt; 0 / &lt; 0 的笔数(持平不计) |
| 平均盈利 / 平均亏损 | 盈利单,亏损单各自的均值(U) |
| 最大盈利 / 最大亏损 | 单笔最大盈利,最大亏损(U) |
| 犯病次数 / 占比 | `behavior_tag = sick` 的笔数及占开仓比例 |
| 盈亏 | 区间内全部已平仓盈亏合计 |
| 剔除犯病盈亏 | 排除犯病单后的盈亏合计 |
| 各交易所 | 每所同上分项 |
在搜索框输入币种(如 `BTC`)后,统计栏与下方列表同步按该条件收窄.
## 数据约定
| 项 | 约定 |
|----|------|
| 交易来源 | 三所 `trade_records` + 未落库的 `strategy_trade_snapshots`,经 `/api/hub/trades/archive` 拉取 |
| 犯病标签 | 中控 `trade_overlay.behavior_tag = sick` |
| K 线真源 | 仅 **5m** 写入 `hub_symbol_archive.db` |
| 建档种子 | 该币 **最早开仓** 向前 **30 天** 5m |
| 增量同步 | 默认每 **4 小时** 补新 5m 至当前 |
| 展示周期 | Tab:**5m / 15m / 1h / 4h**,默认 **15m** |
| 视窗模式 | **持仓过程**(锚平仓,默认)/ **进场决策**(锚开仓) |
| 时间跳转 | 输入 `YYYY-MM-DD HH:MM` 后点「跳转」 |
## 存储
- 默认路径:`manual_trading_hub/data/hub_symbol_archive.db`
- 环境变量:`HUB_ARCHIVE_DB_PATH`
- 表:
- `archive_meta` — 建档元数据
- `archive_bars_5m` — 永久 5m K 线
- `archive_trade_cache` — 从实例同步的交易快照
- `trade_overlay` — 犯病标签与备注(仅中控)
- `archive_review_quotes` — 复盘语录
## API(中控 FastAPI)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/archive/meta` | 周期,交易所,同步间隔等 |
| GET | `/api/archive/daily-trades` | 区间交易列表与统计(见 query) |
| GET | `/api/archive/quotes` | 复盘语录列表 |
| POST | `/api/archive/quotes` | 新增语录 |
| PATCH | `/api/archive/quotes/{id}` | 更新语录 |
| DELETE | `/api/archive/quotes/{id}` | 删除语录 |
| GET | `/api/archive/ohlcv` | K 线视窗(`timeframe` / `mode` / `anchor_ms` / `at`) |
| PATCH | `/api/archive/trade/{exchange_key}/{trade_id}` | 更新标签/备注 |
| POST | `/api/archive/sync` | 立即同步三所交易 + K 线 |
`GET /api/archive/daily-trades` 主要 query:
| 参数 | 说明 |
|------|------|
| `period` | `today` / `week` / `month` / `range` |
| `trading_day` | 本日模式下的交易日 `YYYY-MM-DD` |
| `date_from` / `date_to` | 区间模式起止日 |
| `exchange_key` | 可选,按交易所筛选 |
| `filter_profit` / `filter_loss` / `filter_sick` | 过滤列表与统计 |
| `search` | 合约 / 交易所 / 备注搜索(同步过滤列表与统计) |
返回 `stats``open_count`,`win_count`,`loss_count`,`win_rate`,`avg_win`,`avg_loss`,`profit_loss_ratio`,`max_win`,`max_loss`,`sick_count`,`sick_pct`,`pnl_total`,`pnl_ex_sick`,`by_exchange`.
实例侧:
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/hub/trades/archive` | 近 N 天已平仓(`days` / `limit`) |
## 后台任务
Hub 启动后在 lifespan 中运行 `hub-archive-sync`:
1. 对各启用交易所调用 `/api/hub/trades/archive`
2. 写入 `archive_trade_cache`
3. 未建档币种:拉 30 天 5m 种子
4. 已建档币种:增量补 5m
间隔:`HUB_ARCHIVE_SYNC_INTERVAL_SEC`(默认 14400).
## 代码位置
- `hub_symbol_archive_lib.py` — 库表,区间统计,种子,增量,聚合
- `hub_trades_lib.py``fetch_trades_for_archive`
- `hub_bridge.py` — 实例 `/api/hub/trades/archive`
- `manual_trading_hub/hub.py` — 路由与后台同步
- `manual_trading_hub/static/archive.js` — 内照明心前端
## 与行情区的区别
| | 行情区 | 内照明心 |
|--|--------|----------|
| DB | `hub_kline.db` | `hub_symbol_archive.db` |
| 保留 | 15 天滚动删除 | 建档起永久 |
| 周期 | 多周期直存/拉取 | 仅存 5m,高周期聚合 |
| 用途 | 实时看盘 | 复盘语录与交易回顾 |
## 相关文档
- [中控平仓与交易记录](trend-hub-close-and-trade-records.md)
- [中控使用说明](../manual_trading_hub/使用说明.md)
-147
View File
@@ -1,147 +0,0 @@
# lib/ 共用模块结构
三所实例与中控共用的 Python 库,模板与静态资源统一放在仓库根目录的 **`lib/`** 下.部署单元(`crypto_monitor_*`,`manual_trading_hub`)仍保持独立目录与 PM2 配置不变.
**重构前快照 Git 标签**:`pre-lib-modularization`(可用 `git checkout pre-lib-modularization` 查看旧布局).
**移除 gate_bot 前快照 Git 标签**:`pre-remove-gate-bot`.
---
## 顶层目录
```
crypto_monitor/
├── crypto_monitor_binance/ # 三所:各自 app + .env + PM2
├── crypto_monitor_gate/
├── crypto_monitor_okx/
├── manual_trading_hub/ # 中控 + 子代理 agent
├── lib/ # 共用模块(本说明)
│ ├── strategy/
│ ├── key_monitor/
│ ├── trade/
│ ├── hub/
│ ├── ai/
│ ├── instance/
│ ├── exchange/
│ ├── common/
│ └── paths.py
├── brand/ # 各所共用图标
├── docs/
├── deploy/
├── scripts/
├── tests/
├── requirements.txt
└── README.md
```
---
## lib/ 子包说明
| 子包 | 职责 | 主要模块 |
|------|------|----------|
| **`lib/strategy/`** | 策略交易(顺势加仓,趋势回调,快照与记录) | `strategy_register.py`,`strategy_trend_register.py`,`strategy_db.py`,`strategy_roll_*`,`strategy_trend_*` |
| **`lib/strategy/templates/`** | 策略页 Jinja 模板(原 `strategy_templates/`) | `strategy_trading_page.html`,`strategy_roll_panel.html` 等 |
| **`lib/key_monitor/`** | 关键位监控,斐波,假突破,止盈止损方案 | `key_monitor_lib.py`,`fib_key_monitor_lib.py`,`key_sl_tp_lib.py` 等 |
| **`lib/trade/`** | 下单监控展示,计仓,账户风控,手动 SL/TP | `order_monitor_display_lib.py`,`position_sizing_lib.py`,`account_risk_lib.py` 等 |
| **`lib/hub/`** | 中控 API,K 线,归档,计仓器,SSO/Bridge | `hub_bridge.py`,`hub_kline_store.py`,`hub_trades_lib.py` 等 |
| **`lib/ai/`** | AI 复盘与文本生成 | `ai_client.py`,`ai_review_lib.py` |
| **`lib/instance/`** | 中控 iframe 嵌入,导航,复盘图表 | `instance_embed_lib.py`,`focus_chart_lib.py`,`journal_chart_lib.py` |
| **`lib/instance/templates/`** | 嵌入页片段(原 `embed_templates/`) | `embed_page_fragment.html` |
| **`lib/exchange/`** | 特定交易所工具 | `gate_transfer_lib.py`,`okx_orders_lib.py` 等 |
| **`lib/common/`** | 跨功能小工具 | `form_submit_lib.py`,`wechat_notify_lib.py` 等 |
| **`lib/common/static/`** | 三所与中控共用的 JS/CSS(原根目录 `static/`) | `instance_theme.js`,`strategy_roll.js` 等 |
> **说明**:`hub_*` 命名表示「中控侧能力或行情聚合」,但部分模块(如 `hub_volume_rank_lib`,`hub_market_info_lib`)三所 `app.py` 也会调用,并非中控独占.
---
## 路径辅助函数
`lib/paths.py` 集中维护资源目录,避免硬编码:
```python
from lib.paths import strategy_templates_dir, embed_templates_dir, common_static_dir
strategy_templates_dir() # .../lib/strategy/templates
embed_templates_dir() # .../lib/instance/templates
common_static_dir() # .../lib/common/static
```
可选传入 `repo_root`(字符串或 `Path`),默认使用 `lib/` 的上级目录即仓库根.
---
## Python 导入约定
各部署目录在启动时将 **仓库根** 加入 `sys.path`(与重构前相同):
```python
_REPO_ROOT = os.path.dirname(BASE_DIR) # 或 Path(__file__).resolve().parent.parent
if _REPO_ROOT not in sys.path:
sys.path.insert(0, _REPO_ROOT)
```
之后使用 **`lib.<子包>.<模块>`** 形式导入,例如:
```python
from lib.strategy.strategy_db import init_strategy_tables
from lib.key_monitor.key_monitor_lib import check_key_monitors
from lib.hub.hub_bridge import install_on_app
from lib.ai.ai_client import ai_review
```
策略注册仍在各所 `app.py` 末尾:
```python
from lib.strategy.strategy_register import install_strategy_trading
from lib.strategy.strategy_trend_register import install_strategy_trend
install_strategy_trading(app, _REPO_ROOT, app_module=sys.modules[__name__])
install_strategy_trend(app, _REPO_ROOT, app_module=sys.modules[__name__])
```
---
## 静态资源与 URL
- 三所页面仍通过 **`/static/...`** 访问共用脚本;`hub_bridge.install_instance_theme_static``lib/common/static/` 提供部分根级静态路由.
- 各所目录下 **`static/`**(图标,上传图片等)仍为实例私有,未迁入 `lib/`.
- 中控 `manual_trading_hub/hub.py` 通过 `_REPO_ROOT / "lib" / "common" / "static"` 挂载与三所共用的 badge,复盘 JS 等.
---
## 测试
在仓库根执行(需将根目录置于 Python 路径,或从根目录运行):
```bash
cd /opt/crypto_monitor_user
python -m unittest discover -s tests -p "test_*.py"
```
测试文件内统一 `from lib.<子包>.<模块> import ...`.使用 `@patch` 时目标写完整模块路径,例如 `lib.hub.hub_calculator_lib._resolve_market`.
---
## 迁移脚本
一次性迁移由 `scripts/migrate_to_lib.py` 完成(移动文件 + 批量改写 import).**不要在已迁移后的仓库上重复执行**.
---
## 后续可选整理
- 三所 `app.py` 体量接近,可逐步抽取公共 `exchange_app` 基座(改动面大,单独规划).
- `manual_trading_hub/okx_orders_lib.py` 为 agent 本地副本,可与 `lib/exchange/okx_orders_lib.py` 合并去重.
- 可引入 `pyproject.toml` + `pip install -e .`,替代 `sys.path.insert`(长期维护更规范).
---
## 相关文档
- [README.md](../README.md) — 总览与部署
- [策略交易说明.md](../策略交易说明.md)
- [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md)
+38
View File
@@ -0,0 +1,38 @@
# 软件授权说明(用户版)
授权服务:[https://sq.bz121.com/](https://sq.bz121.com/)
## 激活流程
1. 部署并启动本系统(三所或中控任一页面)。
2. 浏览器打开 **`/license`**(未授权时会自动跳转)。
3. 复制页面上的 **设备 ID**
4. 联系微信 **dekun03** 购买套餐,获得激活码(新购 / 续费 / 换机)。
5.`/license` 粘贴激活码并兑换。
## 套餐(参考)
| 套餐 | 天数 |
|------|------|
| 月卡 | 30 |
| 季卡 | 90 |
| 年卡 | 365 |
续费:在原到期日基础上叠加天数。换机:旧设备立即失效,新设备需换机码。
## 环境变量
在仓库根目录创建 **`license.env`**(勿提交 Git),或写入各实例 `.env`
```env
LICENSE_API_URL=https://sq.bz121.com
LICENSE_CLIENT_KEY=与授权站 CLIENT_API_KEY 相同
# 可选:断网宽限小时数(默认 72
# LICENSE_OFFLINE_GRACE_HOURS=72
# 本地调试可临时关闭门禁(生产勿开)
# LICENSE_DISABLED=false
```
许可状态保存在仓库根目录 **`data/license_state.json`**(三所 + 中控共用)。
系统约每 **3 天** 向授权站校验一次;明确过期或换机后旧设备将无法使用。
-83
View File
@@ -1,83 +0,0 @@
# 宏观关键数据 · 风控前置
中控 **系统设置** 手动录入 FOMC / CPI / 就业数据发布时间,在 **监控区** 发布前后各 1 小时给出风险提示.
**不看公布结果,不解读数据**,仅作波动窗口前的行为提醒;**不拦截下单**(与账户冷静期/日冻结独立).
## 支持的数据类型
| 类型 ID | 显示名称 |
|---------|----------|
| `fomc` | FOMC 联邦基金利率 |
| `cpi` | 美国 CPI 通胀 |
| `employment` | 就业与劳工数据 |
每项在设置中 **名称下拉三选一**,**发布时间** 手动输入(北京时间,精确到分钟).FOMC 只录 **一条**(决议公布时刻即可).
## 风险窗口
- 默认:**发布时间 ±1 小时**
- 发布前 **30 分钟内**:文案加强为「即将发布」
- 窗口结束后横幅自动消失;设置列表中过期记录逐步不再展示
环境变量(可选):
```env
HUB_MACRO_WINDOW_BEFORE_SEC=3600
HUB_MACRO_WINDOW_AFTER_SEC=3600
HUB_MACRO_IMMINENT_BEFORE_SEC=1800
HUB_MACRO_LIST_FUTURE_DAYS=60
```
## 监控区提示文案
读取当前监控板:**任意交易所有持仓 = 有仓**,否则 = 无仓.
| 场景 | 提示要点 |
|------|----------|
| 无仓 · 窗口内 | 建议等待,避免新开仓 |
| 有仓 · 窗口内 | 注意仓位,勿加仓,检查止损/减仓 |
| 即将发布(30 分钟内) | 在上述基础上标注剩余分钟数 |
## 存储
- SQLite:`manual_trading_hub/data/hub_macro_calendar.db`
- 可覆盖:`HUB_MACRO_CALENDAR_DB_PATH`
`macro_events`:`event_type`, `event_at_ms`, `note`, `created_at_ms`, `updated_at_ms`
同类型 + 同一发布时间不可重复录入.
## API(均需中控登录)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/macro-calendar/meta` | 类型列表与窗口说明 |
| GET | `/api/macro-calendar/events` | 设置页列表 |
| GET | `/api/macro-calendar/active` | 当前处于窗口内的事件(监控横幅) |
| POST | `/api/macro-calendar/events` | 新增 |
| PATCH | `/api/macro-calendar/events/{id}` | 更新 |
| DELETE | `/api/macro-calendar/events/{id}` | 删除 |
请求体示例:
```json
{
"event_type": "cpi",
"event_at": "2026-06-18 20:30",
"note": "可选备注"
}
```
## 使用习惯
1. 每月在金十/日历查看 **FOMC,CPI,非农** 公布时间
2. 中控 **系统设置 → 宏观关键数据** 录入 13 条
3. 到点前后监控区顶栏出现 **宏观风控** 横幅;无操作则窗口结束后自动消失
## 与账户风控的关系
| 模块 | 时机 | 作用 |
|------|------|------|
| 宏观日历 | **事前** | 已知高波动窗口,提醒等待或管仓 |
| 账户冷静期/日冻结 | **事后** | 用户主动平仓后的惩罚性限制 |
宏观提醒 **不触发** 冷静期,不计入手动平仓次数.
-31
View File
@@ -1,31 +0,0 @@
# 实盘下单 · 预估盈亏比
## 功能
三所(Binance / OKX / Gate)**实盘下单监控**表单中,在「开仓」按钮前显示 **预估盈亏比**.
- **价格模式**:填完币种,方向,止损价,止盈价后,调用 `GET /api/order_defaults` 取标记价,按几何距离计算 RR.
- **百分比模式**:填完币种,方向,止损%,止盈% 后拉快照校验币种,再显示 RR(`止盈% / 止损%`).
- **固定盈亏比模式**:盈亏比由输入框直接指定;下方预览条显示预估风险/盈利/盈亏比(不再在表单行内显示预估止盈价).
- **以损定仓**(`POSITION_SIZING_MODE=risk`):预估风险 = 当前交易基数 × `risk%`.
- **全仓杠杆**(`full_margin`):预估风险 = 合约可用 × 缓冲比例 × 杠杆(BTC/ETH 与山寨按 `.env` 配置)× 止损距离比例,与开仓时 `calc_risk_amount_from_plan` 一致.
## 前端实现
- 共享脚本:`static/manual_order_rr_preview.js`
- 各所 `templates/index.html` 引入并在 `MANUAL_MIN_PLANNED_RR` 定义后执行:
```js
ManualOrderRrPreview.wire({ minRr: MANUAL_MIN_PLANNED_RR });
```
- 展示元素:`#order-rr-preview`(开仓按钮左侧)
- 颜色:≥ 最低要求为绿色,低于为红色,无效/取价失败为红色或灰色
## 与提交校验
提交时仍走原有 `calcClientRr` / `calcClientRrFromPct` 与 `rejectManualOrderRr`;预估仅用于下单前参考,不替代服务端风控.
## 校验记录
- `node --check static/manual_order_rr_preview.js`
- `tests/test_manual_order_rr_preview.py`:RR 公式与三所 `calc_rr_ratio` 口径一致
-73
View File
@@ -1,73 +0,0 @@
# 计仓模式(三所统一)
## 配置
在各实例 `.env` 中设置(**仅能通过 env 切换,修改后须重启进程**):
```env
# risk(默认)= 以损定仓
# full_margin = 全仓杠杆(合约可用保证金 × 比例)
POSITION_SIZING_MODE=risk
FULL_MARGIN_BUFFER_RATIO=0.98
# 关键位程序自动单(默认 false,详见各所 关键位自动下单说明.md)
KEY_AUTO_ORDER_ENABLED=false
```
切换为全仓杠杆前:**交易所须无持仓**(`MAX_ACTIVE_POSITIONS` 默认 1,全仓模式会强制单仓).
## 模式说明
| 模式 | 保证金计算 | 杠杆 | 允许入口 |
|------|------------|------|----------|
| `risk` | `RISK_PERCENT` × 交易资金,按止损距离反推 | 表单可选 / 同步交易所 | 实盘人工,关键位自动(须 `KEY_AUTO_ORDER_ENABLED=true`),趋势回调,顺势加仓 |
| `full_margin` | **合约账户可用 USDT × `FULL_MARGIN_BUFFER_RATIO`**(保留 2 位小数) | BTC/ETH **10x**,其它 **5x**(与 `BTC_LEVERAGE`/`ALT_LEVERAGE` 一致) | **实盘人工下单**,**关键位触价**(须 `KEY_AUTO_ORDER_ENABLED=true`);阻力/支撑仅提醒 |
全仓模式下:
- **`KEY_AUTO_ORDER_ENABLED=false`(默认)** 时,触价程序自动单也不执行.
- **`KEY_AUTO_ORDER_ENABLED=true`** 时,仅触价可程序自动开仓;箱体/斐波等仍禁止.
- 仍校验 **计划盈亏比**(实盘用 `MANUAL_MIN_PLANNED_RR`;触价开仓用 `KEY_AUTO_MIN_PLANNED_RR`).
- 下单张数由 `prepare_order_amount` + 交易所 `amount_to_precision` 决定.
- `order_monitors.initial_stop_loss` 仍记录**开仓时**止损快照;交易记录复盘以该快照为准.
- 已存在的 **箱体突破 / 收敛突破 / 斐波 / 假突破** 监控:进程启动时**自动撤销**并企业微信通知.
## 不允许(全仓模式)
- 关键位:箱体突破,收敛突破,斐波,假突破(添加时拒绝;已存在则启动时撤销).
- 趋势回调,顺势加仓(策略入口返回明确错误).
**允许(须 `KEY_AUTO_ORDER_ENABLED=true`):** 关键位 **回调触价开仓** / **突破触价开仓**(程序盯价,触达/穿越计划入场后市价成交,无交易所挂单;全仓下仅允许一条待触发).
## `KEY_AUTO_ORDER_ENABLED`(三所统一,默认 `false`)
| 计仓 | 开关 | 效果 |
|------|------|------|
| `risk` | `false` | 关闭全部关键位程序自动单(含触价);顺势加仓不受影响 |
| `risk` | `true` | 关键位全套自动(旧行为) |
| `full_margin` | `false` | 关闭触价自动 |
| `full_margin` | `true` | 仅触价自动 |
详见各实例目录 `关键位自动下单说明.md`.
## 用脚本更新三所 `.env`
详见 **[env-sync-scripts.md](./env-sync-scripts.md)**.常用命令:
```bash
git pull
# 仅补全计仓相关项(缺省 risk,缓冲 0.98)
python scripts/sync_four_exchange_position_sizing_env.py
# 无仓后切换全仓
python scripts/sync_four_exchange_position_sizing_env.py --set-mode full_margin
# 无仓后切回以损定仓
python scripts/sync_four_exchange_position_sizing_env.py --set-mode risk
# 计仓 + 划转一并补全
python scripts/sync_four_exchange_env.py
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate
```
-45
View File
@@ -1,45 +0,0 @@
# Chrome 桌面快捷方式图标说明
## 图标从哪来?
用 Chrome **「创建快捷方式」** 或 **「安装应用」** 时,桌面/开始菜单图标**不是**操作系统自带的,而是浏览器从**你打开的网站**读取的,优先级大致为:
1. `manifest.webmanifest` 里的 `icons`(192×192,512×512)
2. `link rel="apple-touch-icon"`(约 180×180)
3. `link rel="icon"` / `favicon.ico`
4. 若都没有 → 灰色地球或网页标题首字
本仓库已在 **中控****三所监控页** 配置品牌图标.PNG/ICO 由 **Pillow** 生成.
- **中控**:深色圆角底 + 青绿趋势线 + K 线,安装名「复盘系统中控」
- **三所**:各所用交易所标识色与字标(币安菱形 / OKX 方块 / Gate G),安装名分别为「Binance 交易系统」「OKX 交易系统」「Gate 交易系统」
## 文件位置
| 位置 | 访问路径 |
|------|----------|
| 源稿 | `brand/icon.svg`,`brand/icons/*.png`,`brand/icons/{binance,okx,gate}/` |
| Manifest | `brand/manifest.webmanifest`(中控),`brand/manifest.{binance,okx,gate}.webmanifest` |
| 中控 | `manual_trading_hub/static/icons/``/assets/icons/...` |
| 三所 | `crypto_monitor_*/static/icons/``/static/icons/...` |
## 重新生成 / 同步
```bash
python scripts/generate_brand_icons.py
python scripts/sync_brand_icons.py
git pull # 服务器部署后
pm2 restart …
```
## 快捷方式仍显示旧图标?
Chrome / Windows 会**缓存** favicon:
1. 浏览器打开站点,**Ctrl+F5** 强刷
2. 删除旧快捷方式,重新「创建快捷方式」
3. 必要时清除 Chrome 站点数据(该域名)后再创建
## 自定义图标
可替换 `brand/icon.svg` 后重新运行上面两条命令;或把设计好的 `icon-192.png`,`icon-512.png` 放入 `brand/icons/``sync_brand_icons.py`.
-34
View File
@@ -1,34 +0,0 @@
# 策略文档
各交易实例的人工下单策略,供 UI / 复盘对齐.
| 文档 | 实例 | 状态 |
|------|------|------|
| [binance-alt-trend-long.md](./binance-alt-trend-long.md) | 币安山寨·多头趋势 | v0.4 讨论稿 |
| [okx-trend-both.md](./okx-trend-both.md) | OKX·多空趋势 | v0.4 讨论稿 |
| [gate-intraday.md](./gate-intraday.md) | Gate·BTC 日内 | v0.2 |
## 约定
- **不写盈亏比(趋势户)**:币安/OKX 止盈/止损随行情人工设定,趋势 MD 不量化 RR.
- **日内例外**:Gate 日内 **最低 1:1** 才开仓,持仓目标可动态调整(见 [gate-intraday.md](./gate-intraday.md)).
- **界面(趋势户 · v0.4)**:两级 — **反转**(启动 A/B)| **顺势**(大分歧 A/B)| **波段**(小分歧);`lib/trade/entry_model_lib.py` 三所共用.
- **界面短标签(日内户)**:`假破` / `结构突破`.
- **多空共用三字**:方向由「做多/做空」表达,不复用为「大分歧A多」等.
- **自动联动**:大分歧 A/B → 趋势单;**小分歧 → 波段单**;平仓写入交易记录 `entry_reason`;复盘「填入」自动带入.
- **杠杆默认**:BTC/ETH **10x**,其它 **5x**;与开仓类型无关(env `BTC_LEVERAGE` / `ALT_LEVERAGE`).
- **日内 profile 独立**:env 启用 `TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启时,**不显示** 大分歧三项(Gate);开仓类型为 **假破 / 结构突破**(见 gate-intraday.md).
- **日内 0 点出场**:策略称「0 点平仓」;程序为 `FORCE_CLOSE_ENABLED` + `FORCE_CLOSE_BJ_HOUR=0`,交易记录 `result=强制清仓`(与表单 1h/2h/4h `time_close` 无关).
- **策略模块独立**:趋势回调,顺势加仓不走上述三项.
## 系统实现
- 库:`lib/trade/entry_model_lib.py`
- 趋势户表单:`lib/instance/templates/order_entry_model_fields.html`
- 日内判定:`is_intraday_trading_profile()`(白名单仅含 BTC/ETH)
- 0 点强平:`force_close_before_reset()`(三所 `app.py`);env `FORCE_CLOSE_ENABLED` / `FORCE_CLOSE_BJ_HOUR`
## 相关文档
- [计仓模式](../position-sizing-mode.md)
- [趋势回调策略](../trend-pullback-strategy.md)
-194
View File
@@ -1,194 +0,0 @@
# 币安山寨·多头趋势账户
> **状态**:v0.4(反转·启动 A/B 两级 UI 已实现;策略正文 + `entry_model_lib`)
---
## 1. 账户定位
| 项 | 说明 |
|----|------|
| 交易所 | 币安合约 |
| 方向 | **仅做多**(`TRADE_DIRECTION=long_only`) |
| 计仓 | `POSITION_SIZING_MODE=risk` |
| 关键位自动单 | `KEY_AUTO_ORDER_ENABLED=false` |
| UI profile | **趋势户**(非 BTC/ETH 白名单日内) |
---
## 2. 开仓类型(两级 UI · 三所共用)
### 2.1 趋势户:反转 / 顺势 / 波段
| 第一级 | 第二级 | code | 联动 |
|--------|--------|------|------|
| **反转** | 启动 A / 启动 B | `launch_a` / `launch_b` | 趋势单 |
| **顺势** | 大分歧 A / 大分歧 B | `big_div_a` / `big_div_b` | 趋势单 |
| **波段** | 小分歧 | `small_div` | 波段单 |
实现:`lib/trade/entry_model_lib.py` + `order_entry_model_fields.html` + `order_entry_model.js`(币安 / OKX / Gate 趋势户共用).
### 2.2 杠杆(与开仓类型无关)
| 币种 | 默认杠杆 |
|------|----------|
| BTC,ETH | **10x**(`BTC_LEVERAGE`) |
| 其它山寨 | **5x**(`ALT_LEVERAGE`) |
---
## 3. 反转·启动(做多,讨论定稿)
**性质**:反转 — 在**新主升确认之前**的作战;与大分歧(顺势)不是同一行情阶段.
**周期**:背离与箱体以 **4h** 为主;**日线与 4h 同处筑底阶段时,结构边界以日线为准**.作战后半段可用 **5m** 节奏(启动 A2).
### 3.0 流程总览
```text
MACD 背离(严格筛选)→ 标「参考高点」
第 1 次到高点附近 → 不做(V 形)
回落箱内(中间复杂形态不盯)
第 2 次到高点附近 → 开战
├─ 见小收敛 ──────────→ 启动 A(A1)
└─ 不见收敛 ──────────→ 启动 B(实体突破)
├─ 成 → 主升(后续才用顺势·大分歧 / 波段·小分歧)
└─ 败 → 止损(正常)
跌破箱高一半 → 暂弃,等再次到高点附近
仍在上半区 + 5m 不创新低 + N 字 → 启动 A(A2)
```
### 3.1 背离:何时进入候选池(MACD · 4h)
全部满足才承认「有过背离」:
| 规则 | 说明 |
|------|------|
| 级别 | **至少 4h** MACD 底背离 |
| 首次背离不做 | 第一段背离只观察,不交易 |
| 通道式下跌不做 | 顺滑通道下滑中的背离,不当反转依据 |
| 波段结构 | 有明显的波段高点,低点 |
| 分段下跌 | **三段及以上**明显下跌之后,才开始寻找背离 |
背离确认后:**标注最后一个显著高点为「参考高点」**(后文「高点附近」均相对此点).
> 横盘**时长不量化**;关键是顺序:**跌 → 背离 → 背离后的震荡**,而非下跌中继.
### 3.2 参考高点:两次摸高
| 次序 | 规则 |
|------|------|
| **第 1 次**到参考高点附近 | **不关注,不做**.假突破,未突破都算「到过附近」— 视为 **V 形反弹**风险区 |
| 回落箱内 | 箱内复杂形态**不是主战场**,不强行交易 |
| **第 2 次**到参考高点附近 | **开始关注**,进入作战区 |
### 3.3 启动 B(实体突破)
**条件**:第二次(及以后)靠近参考高点,且**未见**再次摸高前的小收敛.
| 项 | 说明 |
|----|------|
| 入场 | **实体突破**参考高点 / 箱体上沿(影线刺破不算) |
| 成功 | 走出主升 → 后续单型转为顺势·大分歧 / 波段·小分歧 |
| 失败 | 突破后未主升,回到箱内震荡 → **止损属正常** → 若满足 §3.4,下一笔用 **启动 A(A2)** |
### 3.4 启动 A(结构内 / 试仓,含 A1 与 A2)
**性质**:主升**确认前**在箱内找风险可控入场;**不是**小分歧.
#### A1 · 第二次摸高前的小收敛
- 在第 2 次到参考高点**之前**,出现**小的收敛结构** → 突破前企稳进场.
- 若**看不到**小收敛,不强行做 A1,改走 **启动 B**(§3.3).
#### A2 · 启动 B 失败后的 5m N 字(仍记启动 A)
在启动 B 止损后:
| 暂弃 | 可试启动 A2 |
|------|-------------|
| 回箱后继续跌,且**跌破箱体高度一半** | **未**跌破箱一半 |
| 暂不看,直至**再次**到参考高点附近 | 且 **5m 不创新低** |
| | 且 **突破 5m 高点** → 按 **5m N 字形突破** 试仓 |
- 5m 止损一般不大;此位置**允许多次试错**(突破路径约可错 2 次;5m 试仓约可错 3 次 — 同一参考高点周期内,具体计数实操自定).
- **5m N 字试仓不单列开仓类型**,复盘统一记 **启动 A**(可备注「A2 / 5m N」).
### 3.5 与大分歧,小分歧的边界
| | 反转·启动 | 顺势·大分歧 | 波段·小分歧 |
|---|-----------|-------------|-------------|
| 前端 | 跌 → 背离 → 箱 → 两次摸高 | 主升已确立 | 主升已确立 |
| V 形 | 第 1 次摸高不做 | — | — |
| 5m N 试仓 | **启动 A(A2)** | — | 不同于小分歧 |
| 第三次不做 | — | — | ✓ |
---
## 4. 顺势·大分歧(趋势单)
**前提**:**主升浪已确立**,上方仍有空间;前端是主升里的整理,**不要**求「跌 → 背离 → 箱 → 两次摸高」那条反转链.
### 4.1 大分歧 A
- 4h/日线大结构向上
- 5m/15m 收敛,**不创新低** 企稳进(不等突破)
### 4.2 大分歧 B
- 同上大级别多头结构
- **突破确认** 后入场(实体突破优先)
---
## 5. 波段·小分歧(波段单)
**前提**:主升**已走出**;反转链(启动 A/B)进行中**不做**小分歧.
- **前两次**可做,**第三次不做**
- 低吸为主,不追突破
- 入场:二次探底 → N 字突破;或 5m 三均线重新多头排列
---
## 6. 纪律
1. 不做空
2. 反转:首次背离不做;通道跌背离不做;第 1 次摸参考高点不做(V 形)
3. 顺势:第三次小分歧不做新单;小分歧不追突破
4. 止盈/止损/是否手平:**随行情**,本文档不量化 RR
---
## 7. 持仓与出场(定性)
| 单型 | 说明 |
|------|------|
| 启动 A/B | 赌新主升;B 失败可转 A2;未确立主升前不做小分歧 |
| 大分歧 | 可长持;途中两次小分歧后远目标未到,**可手平** |
| 小分歧 | 短拿,常手平 |
---
## 8. 系统字段
| 操作 | 字段 |
|------|------|
| 下单 | `order_monitors.entry_model`:`launch_a` / `launch_b` / `big_div_a` / `big_div_b` / `small_div` |
| 平仓 | `trade_records.entry_reason` = 界面标签 |
| 复盘 | 与开仓类型一致 + 策略项 +「其他」 |
---
## 修订记录
| 版本 | 日期 | 说明 |
|------|------|------|
| v0.4 | 2026-07-06 | 反转·启动 A/B 两级 UI 上线(共用 entry_model_lib) |
| v0.2 | 2026-07-06 | 定稿 UI 短标签(大分歧/小分歧);实现代码联动 |
| v0.1 | 2026-07-06 | 讨论稿 |
-68
View File
@@ -1,68 +0,0 @@
{
"exchange": "binance",
"title": "币安 · 开仓检查清单",
"version": "v0.4",
"groups": [
{
"title": "账户与方向",
"items": [
"本账户仅做多,不做空",
"计仓模式为以损定仓(risk),关键位自动单已关闭",
"已明确第一级:反转 / 顺势 / 波段(两级下拉已上线)"
]
},
{
"title": "反转 · 背离与箱体(启动 A/B 共同前置)",
"items": [
"4h MACD 底背离(非首次背离,非通道式下跌中的背离)",
"有明显波段高/低点,且三段及以上明显下跌后才认背离",
"背离后处于震荡箱体(时长不量化;非 V 形急跌急拉)",
"已标注参考高点(最后一个显著高点)",
"第 1 次到参考高点附近 → 不做;第 2 次到附近 → 才进入作战区"
]
},
{
"title": "反转 · 启动 B(实体突破)",
"items": [
"第 2 次到参考高点附近,且未见再次摸高前的小收敛",
"实体突破参考高点/箱体上沿(非仅影线)",
"突破失败回箱止损属正常;跌破箱高一半则暂弃直至再次到高点附近"
]
},
{
"title": "反转 · 启动 A(结构内,含 A1 / A2)",
"items": [
"性质:主升确认前;不是小分歧",
"A1:第 2 次摸高前出现小收敛 → 突破前企稳",
"A2:启动 B 止损后,未跌破箱高一半 + 5m 不创新低 + 5m N 字突破试仓",
"5m 试仓记为启动 A(不单列类型);小止损允许多次试错"
]
},
{
"title": "顺势 · 大分歧 A / B",
"items": [
"主升已确立,上方仍有空间(非跌后背离筑底阶段)",
"大分歧A:5m/15m 收敛且不创新低企稳",
"大分歧B:突破已确认,优先实体突破"
]
},
{
"title": "波段 · 小分歧",
"items": [
"主升已确立;反转链进行中不做小分歧",
"第三次小分歧 → 不做新单",
"不追突破;二次探底 N 字或 5m 三均线重新多头"
]
},
{
"title": "杠杆与出场",
"items": [
"杠杆:BTC/ETH 10x,其它山寨 5x(可选手改但须有理由)",
"止盈止损随行情人工设定,不在此清单量化 RR"
]
}
],
"footnotes": [
"v0.4:两级 UI 已实现;启动 A 含 A1 收敛与 A2(B 失败后 5m N 字)."
]
}
-38
View File
@@ -1,38 +0,0 @@
{
"exchange": "gate",
"title": "Gate · BTC 日内 · 开仓检查清单",
"version": "v0.2",
"groups": [
{
"title": "方向与均线过滤",
"items": [
"仅交易 BTC,同时仅 1 仓",
"15m 21/55/144 排列清晰(多或空),纠缠则不做",
"1H 方向与 15m 不冲突",
"21 均线关系满足:回踩支撑 / 站稳上方(多)或反弹承压 / 压在下方(空)"
]
},
{
"title": "开仓类型 A / B",
"items": [
"已选定:假破 或 结构突破(二选一)",
"假破:扫流动性后回到结构内,5m N 字 + 15m 顶/底分型齐全",
"结构突破:15m 收盘价站稳关键位,非仅刺破",
"止损带宽 0.4%1.5%,超出则不做",
"下单前空间至少 1:1,不足则不做"
]
},
{
"title": "一日节奏与笔数",
"items": [
"非周末;在早窗 / 晚窗计划时段内",
"今日笔数未达上限 3,连错未达 2 笔",
"宽幅震荡(S1)时降频或不做",
"0 点前须了结(系统强制清仓);本清单不含手动平仓"
]
}
],
"footnotes": [
"系统:FORCE_CLOSE_ENABLED 开启时,北京时间 0 点自动强制清仓(result=强制清仓)"
]
}
-72
View File
@@ -1,72 +0,0 @@
{
"exchange": "okx",
"title": "OKX · 开仓检查清单",
"version": "v0.4",
"groups": [
{
"title": "账户与方向",
"items": [
"已选定做多或做空,且与 4H/大级别结构方向一致",
"趋势户 profile(非 Gate 日内 BTC/ETH 白名单)",
"计仓模式为以损定仓(risk),关键位自动单已关闭",
"同一币种无未计划的对冲叠仓",
"已明确第一级:反转 / 顺势 / 波段(两级下拉已上线)"
]
},
{
"title": "反转 · 背离与箱体(启动 A/B 共同前置)",
"items": [
"做多:4h MACD 底背离;做空:4h MACD 顶背离",
"非首次背离;非通道式涨跌中的背离;明显波段高低点 + 三段及以上涨/跌后才认背离",
"背离后处于震荡箱体(时长不量化;非 V 形急拉急杀)",
"做多:已标参考高点;做空:已标参考低点",
"第 1 次到参考极值附近 → 不做;第 2 次到附近 → 才进入作战区"
]
},
{
"title": "反转 · 启动 B(实体突破)",
"items": [
"第 2 次到参考极值附近,且未见再次摸极值前的小收敛",
"做多:实体突破参考高点/箱顶;做空:实体跌破参考低点/箱底",
"突破失败回箱止损属正常",
"做多:跌破箱高一半暂弃;做空:涨破箱低一半暂弃;直至再次到极值附近"
]
},
{
"title": "反转 · 启动 A(结构内,含 A1 / A2)",
"items": [
"性质:主趋势确认前;不是小分歧",
"A1:第 2 次摸极值前出现小收敛 → 突破前企稳",
"A2 做多:B 止损后未跌破箱一半 + 5m 不创新低 + 5m N 字",
"A2 做空:B 止损后未涨破箱一半 + 5m 不创新高 + 5m 倒 N 字",
"5m 试仓记为启动 A(不单列);小止损允许多次试错"
]
},
{
"title": "顺势 · 大分歧 A / B",
"items": [
"主趋势已确立(非涨/跌后背离筑底/筑顶阶段)",
"做多大分歧A:5m/15m 收敛且不创新低;做空:不创新高",
"大分歧B:突破已确认,优先实体突破"
]
},
{
"title": "波段 · 小分歧",
"items": [
"主趋势已确立;反转链进行中不做小分歧",
"第三次小分歧 → 不做新单",
"做多:二次探底 N 字 / 5m 三均线多头;做空:二次探顶倒 N / 5m 空头"
]
},
{
"title": "杠杆与出场",
"items": [
"杠杆:BTC/ETH 10x,其它山寨 5x(可选手改但须有理由)",
"止盈止损随行情人工设定,不在此清单量化 RR"
]
}
],
"footnotes": [
"v0.4:两级 UI 反转/顺势/波段;做多细则见 binance-alt-trend-long.md §3."
]
}
-277
View File
@@ -1,277 +0,0 @@
# Gate·BTC 日内账户
> **状态**:v0.2(策略定稿;**0 点强平已实现**;日内 UI 隐藏平仓/委托/移动保本 **待实现**)
---
## 1. 账户定位
| 项 | 说明 |
|----|------|
| 交易所 | Gate 合约 |
| 品种 | **仅 BTC** |
| 方向 | **多空都做**(由过滤条件决定,非手选方向) |
| 计仓 | `POSITION_SIZING_MODE=full_margin`(全仓杠杆) |
| UI profile | **日内户**(`TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启;本策略只交易 BTC) |
| 与趋势户关系 | **不使用** 大分歧 A/B/小分歧;**不使用**「趋势单 / 波段单」手选 |
### 资金与杠杆(执行约定)
| 项 | 说明 |
|----|------|
| 账户规模 | 约 300U(测试阶段) |
| 日交易基数 | **50U**(早 8:00 重置为 50U,不延续前日阶梯) |
| 单笔阶梯 | 上一笔 **+10U / 10U** 调节下一笔基数(赢 60U / 亏 40U 等) |
| 杠杆 | **10× 全仓** |
| 一次一单 | 同时仅 **1** 个 Gate 仓位 |
| 止损带宽 | **0.4%1.5%**(结构要求更宽则 **不做**) |
---
## 2. 周期分层
自上而下,**先定能不能做,再做哪一类**:
| 层级 | 周期 | 作用 |
|------|------|------|
| 方向过滤 | **1H** | 大方向;**不得与 15m 排列反向** |
| 均线 + 结构 | **15m** | 21/55/144 排列,顶底分型,结构识别,**B 类收盘突破** |
| 触发 | **5m** | **A 类**:N 字形突破(配合 15m 分型) |
| 方法 | 裸 K + 三均线 | 形态确认,入场与止损锚点 |
**不做「趋势单」概念**:持仓以 **小时** 计,当日了结;与币安/OKX 多日趋势户区分.
---
## 3. 方向过滤(必过)
### 3.1 15m 三均线(21 / 55 / 144)
| 15m 排列 | 只允许 |
|----------|--------|
| **多头排列**(21 > 55 > 144) | **只做多** |
| **空头排列**(21 < 55 < 144) | **只做空** |
| 纠缠,粘合,不符合 | **不做** |
### 3.2 与 1H 同向
- **做多**:15m 多头排列,且 **1H 不得为空头排列**(1H 均线不能与 15m 方向相反).
- **做空**:15m 空头排列,且 **1H 不得为多头排列**.
- 1H/15m 方向冲突 → **当日该方向不做**.
### 3.3 21 均线关系(才允许开仓)
入场须与 **21 均线** 发生有效关系,避免 distant 追单:
| 方向 | 要求(定性) |
|------|----------------|
| **做多** | 多头排列下,**回踩 21 附近获支撑** 或 **站稳 21 上方** 后再按 playbook 入场 |
| **做空** | 空头排列下,**反弹 21 附近承压** 或 **压在 21 下方** 后再按 playbook 入场 |
---
## 4. 开仓类型(仅两类)
界面日后仅两个短标签(全称见下表 hover / 本文):
| 界面标签 | 存储 code(建议) | 本质 |
|----------|-------------------|------|
| **假破** | `liquidity_false_break` | 流动性扫单 → 假突破验证 → **5m N 字****15m 顶/底分型** |
| **结构突破** | `structure_breakout` | **15m 结构有效突破**(**收盘确认**) |
子结构 **不单独占主下拉**,可在复盘备注或二级标签中记录.
---
## 5. A 类:假破(流动性 / 假突破)
**适用**:关键位附近 **扫止损** 后价格 **回到结构内**,陷阱确认后再反向做.
### 5.1 流程
```text
1H/15m 方向 + 21 均线过滤通过
→ 假突破出现(扫高/扫低)
→ 验证为「假」(收回结构内 / 反向裸 K 确认)
→ 5m 走出 N 字(二次探底/探顶后,沿允许方向突破)
→ 15m 出现底分型(多)或顶分型(空)
→ 入场
```
### 5.2 做多 / 做空(对称)
| 步骤 | 做多 | 做空 |
|------|------|------|
| 假破 | 向下扫低后快速拉回支撑/箱上 | 向上扫高后跌回阻力/箱下 |
| 5m N 字 | 扫低 → 反弹 → 不破前低 → 向上突破 | 扫高 → 回落 → 不过前高 → 向下突破 |
| 15m 确认 | **底分型** | **顶分型** |
| 止损 | 假破极值或 N 字低点 **外侧**(仍须落在 0.4%1.5%) | 对称 |
| 目标 | **最低 1:1**;之后 **随行情动态** 部分止盈,移动止损或延伸 | 对称 |
### 5.3 注意
- **须等假破验证完成**,扫完不追.
- **5m N + 15m 分型** 为入场必要条件,缺一不可.
- 与大级别 **宽幅震荡(S1)** 叠加时假信号多,优先 **降频或不做**.
---
## 6. B 类:结构突破
**适用**:15m 上结构清晰,方向与均线排列一致,**收盘突破** 后顺势做.
### 6.1 子结构(均属 B 类)
双顶,双底,头肩顶/底,收敛(三角/楔形),箱体等——**统一记为「结构突破」**.
### 6.2 突破确认
- **以 15m K 线收盘价为准** 突破关键位(颈线,箱边,收敛边界等).
- **仅刺破,未收盘站稳** → **不算** 有效突破,不做.
- 可选:**收盘突破后回踩** 再进(裸 K 确认),仍须满足 21 均线关系与 **≥1:1** 空间.
### 6.3 止损与目标
| 项 | 说明 |
|----|------|
| 止损 | 结构另一侧或突破位回退点 **外侧**(0.4%1.5%,超出则不做) |
| 目标 | 下单前 **至少 1:1**;到位后 **随行情动态** 调整,不写死固定 RR |
| 空间不足 | 最近阻力/支撑导致 **达不到 1:1****不做** |
---
## 7. 行情状态(辅助过滤)
| 状态 | 特征 | Gate 动作 |
|------|------|-----------|
| **S0 趋势** | 1H/15m 排列清晰,高低点有序 | 正常:A/B 均可 |
| **S1 宽幅震荡** | 大箱横盘多日,均线反复穿 | **降频或不做** |
| **S2 末期/选边** | 贴边收敛,刚突破或假破频发 | 优先 **A 假破****B 收敛突破** |
---
## 8. 一日节奏与笔数
| 项 | 规则 |
|----|------|
| 周末 | **不开新仓** |
| 早窗 | 约 **9:00**(8:0012:00 内),**计划内第 1 笔** |
| 下午 | **默认不开新仓**(持仓可保留至晚窗) |
| 晚窗 | 约 **21:00**(20:0023:00 内),**计划内第 2 笔** |
| 第 3 笔 | 仅当 **未连错 2 笔**,且 **早/晚有一笔为止损出场**,可 **补 1 笔** |
| 日上限 | **最多 3 笔** |
| **连错 2 笔** | **当日不再开新仓**(第 3 笔名额作废) |
**连错计数**:
| 出场 | 是否算「错 1 笔」 |
|------|------------------|
| **计划止损**触发 | ✅ 算 |
| **0 点强制清仓**(系统结果 `强制清仓`)且亏损 | ✅ 算 |
| 止盈 / ≥1:1 按计划平 | ❌ 不算 |
| 0 点强制清仓且盈利或平推 | ❌ 不算 |
---
## 9. 出场与统计纪律
### 9.1 盈亏比
- 开仓前:**第一目标空间 ≥ 止损距离(最低 1:1)**.
- 持仓中:目标 **随行情动态** 调整;本文档 **不量化** 固定止盈比例.
### 9.2 禁止「手动止损」
- **亏损出场** 必须来自 **开仓时设定的计划止损**(交易所或监控等价执行).
- **禁止** 盘中亏着 **手点平仓** 充当止损(破坏统计与连错规则).
- 若违规手动平亏:**视为当日纪律失败,建议停手**;复盘结果 **不得** 记为「止损」糊弄统计.
### 9.3 时间出场:仅 0 点(程序已实现)
- **唯一** 时间类出场:**当日 0:00(北京时间)前必须空仓**(赚赔都平).
- **不使用** 下单表单里的 1h / 2h / 4h「开仓后 N 小时平」(`time_close`);与本策略无关.
- **程序兜底**(三所共用,Gate 已启用):
| env | 说明 |
|-----|------|
| `FORCE_CLOSE_ENABLED=true` | 开启整点强制清仓 |
| `FORCE_CLOSE_BJ_HOUR=0` | 北京时间 **0 点那一小时**(00:0000:59)执行 |
- 实现:`force_close_before_reset()`(各实例 `app.py` 后台循环调用).
- 行为:对该小时仍 **active**`order_monitors` **市价全平**,取消交易所触发单,写交易记录.
- **系统结果字段**:`result = 强制清仓`;备注含「北京时间 0:00 整点风控清仓」.
- **策略口语「0 点平仓」= 系统「强制清仓」**,统计连错时按 §8 盈亏判定,不按字段名区分.
> **与 `TRADING_DAY_RESET_HOUR=8` 无关**:后者只切 **交易日**(统计,8 点前禁开等),**不会**自动平仓.
### 9.4 允许的出场类型(统计用)
| 策略说法 | 系统 `result` | 说明 |
|----------|---------------|------|
| 止盈 | 止盈 / 移动止盈 / 保本止盈 等 | 计划止盈或 ≥1:1 后按计划/动态平 |
| 止损 | 止损 | 仅 **计划止损** 触发 |
| 0 点平仓 | **强制清仓** | 整点风控兜底(§9.3) |
| ~~手动平仓~~ | 手动平仓 | **策略禁止**(除极端技术故障等,须复盘说明) |
---
## 10. A / B 如何选择(当日)
| 盘面 | 优先 |
|------|------|
| 刚扫流动性,回到箱内 | **A 假破** |
| 结构清晰,排列已顺,收敛末端 | **B 结构突破** |
| 大箱乱扫,均线粘合 | **不做** |
早/晚窗 **有形态才做**,无形态 = **0 笔**,不占额度.
---
## 11. 与其它账户边界
| 账户 | 周期 | 持仓 | 本户勿混 |
|------|------|------|----------|
| 币安 | 日线/4H 事件 | 数天~数周 | 不要用 Gate 扛隔夜趋势 |
| OKX | 4H 波段滚仓 | 数小时~数天 | 勿与 Gate 同向同结构叠隔夜 |
| **Gate 日内** | 1H 过滤 + 15m/5m | **当日 0 点前** | 见上文 |
---
## 12. 系统对接
### 12.1 已实现
| 项 | 说明 |
|----|------|
| 日内 profile 判定 | `is_intraday_trading_profile()`(`lib/trade/entry_model_lib.py`) |
| 0 点强制清仓 | `FORCE_CLOSE_ENABLED` + `FORCE_CLOSE_BJ_HOUR`;`force_close_before_reset()`;结果 **`强制清仓`** |
| UI 标识 | 顶栏 **强制清仓 已开启** 徽章 + 持仓卡片 **倒计时**(三所 + 中控) |
| 交易记录展示 | 三所 UI / 中控:`强制清仓` 与止损同类 badge |
| 三所统一 | 币安 / OKX / Gate 同一函数与 env;**将来改日内只需各所 `.env` 打开,无需改代码** |
Gate 当前建议 env(节选):
```env
FORCE_CLOSE_ENABLED=true
FORCE_CLOSE_BJ_HOUR=0
TRADING_DAY_RESET_HOUR=8
```
### 12.2 待实现(UI / 纪律)
| 项 | 说明 |
|----|------|
| 开仓类型 | 界面 **`假破` / `结构突破`**(code:`liquidity_false_break` / `structure_breakout`);**无** trend/swing 手选 |
| 写入字段 | `trade_records.entry_model` / 复盘下拉同两项 |
| 隐藏操作 | 日内 profile 下 **隐藏** 平仓,委托,移动保本(**实例页 + 中控**,`intraday_discipline` / `order_entry_profile=intraday`) |
| 隐藏表单项 | 不展示 1h/2h/4h 时间平仓,移动保本勾选(避免与 §9.3 混用) |
| 后端可选 | 严格模式下拒绝 `del_order` / 改委托 API |
---
## 13. 修订记录
| 版本 | 日期 | 说明 |
|------|------|------|
| v0.1 | 2026-07-06 | 定稿:BTC 日内;1H+15m 均线;A 假破(5m N+15m 分型);B 结构突破(15m 收盘);早1晚1/最多3笔/连错2停;禁手动止损;仅 0 点强平 |
| v0.2 | 2026-07-06 | §9.3/§12:对齐 `FORCE_CLOSE_*` 与系统结果「强制清仓」;区分 `time_close` / `TRADING_DAY_RESET_HOUR`;Gate 已启用说明 |
-157
View File
@@ -1,157 +0,0 @@
# OKX·多空趋势账户
> **状态**:v0.4(讨论稿:反转·启动 A/B;**UI 仍为 v0.2 三档**,两级下拉待实现)
---
## 1. 账户定位
| 项 | 说明 |
|----|------|
| 交易所 | OKX 永续合约 |
| 方向 | **做多 + 做空**(`TRADE_DIRECTION=both`,可按需限制) |
| 计仓 | `POSITION_SIZING_MODE=risk` |
| 关键位自动单 | `KEY_AUTO_ORDER_ENABLED=false` |
| UI profile | **趋势户**(非 Gate BTC/ETH 日内白名单) |
**选方向原则**:开仓前确认 4H / 日线大级别与所选「做多/做空」一致;逆势单不在本策略范围内.
做多侧反转细则与 [binance-alt-trend-long.md §3](./binance-alt-trend-long.md) 同构;本文 **§3.2** 给出做空镜像.
---
## 2. 开仓类型(规划与现状)
### 2.1 规划:两级选择(与币安共用实现)
| 第一级 | 第二级 | 做多 | 做空 |
|--------|--------|------|------|
| **反转** | 启动 A / 启动 B | `launch_a` / `launch_b` | 同 code,方向在表单 |
| **顺势** | 大分歧 A / B | `big_div_a` / `big_div_b` | 同左 |
| **波段** | 小分歧 | `small_div` | 同左 |
`lib/trade/entry_model_lib.py` + 共用模板/JS,三所趋势户一致.
### 2.2 现状:下单监控 UI
两级下拉:**性质** → **类型**;提交 `entry_model` code.
### 2.3 杠杆
BTC/ETH **10x**,其它 **5x**;与方向,开仓类型无关.
---
## 3. 反转·启动(讨论定稿)
**性质**:反转 — 在新一轮主趋势**确认之前**作战;与顺势·大分歧不是同一阶段.
**周期**:背离与箱体以 **4h** 为主;**日线与 4h 同阶段时,结构边界以日线为准**;A2 可用 **5m** 节奏.
### 3.1 做多(跌后筑底 → 新主升)
与币安 [§3](./binance-alt-trend-long.md) 一致,摘要如下:
```text
4h MACD 底背离(严格筛选)→ 标「参考高点」
第 1 次到高点附近 → 不做(V 形)
回落箱内 → 第 2 次到高点附近 → 开战
├─ 见小收敛 → 启动 A(A1)
└─ 不见收敛 → 启动 B(实体突破)
B 失败回箱 → 跌破箱一半暂弃;否则 5m 不创新低 + N 字 → 启动 A(A2)
```
| 环节 | 规则 |
|------|------|
| 背离 | 4h MACD **底背离**;**首次**不做;**通道式下跌**不做;明显波段高低点 + **三段及以上**跌后才开始找背离 |
| 参考点 | 背离后标 **最后一个显著高点** |
| 两次摸高 | 第 1 次到高点附近(假破/不破都算)**不做**;第 2 次才关注 |
| 启动 B | 无小收敛 → **实体突破**参考高点/箱顶 |
| 启动 A | A1:摸高前小收敛;A2:B 止损后,**未跌破箱一半** + **5m 不创新低** + **5m N 字** |
### 3.2 做空(涨后筑顶 → 新主跌,镜像)
| 环节 | 做多 | 做空(镜像) |
|------|------|----------------|
| 前端结构 | **跌** → 背离 → 箱 | **涨** → 背离 → 箱 |
| 背离 | 4h MACD **底背离** | 4h MACD **顶背离** |
| 背离过滤 | 首次不做;**通道式下跌**不做;三段及以上**跌** | 首次不做;**通道式上涨**不做;三段及以上**涨** |
| 参考点 | **参考高点** | **参考低点**(最后一个显著低点) |
| 两次摸极值 | 第 1 次到**高点**附近不做(V 形反弹) | 第 1 次到**低点**附近不做(V 形下跌) |
| 作战区 | 第 2 次到**高点**附近 | 第 2 次到**低点**附近 |
| 启动 B | **实体跌破**参考低点/箱底 | 同上(向下实体突破) |
| 启动 A1 | 第二次摸高前**小收敛** | 第二次摸低前**小收敛** |
| 启动 A2 | B 失败后**未跌破**箱一半;**5m 不创新低**;破 **5m 高** N 字 | B 失败后**未涨破**箱一半;**5m 不创新高**;破 **5m 低**倒 N 字 |
| 成功后 | 主升 → 顺势大分歧 / 小分歧 | 主跌 → 顺势大分歧 / 小分歧 |
> 横盘**时长不量化**;顺序为 **涨/跌 → 背离 → 背离后震荡**,非趋势中继.
### 3.3 与顺势,波段的边界
| | 反转·启动 | 顺势·大分歧 | 波段·小分歧 |
|---|-----------|-------------|-------------|
| 做多前端 | 跌→背离→箱→两次摸高 | 主升已确立 | 主升已确立 |
| 做空前端 | 涨→背离→箱→两次摸低 | 主跌已确立 | 主跌已确立 |
| V 形 | 第 1 次摸极值不做 | — | — |
| 5m N 试仓 | **启动 A(A2)**,非小分歧 | — | — |
| 第三次不做 | — | — | ✓ |
---
## 4. 顺势·大分歧(趋势单)
**前提**:主趋势**已确立**;上方(多)或下方(空)仍有空间;**不要**求反转链(§3).
| | 做多 | 做空 |
|---|------|------|
| **大分歧 A** | 4h/日线多头;5m/15m 收敛,**不创新低**企稳 | 4h/日线空头;5m/15m 收敛,**不创新高**企稳 |
| **大分歧 B** | **向上突破**确认(实体优先) | **向下突破**确认(实体优先) |
---
## 5. 波段·小分歧(波段单)
**前提**:主趋势**已走出**;反转链进行中**不做**小分歧.
- **前两次**可做,**第三次不做**;不追突破
- **做多**:二次探底 → N 字;或 5m 三均线重新多头
- **做空**:二次探顶 → 倒 N;或 5m 三均线重新空头
---
## 6. 纪律
1. 方向与大级别一致;不做顺手反向单;同一币种避免未计划对冲叠仓
2. **反转**:首次背离不做;通道式涨跌中的背离不做;第 1 次摸参考极值不做(V 形)
3. **顺势**:第三次小分歧不做;小分歧不追突破
4. 止盈/止损/是否手平:**随行情**,本文档不量化 RR
---
## 7. 持仓与出场(定性)
| 单型 | 做多 | 做空 |
|------|------|------|
| 启动 A/B | 赌新主升;B 失败可 A2;确立前不做小分歧 | 赌新主跌;同上镜像 |
| 大分歧 | 可长持;两次小分歧后远目标未到可手平 | 同左 |
| 小分歧 | 短拿,常手平 | 短拿,常手平 |
---
## 8. 系统字段
| 操作 | 字段 |
|------|------|
| 下单(现状) | `entry_model` + `trade_style`;方向在订单侧 |
| 下单(规划) | `launch_a` / `launch_b` + 两级 UI |
| 平仓 / 复盘 | `entry_reason` = 界面标签;与币安一致 |
---
## 修订记录
| 版本 | 日期 | 说明 |
|------|------|------|
| v0.4 | 2026-07-06 | 反转·启动 A/B(做多同币安 §3;做空镜像);两级 UI 规划 |
| v0.3 | 2026-07-06 | 独立完整策略说明 |
| v0.2 | 2026-07-06 | 定稿 UI 短标签 |
-184
View File
@@ -1,184 +0,0 @@
# 趋势回调:中控平仓与交易记录(检阅备忘)
本文档汇总 **中控手动结束趋势计划**,**交易记录 / 策略记录** 写入规则,以及 **三所展示统一**,**补仓表计价** 相关修复,便于自行检阅与排错.
适用仓库:`crypto_monitor`(Binance / OKX / + `manual_trading_hub`).
---
## 1. 中控手动平仓会不会写交易记录?
**会.** 在实例已部署 **`80226ee` 及之后** 代码并 **重启对应 Flask** 的前提下:
中控点击 **「结束计划」** → 实例执行市价平仓 + 结束计划 → **同时写入**:
| 目标 | 表 | 页面入口 |
|------|-----|----------|
| 策略记录 | `strategy_trade_snapshots` | 顶栏 **策略交易记录** → 左栏「趋势回调记录」 |
| 交易记录 | `trade_records` | 顶栏 **交易记录与复盘** |
手动结束的结果字段为 **「手动平仓」**(亏损时也不会被改成「止损」).
---
## 2. 调用链(三所统一)
```
manual_trading_hub
POST /api/trend/{exchange_id}/stop
→ 实例 POST /api/hub/trend/stop/{plan_id}
→ stop_trend_pullback(pid)
→ 市价平仓 + 撤单
→ _finalize_plan(cfg, conn, row, "手动平仓", exit_price)
```
共用实现:`strategy_trend_register.py`(三所同一套,各所的 `stop_trend_pullback` 也调用 `_finalize_plan`).
---
## 3. `_finalize_plan` 写入顺序(修复后)
1.**策略快照** `save_trend_plan_snapshot``strategy_trade_snapshots`
2. 撤该品种挂单
3. 若尚无 `trade_records.trend_plan_id = 计划ID`:
- 更新当日 session 资金
- **`insert_trade_record`** 写入交易记录
4. 更新 `trend_pullback_plans.status`(`stopped_manual` / `stopped_sl` / `stopped_tp`)
5. **`conn.commit()`** 一次提交
要点:**先写交易记录,再结束计划**,避免「计划已结束,交易记录未写入」的半成功状态.
---
## 4. 曾出现的 Bug(#4 ONDO 漏记)
**现象**:策略记录有(止损 -2.71U),**交易记录没有**.
**原因**:各所的 `insert_trade_record`**缺少 `entry_reason` 参数**,而 `_finalize_plan` 固定传入 `entry_reason="趋势回调"`,触发:
```text
TypeError: insert_trade_record() got an unexpected keyword argument 'entry_reason'
```
策略快照在异常 **之前** 已插入,交易记录插入失败,故只出现在策略记录页.
**修复提交**:`80226ee`
- `insert_trade_record` 增加 `entry_reason`
- `_call_insert_trade_record`:按各所函数 **签名过滤** 参数,避免未知字段导致失败
- 调整写入顺序:交易记录 → 计划结束 → commit
---
## 5. 历史漏记补录
对已结束,策略快照在,交易记录缺的计划(如 #4):
```bash
cd /opt/crypto_monitor_user # 或本机仓库根目录
# 先预览
python scripts/backfill_trend_trade_records.py \
--db crypto_monitor_gate/crypto.db --dry-run
# 确认后写入
python scripts/backfill_trend_trade_records.py \
--db crypto_monitor_gate/crypto.db --apply
```
其它所将 `--db` 换成对应 `crypto.db` 路径即可.
---
## 6. 与「保本移交」的区别
| 操作 | 策略记录 | 交易记录 |
|------|----------|----------|
| 中控 **结束计划**(手动平仓) | 计划结束时写入 | **同一时刻**写入 |
| **保本移交** | 移交时写入策略快照 | **不立即写**;持仓移交到 `order_monitors`,**后续平仓** 再写入 `trade_records` |
---
## 7. 三所展示统一(中控 ↔ 实例)
### 7.1 数据 enrich 入口
| 场景 | 函数 |
|------|------|
| 实例策略页 | `enrich_trend_plan` |
| 中控 `/api/hub/monitor` | `enrich_trend_plan_for_hub` → 同上 |
| 补仓明细表 | `attach_trend_dca_levels``enrich_trend_dca_levels_with_tp` |
`hub_bridge` 安装后调用 `patch_trend_hub_enrich`,与另外三所 `install_strategy_trend` 行为一致.
### 7.2 补仓表「触发价 / 加仓后均价」
**禁止**为凑均价 **反推虚构成交价**(曾错误出现做多补仓触发价 0.3941 等离谱数值).
**`trend_leg_display_price`(三所唯一口径)**:
| 列 | 规则 |
|----|------|
| **触发价** | `leg_fill_prices_json` 有记录 → 实际成交价;无记录 → **计划网格价** |
| **末档已补仓的加仓后均价** | 与顶部均价一致,取 **交易所持仓 `entry_price`**(`avg_entry_price`) |
| **顶部均价** | 优先交易所 live `entry_price`,非计划库内估算值 |
修复提交:`08082eb`(移除反推成交价逻辑).
### 7.3 中控静态页
`manual_trading_hub/static/app.js`:趋势浮盈亏计算 **优先** `trendPlan.avg_entry_price`,与计划卡一致.
---
## 8. 部署与自检
### 8.1 升级
```bash
cd /opt/crypto_monitor_user
git pull # 需含 80226ee,08082eb
pm2 restart crypto-monitor-binance crypto-monitor-okx crypto-monitor-gate manual-trading-hub
pm2 save
```
### 8.2 手动平仓后自检
1. 中控结束一笔测试计划(或极小仓位)
2. **策略交易记录**:出现对应条目
3. **交易记录与复盘**:出现 `类型=趋势回调`,`结果=手动平仓`,且 `trend_plan_id` 与计划 ID 一致
4. 若实例 flash / 日志出现「计划已结束但记账可能不完整」,说明 `insert_trade_record` 仍失败,需查 PM2 日志
### 8.3 相关代码文件
| 文件 | 作用 |
|------|------|
| `strategy_trend_register.py` | `_finalize_plan`,`_call_insert_trade_record`,`enrich_trend_plan` |
| `strategy_trend_lib.py` | `trend_leg_display_price`,`enrich_trend_dca_levels_with_tp` |
| `strategy_snapshot_lib.py` | 策略快照写入 |
| `hub_bridge.py` | `/api/hub/trend/stop/<pid>` |
| `crypto_monitor_gate/app.py` | `insert_trade_record`(含 `entry_reason`) |
| `scripts/backfill_trend_trade_records.py` | 漏记交易记录补录 |
### 8.4 相关提交
| 提交 | 说明 |
|------|------|
| `6a4ec69` | 中控与三所趋势展示 enrich 统一 |
| `08082eb` | 移除补仓表反推虚构成交价 |
| `80226ee` | 修复 中控平仓漏写 `trade_records` |
---
## 9. 相关文档
| 文档 | 内容 |
|------|------|
| [策略交易说明.md](../策略交易说明.md) | 策略总览,策略交易记录页 |
| [crypto_monitor_gate/趋势回调策略说明.md](../crypto_monitor_gate/趋势回调策略说明.md) | 趋势回调业务细则 |
| [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md) | 中控监控与趋势卡布局 |
| [hub-symbol-archive-kline.md](./hub-symbol-archive-kline.md) | 币种档案,永久 5m K 线,交易 overlay |
---
*最后整理:2026-06-07(与对话中修复项同步)*
-129
View File
@@ -1,129 +0,0 @@
# 趋势回调策略说明
本文描述 **「趋势回调」** 自动交易计划的业务规则与实现口径.
**三所主站**(Binance / Gate / OKX)均在顶栏 **策略交易 → `/strategy`** 左栏提供同一套逻辑(共用 `strategy_trend_register.py`);各所使用各自 API 与 `crypto.db`.
**检阅备忘**(中控平仓,交易记录,补仓展示,漏记补录):[trend-hub-close-and-trade-records.md](./trend-hub-close-and-trade-records.md)
---
## 1. 适用场景
-**USDT 永续** 实例独立部署,使用各自 API 与 `crypto.db`.
- 你已明确:**方向,止损价,补仓区间边界价,止盈价,杠杆**,并接受程序按风险预算拆分 **首仓 50% + 多档补仓 50%**.
---
## 2. 名词与参数
| 名称 | 含义 |
|------|------|
| **合约 USDT 可用余额** | **生成预览**时通过 API 读取的 **swap 账户 USDT `free`** 快照;**确认执行**时再次读取并与快照比对偏差. |
| **风险比例** | 默认 **5%**:指「若整笔计划在 **补仓区间远侧边界**(做多=上沿,做空=下沿)这一侧的最坏价格结构下触及止损」,目标亏损上限约为 **可用余额快照 × 风险比例**(实现上用 `calc_risk_fraction``prepare_order_amount` 反推总张数,受交易所最小张数与精度约束). |
| **止损价** | 用户填写;开仓后挂 **交易所仓位类止损触发单**(全平). |
| **补仓区间边界**(库字段 `add_upper`) | 用户填写;**仅在该价位与止损价构成的区间内** 才允许程序触发剩余 50% 的市价补仓.**界面文案**:做多显示「补仓上沿」,做空显示「补仓下沿」.校验:做多 `止损 < 边界价`;做空 `止损 > 边界价`. |
| **止盈价** | 用户填写的 **固定价格**;**不由交易所条件止盈单触发**,由应用后台 **按标记价/行情价轮询**,达到后 **市价全平**. |
| **杠杆** | 计划内固定写入;用于 `set_leverage` 与名义换算. |
| **补仓档位数** | 默认 **5** 档(环境变量 `TREND_PULLBACK_DCA_LEGS` 可调);程序在满足最小张数前提下可能 **自动减少档数**. |
---
## 3. 执行流程(时间顺序)
### 3.0 列表时间窗(交易记录 / 计划历史)
- **交易记录**,**计划历史**(含预览快照)列表与 **交易记录 CSV 导出** 支持 **UTC** 时间筛选(默认 UTC 当日;可选近 24h,近 7d,自定义起止).
- 查询参数:`win_preset`(`utc_today` / `utc_last24h` / `utc_last7d` / `custom`),自定义时另传 `from_utc`,`to_utc`.
- **统计分析**页仍按北京时间 `TRADING_DAY_RESET_HOUR` 切日,不受列表窗影响.
### 3.1 预览阶段(不下单)
1. **风控**:与「机器人下单监控」**互斥**——存在活跃机器人持仓或运行中趋势计划时,不可生成预览.
2. **读取可用余额快照** `get_available_trading_usdt()`,失败则拒绝.
3. **计算**(写入表 `trend_pullback_previews`,并跳转带 `preview_id`):
-**补仓区间边界 ↔ 止损** 区间内生成 `N` 个补仓触发价(做多从上沿向止损,做空从下沿向止损);
-**剩余 50% 计划张数** 拆成 `N` 份写入 `leg_amounts_json`.
4. **预览有效期**:默认 **120 秒**(`TREND_PULLBACK_PREVIEW_TTL_SECONDS`),超时须重新点「生成预览」.
### 3.2 确认执行(实盘)
5. 再次校验:预览未过期;**当前可用余额**与预览快照相对偏差 ≤ `TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT`(默认 **5%**),否则拒绝执行并要求重新预览.
6. **首仓**:**立即市价** 开立 **总计划张数 × 50%**(不附带交易所止盈单).
7. **止损**:撤销旧条件单后,挂 **仅止损** 的仓位触发单;之后每次补仓成交会 **刷新** 止损挂单.
7b. **保本移交下单监控**(可选):首仓完成且交易所有持仓后,可点击「保本移交下单监控」——将止损移至 **持仓均价 ± 偏移%**(默认 **+0.3%** 多 / **0.3%** 空),仅当新止损 **优于** 当前止损时生效;**本次趋势计划随即结束**,持仓写入 **下单监控**(备注 **趋势回调计划**),交易所在 **同一时刻挂保本止损 + 计划止盈**;后续无论中控平仓或交易所手动平仓,均经下单监控轮询 **`reconcile_external_closes` / `check_order_monitors`** 写入 **交易记录**(含 `trend_plan_id`,开仓类型「趋势回调」),供人工核对.
8. **补仓**:当价格 **穿越** 下一档触发价(做多为自上向下穿越,做空为自下向上穿越)时,按该档张数 **市价加仓**;直至 `N` 档执行完毕或计划结束.
9. **止盈监控**:后台线程若发现价格触及止盈,则 **市价全平**.
10. **止损触发**:若仓位被交易所止损打光,本地检测到 **持仓为 0** 后记账为 **止损** 并结束计划.
11. **计划结束**:任一结束路径(止盈 / 止损 / 用户手动结束)均会 **撤单**(条件单 + 普通挂单,尽力而为).
### 3.3 取消预览
用户可「取消预览」删除 `trend_pullback_previews` 中对应记录;过期记录会在新预览或页面加载时清理.
### 3.4 界面:计划历史与运行中浮动盈亏
- **计划历史(页顶卡片)**
- 仅展示 **`trend_pullback_plans` 中已结束的计划**(`status != 'active'`,如止盈结束,止损结束,手动结束).
- **不包含**仅存在于 `trend_pullback_previews`,从未「确认执行」的预览.
- 每行提供 **删除**:删除该计划行,并删除 `trade_records`**`trend_plan_id` 与之相同** 且类型为「趋势回调」的记录(用于与计划一一对应的新数据;历史旧行若无 `trend_plan_id` 则不会随删).
- **运行中的计划(交易执行页)**
- 在计划摘要下方展示 **浮盈亏(交易所)**:来自 Gate 当前持仓接口的 **未实现盈亏**(及标记价,若可得);与本地按均价估算可能略有差异,以交易所为准便于对照.
- **补仓边界**按方向显示「补仓上沿」或「补仓下沿」(数值仍为 `add_upper` 字段).
- **手动保本**:表单可改偏移 %(默认见 `TREND_PULLBACK_MANUAL_BREAKEVEN_OFFSET_PCT`);成功后显示「已保本」时间与原止损(若与当前不同).
### 3.5 交易记录与交易所「已实现盈亏」对齐
- 平仓时仍会写入一条 **`trade_records`**(`monitor_type=趋势回调`),其中的 **`pnl_amount` 等为本地估算**(`calc_pnl`,不含手续费,资金费等完整账单口径).
- 打开 **「交易执行」或「交易记录」** 页面时,若已配置 **`GATE_API_KEY` / `GATE_API_SECRET`**(不要求 `LIVE_TRADING_ENABLED=true`,只读即可),应用会按节流策略(同进程约 **25 秒**内最多一次)调用 Gate **`fetch_positions_history`(平仓历史)**,为尚未写入 `exchange_sync_key` 的趋势回调记录 **匹配一条平仓记录**,并回填:
- **`exchange_realized_pnl`**:交易所口径已实现盈亏(与 App「历史仓位」更接近);
- **`exchange_opened_at` / `exchange_closed_at`**:换算为应用时区(默认北京)下的开,平时间字符串.
- **交易记录表**展示列「开仓(展示) / 平仓(展示) / 盈亏U(展示)」:对「趋势回调」行,若已同步则优先显示交易所字段(界面小字 **「所」**);未同步前仍显示本地复盘字段(小字 **「估」**).
- 匹配规则概要:同品种,同方向,平仓时间与本地 `closed_at` 接近,并结合 **`trend_plan_id`** 对应计划的 `opened_at` 收窄时间窗;极端情况下若短时间多笔同向同品种,仍存在错配可能,可对照 `exchange_sync_key` 与交易所记录.
---
## 4. 与「机器人下单监控」的差异
| 项目 | 机器人下单监控 | 趋势回调 |
|------|------------------|----------|
| 开仓 | 单次市价 + 条件止盈+止损 | 首仓 50% 市价 + 多档补仓 + **仅止损在交易所** |
| 止盈 | 条件单 + 本地监控 | **仅本地监控市价止盈** |
| 仓位基数 | 以损定仓(表单/会话基数) | **可用余额快照 × 风险比例** 推导 |
| 移动保本 | 支持(按 R 自动上移) | **保本移交**(结束计划→下单监控;交易所 TP+SL;**无**自动 R 保本) |
---
## 5. 风险声明(必读)
- 市价单存在 **滑点**;极端行情下实际亏损可能 **大于** 理论 5%.
- 补仓触发依赖应用 **轮询间隔**(`MONITOR_POLL_SECONDS`),非毫秒级高频.
- 交易所 **最小张数 / 精度** 可能导致计划张数被截断,实际风险略低于或偏离纸面计算.
- 请使用 **单独 API Key / 子账户**,并先在 `LIVE_TRADING_ENABLED=false` 环境验证流程(若需沙盒请自行对接测试网,本仓库默认实盘接口).
---
## 6. 相关环境变量
| 变量 | 说明 | 默认 |
|------|------|------|
| `TREND_PULLBACK_MANUAL_BREAKEVEN_OFFSET_PCT` | 手动保本默认偏移(相对持仓均价,%) | `0.3` |
| `TREND_PULLBACK_DCA_LEGS` | 剩余 50% 拆档数量上限 | `5` |
| `TREND_PULLBACK_PREVIEW_TTL_SECONDS` | 预览有效时间(秒) | `120` |
| `TREND_PREVIEW_MAX_BALANCE_DRIFT_PCT` | 确认执行时允许「当前可用 / 预览快照」最大相对偏差(%) | `5` |
| `MONITOR_POLL_SECONDS` | 监控轮询间隔(秒) | `3` |
| `LIVE_TRADING_ENABLED` | 是否允许真实下单 | `false` |
| `FULL_MARGIN_BUFFER_RATIO` | 计划保证金相对可用余额上限比例 | `0.98` |
| `APP_TIMEZONE` | 应用墙钟与「北京日期」同步起点时区(如 `Asia/Shanghai`) | `Asia/Shanghai` |
| `EXCHANGE_POSITION_SYNC_FROM_BJ` | 拉取 Gate **平仓历史** 的最早日期(`YYYY-MM-DD`,按 `APP_TIMEZONE` 当日 **00:00** 起算).**留空**则从近 **90 天** 起拉取 | 空 |
| `EXCHANGE_POSITION_HISTORY_LIMIT` | 单次拉取平仓历史条数上限(50–1000) | `200` |
---
## 7. 数据库
- **`trend_pullback_previews`**:未执行的预览行(含 `expires_at_ms`),执行成功或取消后删除;过期可被清理.
- **`trend_pullback_plans`**:趋势回调计划.执行后写入一行,`status='active'` 表示运行中;止盈 / 止损 / 手动结束后变为 **`stopped_tp` / `stopped_sl` / `stopped_manual`** 等非 `active` 状态,并出现在页顶 **计划历史**.字段含快照可用余额,计划保证金,总张数,首仓张数,补仓 JSON,网格价 JSON,已补仓档数,均价,`opened_at`,`message`(结束说明)等;**`add_upper`** 存补仓区间远侧边界价(做多=上沿,做空=下沿).
- **`trade_records`**(`monitor_type=趋势回调`):每次计划结束插入一行;含本地估算盈亏等.新写入行带 **`trend_plan_id`** 指向 `trend_pullback_plans.id`.另含 **`exchange_realized_pnl`,`exchange_opened_at`,`exchange_closed_at`,`exchange_sync_key`**,由页面触发的交易所平仓历史同步填充(见 3.5).
**CSV 导出**:交易记录导出为 **v3**,包含上述交易所对齐字段及 `trend_plan_id`.
+2 -1
View File
@@ -12,7 +12,8 @@
| 运行用户 | **root**(下文命令均按 root 编写) |
| 项目路径 | **`/opt/crypto_monitor_user`**(整仓克隆到此目录) |
| 进程管理 | **PM2**(全局安装,见 §3) |
| 网络 | 能 `git clone` 私有仓库;访问交易所不稳定时需 **SSH SOCKS**(见各所《部署文档》) |
| 网络 | 能 `git clone` 私有仓库;能访问授权站 **https://sq.bz121.com**;访问交易所不稳定时需 **SSH SOCKS**(见各所《部署文档》) |
| 授权 | 部署后配置仓库根 `license.env`,打开 `/license` 激活(见 [license.md](./license.md) |
---
-103
View File
@@ -1,103 +0,0 @@
# 中控 AI 与部署密钥配置
本文档说明:**长期部署密钥**(一次生成,不轮换),**SSO 临时链接**(保持不动),以及 **AI 配置**(中控统一维护并同步三所).
---
## 1. 三类「密钥」分工
| 类型 | 变量 / 机制 | 谁维护 | 是否自动过期 |
|------|-------------|--------|--------------|
| **长期通信密钥** | `HUB_BRIDGE_TOKEN` | 部署脚本首次写入四份 `.env` | 否,不轮换 |
| **实例 Session 签名** | `FLASK_SECRET_KEY` | 部署脚本首次写入三实例 | 否 |
| **中控 Session 签名** | `HUB_SESSION_SECRET` | 部署脚本首次写入中控 | 否 |
| **SSO 开门链接** | `/hub-sso?token=...` | 中控每次点「打开实例」签发 | 默认 2h + 单次 |
| **AI 配置** | `OPENAI_*`,`AI_*` 等 | 中控系统设置 → AI 配置 | 否 |
**SSO 保持不动**:仍为随机 nonce,默认 `HUB_SSO_TTL_SEC=7200`,成功登录一次后链接作废.长期 `HUB_BRIDGE_TOKEN` 只用于签名,不会每 2 小时变化.
---
## 2. 首次部署自动生成
`bash deploy/setup_env.sh` 在复制 `.env.example` 后自动执行:
```bash
python3 scripts/bootstrap_deploy_secrets.py
```
| 写入项 | 位置 | 规则 |
|--------|------|------|
| `HUB_BRIDGE_TOKEN` | 中控 + 三实例(同值) | 仅空或占位符时写入 |
| `FLASK_SECRET_KEY` | 三实例(同值) | 仅空或占位符时写入 |
| `HUB_SESSION_SECRET` | 中控 | 仅空时写入 |
| `HUB_USERNAME` / `HUB_PASSWORD` | 中控 | 默认 admin / admin123(仅空时) |
| `APP_USERNAME` / `APP_PASSWORD` | 三实例 | 默认 admin / admin123(仅空时) |
**已有非空生产值不会被覆盖**(一次生成,不轮换).
子代理 `agent.py` 优先读取 `HUB_BRIDGE_TOKEN` 作为 `X-Control-Token` 校验;独立配置 `CONTROL_TOKEN` 已废弃.
---
## 3. 中控系统设置 → AI 配置
路径:**中控 Web → 系统设置 → AI 配置** Tab.
### 3.1 可配置项
| 中文名 | 环境变量 |
|--------|----------|
| AI 提供方 | `AI_PROVIDER` |
| API 地址 | `OPENAI_API_BASE` |
| API 密钥 | `OPENAI_API_KEY`(掩码,留空不修改) |
| 云端模型 | `OPENAI_MODEL` |
| Ollama 地址 | `OLLAMA_API` |
| Ollama 模型 | `AI_MODEL` |
| 请求超时(秒) | `AI_TIMEOUT_SECONDS` |
### 3.2 保存行为
1. 写入 `manual_trading_hub/.env`
2. **强制同步**`crypto_monitor_okx/binance/gate/.env` 相同键
3. 自动 `pm2 restart` 中控 + 三实例(`--update-env`)
### 3.3 API(需已登录中控)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/settings/ai-env` | 读取字段与三所同步状态 |
| POST | `/api/settings/ai-env` | body: `{ "values": {...}, "restart": true }` |
实现:`lib/env/shared_env_lib.py`,`manual_trading_hub/hub_env_lib.py`.
---
## 4. 实例 env 配置页变更
三所 **env 配置** 页已 **移除「AI 复盘」卡片**.交易所 API,企业微信,交易执行等仍各所自配.
实例侧若通过 API 提交已移除的 AI 键,会被白名单过滤,不会写入.
---
## 5. 与系统设置 / env 页对照
| 能力 | 实例 env | 实例系统设置 | 中控系统设置 |
|------|----------|--------------|--------------|
| 交易所 API | ✅ | ❌ | ❌ |
| OpenAI / AI | ❌ | ❌ | ✅(同步三所) |
| 实例登录密码 | ❌ | ✅ | ❌ |
| 中控登录密码 | ❌ | ❌ | ✅ |
| Bridge / Flask 长期密钥 | ❌(自动) | ❌ | ❌(自动) |
| SSO 链接 | — | — | 每次打开实例自动签发 |
---
## 6. 运维提示
- 修改 AI 后若未自动重启成功,手动:`pm2 restart manual-trading-hub crypto_okx crypto_binance crypto_gate --update-env`
- 三所 AI 不一致时,中控 AI 配置页会提示「未完全同步」;点 **保存并同步** 即可对齐
- 备份包可选包含各 `.env`(中控设置 → 备份恢复)
相关文档:[env配置说明.md](./env配置说明.md),[系统设置说明.md](./系统设置说明.md),[manual_trading_hub/局域网与反代部署说明.md](../manual_trading_hub/局域网与反代部署说明.md)(SSO 2h 说明)
-678
View File
@@ -1,678 +0,0 @@
# OKX 对冲计划 — 开发方案
> 状态:**方案冻结**(实现前对照本页;改需求先改本文).
> 范围:**仅 `crypto_monitor_okx` 实例**;中控不做对冲开平.
> 相关策略说明:[期权对冲方案分析.md](./期权对冲方案分析.md)
---
## 1. 目标与命名
在 OKX 实例增加独立模块 **「对冲计划」**,把「行情选腿 → 情景测算 →(条件满足时)自动开仓 → 规则退出 → 独立复盘统计」串成一套可状态跟踪的计划.
| 产品名 | 英文键 | 含义 |
|--------|--------|------|
| **永期对冲** | `perp_options` | 永续(子账户) + 买方期权(主账户) |
| **期期对冲** | `options_options` | 主账户内两条买方期权腿 |
页面/导航展示用中文名;API/DB 用英文键.
**不做(本方案外):**
- 卖方期权、组合单原子成交
- 中控代下单
- 跨所对冲
- 替代现有关键位/策略/期权页(可共存,但同标的限制见 §9)
---
## 2. 计仓模式门禁
沿用 `[docs/position-sizing-mode.md](./position-sizing-mode.md)`:
| `POSITION_SIZING_MODE` | 永期对冲 | 期期对冲 |
|------------------------|----------|----------|
| `risk`(以损定仓 / **非全仓**) | **仅测算**(左右行情 + 情景表);**禁止开仓/启动计划** | **允许开仓**(测算 + 启动计划) |
| `full_margin`(全仓杠杆) | **允许开仓** | **允许开仓** |
说明:
- **永期**依赖永续全仓名义与保证金节奏,故开仓仅限全仓.
- **期期**不占永续保证金,非全仓也允许开期权腿;非全仓下 UI 隐藏/禁用「启动永期」,仍可做永期**只读测算**.
- 切模式后若存在 `active` 永期计划,禁止切到 `risk`,或强制要求先结束计划(实现时二选一并写死校验).
额外硬门:
-`OKX_OPTIONS_ENABLED=true` 且期权 API 可用.
- 实际开仓须实例允许实盘(`LIVE_ORDER` 等与永续/期权现有开关一致),并对冲计划自有开关见 §10.
---
## 3. 永期对冲 — 仓位与选期权
### 3.1 永续开仓量(全仓)
与现网全仓逻辑一致,对冲计划固定用于 **BTC / ETH**:
```
可用保证金 = 合约账户可用 USDT
占用保证金 = 可用 × FULL_MARGIN_BUFFER_RATIO(默认 0.98)
杠杆 = BTC_LEVERAGE / ETH 对应杠杆(默认 10x)
名义 ≈ 占用保证金 × 杠杆
张数 = amount_to_precision(名义 / 价格 / 合约面值)
```
页面左侧展示:**建议张数、名义、止损亏损额、止盈盈利额**(用户填止盈价/止损价后按该仓位即时算).
用户流程:
1. 选标的 ETH/BTC、方向(多/空).
2. 系统按全仓 ×0.98×10x 算出永续张数与到止盈/止损的 U 盈亏.
3. **再据此挑选右侧期权**(保费、张数、行权价),使「止损时保险腿」与「止盈保费损耗」可接受.
4. 通过情景表确认后启动计划.
### 3.2 期权腿选取
- 行情自动拉 OKX 期权链(复用 `build_option_chain`).
- **报价形态:列表式**;多仓默认筛 **Put**,空仓默认筛 **Call**.
- 权利金默认按 **卖一 ask** 估算;开仓限价买入.
### 3.3 左右布局
```
左:永续列表行情(标记/买卖一) + 方向/建议张数/开仓价/止盈/止损
右:期权列表(可「选用」一条腿)
下:情景测算 → [保存草稿] [启动计划]
```
---
## 4. 期期对冲 — 仓位与选腿
### 4.1 报价与选腿
- **T 型报价链**(复用期权页 T 型样式/数据结构).
- 用户选 **腿 A + 腿 B**(通常 Call + Put,或主方向 + 尾部).
- 预算受 `OKX_OPTIONS_TRADE_BUDGET_USDC` 等既有约束;可拆预算到两腿.
### 4.2 目标价
用户填 **预判价格 S\*** (「价格能到的位置」):
- 系统标明在 S\* 时哪条腿为 **盈利方**、哪条为 **亏损方**.
- 到达规则见 §5.2.
### 4.3 左右布局
```
左:指数价 + 到期日 + 预算 + 目标价 S*
右:T 型链,依次选用两腿
下:情景测算 → [保存草稿] [启动计划]
```
非全仓模式下期期布局同上(无永续区).
---
## 5. 退出规则(冻结)
### 5.1 永期对冲
| 事件 | 永续 | 期权 | 计划是否结束 | 设计意图 |
|------|------|------|--------------|----------|
| **永续止盈触发** | 交易所 TP 平仓 | **不强制平**(保险腿可自生自灭/人工) | **算结束** | 对冲计划以永续兑现目标收口 |
| **永续止损触发** | 交易所 SL 平仓 | **必须强制平仓** | **算结束** | 保护机制 |
| 期权单独到期 | — | 结算 | 若计划已因止盈结束则只更新腿快照,不再改计划合计 | |
| 人工结束计划 | 可选平永续 | 按选项 | **算结束** | |
**计划结束时盈亏口径(写入 `realized_pnl_*`,推送与统计共用):**
| 结束原因 | 公式(≈U,1:1) | 字段落库 |
|----------|--------------|----------|
| **止盈** `perp_tp` | **永续止盈已实现盈利 − 期权已付权利金** | `realized_pnl_perp` = 止盈盈利;`realized_pnl_options` = **premium_total**(按权利金全额计成本,不论期权是否仍持仓);`realized_pnl_total` = 上两式之和 |
| **止损** `perp_sl` | **期权平仓盈利 永续止损亏损额** | `realized_pnl_options` = 期权强制平后已实现;`realized_pnl_perp` = 永续止损已实现(为负或记亏损额);`realized_pnl_total` = 期权盈利 − \|永续亏损\|(即有符号相加) |
说明:
- 止盈时期权**物理上可不平**,但 **计划账** 已按「保费打掉」收口,后续期权 thrift/到期盈亏 **不再回写计划合计**(可在腿上另记备注/浮盈,不进 `realized_pnl_total`).
- 止损时期权必须先强平再结账,用真实平仓盈亏,不是只扣权利金.
永续侧 TP/SL:沿用实例 **交易所条件单**,监控识别成交后触发计划结束逻辑 + 微信推送.
### 5.2 期期对冲
| 事件 | 盈利方 | 亏损方 | 计划是否结束 |
|------|--------|--------|--------------|
| **标的价到达用户目标价 S\*** | **自动平仓** | **不平**,持有至到期 | 平盈利腿后计划可标 `closing`;**全部腿终态后结束**(亏损腿到期后结账) |
| **到期且整体无盈利** | — | 到期结算 | **算结束**;合计记 **总亏损**(通常 ≈ −全部权利金,或到期结算净值 &lt; 0 的合计) |
| 到期时组合合计仍盈利 | — | 到期结算 | **算结束**;按实际结算盈亏入账 |
| 未达 S\* 至到期 | 两腿均到期 | | 同上,按结算合计结束 |
判定「整体无盈利」:到期(或计划收口)时 `realized_pnl_total ≤ 0`(含双腿权利金全损).
盈利方判定规则仍按前文(触达 S\* 时按浮盈较大一侧平仓;皆亏则等到期).
### 5.2.1 期权腿实盘平仓执行(与期权页共用)
对冲计划凡**必须物理平掉期权腿**时(如永期止损联动、期期平盈利腿),执行口径与独立期权模块一致:
| 规则 | 说明 |
|------|------|
| 禁市价 | 代码硬关闭,无市价兜底 |
| 只锁买一 | 本轮 `min(仓位, 买一深度)` × 买一限价;`reduceOnly` |
| 分批 | 买一不够则剩余下一轮再平再锁新买一 |
| 有效流动性 | 残档买一禁止按买盘平 |
| 2× 门控 | 目标位/自动类路径首次需可回收≥2×权利金并持续 hold;手动买一平只验流动性 |
| 平仓挂单 TTL | 卖出限价超 `OKX_OPTIONS_PENDING_TTL_SECONDS`(默认 10 分钟)自动撤;UI「委托」可见 |
完整说明(可单独打开):**[期权开平仓与监控说明.md](./期权开平仓与监控说明.md)** · 线上 `/options/guide`.
---
### 5.3 企业微信推送(起止必发)
| 时机 | 是否必发 | 内容要点 |
|------|----------|----------|
| **计划开始**(开仓成功 → `active`) | **必发** | 类型(永期/期期)、标的方向、关键价位、张数/保费、计划 id |
| **计划结束** | **必发** | 结束原因、`realized_pnl_total`、分项(永续/期权)、是否止盈/止损/到期亏损 |
| 半腿失败 / 强平失败 | 必发告警 | 便于人工介入 |
| 目标价平掉盈利腿(期期中间态) | 建议发 | 注明亏损腿仍持有 |
结束推送触发点与「算结束」一致:永期止盈、永期止损、期期到期收口(含无盈利总亏)、人工结束等.
---
## 6. 情景测算(开仓前必显)
### 6.1 永期
| 情景 | 含义 |
|------|------|
| 止盈 | 永续到 TP 的盈利 − 期权保费(期权按不强制平时的损耗估算) |
| 宽止损 | 永续到 SL 的亏损 + 期权平仓估值(强制平,用 mark/买一估算) |
| 到期横盘 | 永续≈0 + 期权权利金全损 |
| 价格扫描 | index ± 若干档合计 |
核心输出:**宽止损合计亏损**(人工评估是否开仓).
### 6.2 期期
| 情景 | 含义 |
|------|------|
| 到达 S\* | 盈利腿兑现估值 − 已付总保费中亏损腿残留 |
| 到期横盘 | 双腿权利金近似全损 |
| 到期大涨/大跌 | 结算内在价值 |
---
## 7. 数据来源(行情自动)
| 侧 | 来源 |
|----|------|
| 永续行情/规格 | OKX 子账户 ccxt:ticker + 现有 `/api/hub/market` 规格逻辑 |
| 期权链 | `build_option_chain` / `/api/options/chain`(本实例直连,无需中控代理) |
| 指数价 | 期权 `index_px`,左右对齐 |
报价刷新:页面手动刷新 + 计划编辑态可选 10~30s 自动刷新.
---
## 8. 自动开仓编排
### 8.1 永期(仅全仓)
建议默认顺序:**先期权、后永续**(期权失败成本低;永续失败则提示处理刚开的期权).
```
校验 full_margin + LIVE + 无冲突计划
→ 期权限价买入(卖一)
→ 永续全仓张数市价开仓 + 挂交易所 TP/SL
→ 写 hedge_plans / legs,状态 active
```
部分失败补偿(最小集):
| 情况 | 动作 |
|------|------|
| 期权成、永续败 | 告警;建议自动平期权(可配置)或转人工 |
| 永续成、期权败 | 告警;可选撤永续或重试期权;计划标 `partial` |
### 8.2 期期(全仓与非全仓均可开)
```
校验 LIVE + 期权资金
→ 腿1 限价买
→ 腿2 限价买
→ active;记录 target_price S*
```
两腿间勿留长时间单腿敞口;第二腿失败则标 `partial` 并告警.
---
## 9. 状态机与冲突
```
draft → opening → active → closing → closed
↘ partial / failed
draft → cancelled
```
冲突规则:
- **同标的同时至多 1 条 active 永期计划**(全局可 `MAX_ACTIVE_HEDGE_PLANS`).
- 永期 active 时与全仓「单仓」一致:**不与额外永续仓并存**(启动前校验无其它持仓,或本计划即为该仓).
- 期权页对手动平「计划绑定 inst」应提示归属对冲计划.
---
## 10. 历史记录、统计与复盘(独立)
**入口:** OKX 顶栏 **「对冲计划」** 页内三个 Tab(不单开顶栏项):
| Tab | 路由建议 | 内容 |
|-----|----------|------|
| **计划** | `/hedge-plan` | 新建 / 草稿 / 进行中 |
| **历史** | `/hedge-plan?tab=history` | 已结束与取消的计划列表 + 详情复盘 |
| **统计** | `/hedge-plan?tab=stats` | 独立统计看板 |
**不得**并入普通「交易记录与复盘」`/records`、全站「统计分析」`/stats`、策略交易记录.
腿可可选关联 `options_trades` / 监控 id,但 **计划合计盈亏与胜率只读本模块表**.
币种展示约定:永续腿 USDT、期权腿 USDC;合计列标注 **「≈U(1:1)」**,不做实时汇率换算.
---
### 10.1 数据落库
库文件:OKX 实例 `crypto.db`(与其它表同库).
#### `hedge_plans`(一条计划)
| 字段 | 类型建议 | 说明 |
|------|----------|------|
| `id` | INTEGER PK | |
| `plan_type` | TEXT | `perp_options` 永期 / `options_options` 期期 |
| `status` | TEXT | draft / opening / active / closing / closed / partial / failed / cancelled |
| `underlying` | TEXT | BTC / ETH |
| `direction` | TEXT | 永期:long/short;期期可空 |
| `entry_mark` | REAL | 开仓参考价(标记/指数快照) |
| `tp` | REAL | 永期止盈价;可空 |
| `sl` | REAL | 永期止损价;可空 |
| `target_price` | REAL | 期期目标价 S\*;可空 |
| `sizing_mode_at_open` | TEXT | 开仓时 `risk`/`full_margin` 快照 |
| `perp_size` | REAL | 永期张数/币量快照;期期空 |
| `margin` | REAL | 占用保证金快照 |
| `leverage` | REAL | 杠杆快照 |
| `premium_total` | REAL | 期权已付权利金合计(USDC) |
| `realized_pnl_perp` | REAL | 永续已实现(USDT);止盈为正,止损为负 |
| `realized_pnl_options` | REAL | 期权账:止盈场景记 **−权利金**;止损场景记 **强平真实盈亏** |
| `realized_pnl_total` | REAL | 见 §5.1 / §5.2 公式;统计与微信共用此值 |
| `stats_bucket` | TEXT | 可选冗余:`tp` / `sl` / `oo_expiry_loss` / `oo_target` / `other` 便于统计筛选 |
| `close_reason` | TEXT | 见下表枚举 |
| `wechat_start_sent` | INTEGER | 开仓推送是否已发 |
| `wechat_end_sent` | INTEGER | 结束推送是否已发 |
| `note` | TEXT | 人工复盘短评 |
| `created_at` | TEXT | |
| `opened_at` | TEXT | 首次腿成交时间 |
| `closed_at` | TEXT | **计划结束时间**(止盈/止损/到期收口等) |
| `preview_json` | TEXT | 开仓前情景测算快照(可选) |
**`close_reason` 枚举**
| 值 | 含义 | 是否算计划结束 | 合计口径 |
|----|------|----------------|----------|
| `perp_tp` | 永续止盈 | **是**(立刻 closed) | **止盈盈利 权利金** |
| `perp_sl` | 永续止损 + 期权强制平 | **是** | **期权盈利 永续亏损** |
| `target_win_leg` | 期期已平盈利腿(中间态可暂不 closed) | 腿未齐前可不结束 | 待亏损腿到期后定合计 |
| `oo_expiry_loss` | 期期到期且合计无盈利 | **是** | **总亏损**(settled ≤ 0,常 ≈ −保费) |
| `oo_expiry_win` | 期期到期合计仍盈利 | **是** | 实际到期合计 |
| `expiry` | 其它到期收口 | **是** | 实际结算 |
| `manual` | 人工结束 | **是** | 按当时已实现 |
| `partial_fail` | 半腿失败收尾 | **是** | 按补偿结果 |
| `cancelled` | 未真正开仓取消 | 是(无盈亏) | 0 |
说明:止盈结束时期权腿可标 `hold_to_expiry`/`orphaned_after_tp`,**计划已 closed**,后续期权盈亏不回写 `realized_pnl_total`.
#### `hedge_plan_legs`(一条腿)
| 字段 | 类型建议 | 说明 |
|------|----------|------|
| `id` | INTEGER PK | |
| `plan_id` | INTEGER FK | |
| `leg_role` | TEXT | `perp` / `option_hedge` / `option_a` / `option_b` |
| `symbol``inst_id` | TEXT | 永续符号或期权合约 id |
| `opt_type` | TEXT | C/P;永续空 |
| `strike` | REAL | 期权行权价 |
| `side` | TEXT | long/short 或 buy |
| `size` | REAL | 张数或币量 |
| `avg_open` | REAL | 开仓均价/权利金单价 |
| `premium` | REAL | 该腿已付权利金(期权) |
| `status` | TEXT | open / closed / hold_to_expiry |
| `linked_monitor_id` | INTEGER | 可选,永续监控 |
| `options_trade_id` | INTEGER | 可选,期权成交表 |
| `realized_pnl` | REAL | 该腿已实现 |
| `close_reason` | TEXT | 腿级原因 |
| `opened_at` / `closed_at` | TEXT | |
---
### 10.2 历史列表(列定义)
筛选:**类型**(全部/永期/期期)、**状态**、**标的**、**日期**(按 `opened_at``closed_at`).
| 列 | 来源 | 展示 |
|----|------|------|
| ID | id | `#12` |
| 类型 | plan_type | 永期对冲 / 期期对冲 |
| 标的 | underlying + direction | 如 `ETH 多` / `ETH 双买` |
| 状态 | status | 中文标签 |
| 开仓时间 | opened_at | |
| 结束时间 | closed_at | 进行中显示 — |
| 平仓原因 | close_reason | 中文(止盈离场/止损联动平/目标价平盈利腿/到期…) |
| 保费 | premium_total | `x.xx USDC` |
| 合计盈亏 | realized_pnl_total | 着色 +/- ,单位 ≈U |
| 腿摘要 | legs | 如 `永续✓ · Put持仓` / `Call已平 · Put到期` |
| 操作 | | 详情 |
行操作:**详情**(主)、可选「补写短评」.
---
### 10.3 计划详情 / 复盘页(字段)
从历史点进去的详情页 = **主复盘面**,分块如下.
#### A. 计划摘要
| 项 | 字段 |
|----|------|
| 类型 / 标的 / 方向 | plan_type, underlying, direction |
| 状态 / 平仓原因 | status, close_reason |
| 时间线 | created_at → opened_at → closed_at |
| 开仓时计仓 | sizing_mode_at_open, margin, leverage, perp_size |
| 关键价位 | entry_mark, tp, sl(永期), target_price(期期) |
| 盈亏 | realized_pnl_perp / realized_pnl_options / realized_pnl_total |
| 开仓情景快照 | preview_json 折叠展示(止盈合计/宽止损合计等) |
#### B. 腿明细表
| 列 | 说明 |
|----|------|
| 角色 | 永续 / 保险期权 / 期期腿A/B |
| 合约 | symbol / inst_id |
| 数量 | size |
| 开仓价/保费 | avg_open, premium |
| 状态 | open / closed / 持有至到期 |
| 盈亏 | realized_pnl |
| 平仓原因 | close_reason |
| 关联 | 链到期权成交或监控(有则显示) |
#### C. 复盘短评(必做入口)
| 项 | 说明 |
|----|------|
| `note` | 多行文本,可空;保存 `PATCH /api/hedge-plan/<id>/note` |
| 提示文案 | 建议写:开仓理由、结果是否符合情景测算、下次调整 |
**不做(本期):** 复盘截图上传、填入「交易记录与复盘」表单、纳入 AI 日/周复盘.
**可后置:** 以计划摘要生成 AI 点评(独立按钮,不写进 trade_records).
#### D. 终态示例文案(便于复盘理解)
| 场景 | 详情页状态说明 | 合计 |
|------|----------------|------|
| 永期止盈 | 「计划已结束(止盈);期权腿可不强平,账上已扣全部权利金」 | 止盈盈利 − 权利金 |
| 永期止损 + 期权已强平 | 「计划已结束(止损保护:期权已联动平仓)」 | 期权盈利 − 永续亏损 |
| 期期到期无盈利 | 「计划已结束(到期无盈利)」 | 总亏损(计入统计) |
| 期期达 S\* 后亏损腿仍持有 | 「盈利腿已平;待亏损腿到期后结账」 | 暂不入 closed 统计,或单独「收尾中」 |
---
### 10.4 统计页(独立看板)
**筛选:** 日期区间、类型(全部/永期/期期)、标的、结束桶(`tp`/`sl`/`oo_expiry_loss`/…).
**聚合规则:**`status=closed`;胜场 = `realized_pnl_total > 0`.
#### 永期口径(冻结)
| 统计桶 | `close_reason` | 单笔盈亏公式 | 汇总 |
|--------|----------------|--------------|------|
| **止盈统计** | `perp_tp` | **止盈盈利 期权权利金** | sum / 笔数 / 胜率 |
| **止损统计** | `perp_sl` | **期权盈利 永续亏损** | sum / 笔数 /「保护后净亏」均值 |
实现校验示例:
```
# 止盈
realized_pnl_total = pnl_perp_tp - premium_total
# 止损(亏损额取绝对值)
realized_pnl_total = pnl_option_close - abs(pnl_perp_sl)
# 等价有符号: pnl_option_close + pnl_perp_sl(后者为负)
```
#### 期期口径(冻结)
| 统计桶 | 条件 | 单笔盈亏 |
|--------|------|----------|
| **到期无盈利** | 到期收口且合计 ≤ 0 | **总亏损**写入 `realized_pnl_total`(负值),计入区间净亏与「到期亏损」汇总 |
| 目标价路径 | 盈利腿已平 + 亏损腿到期后 | 两腿 realized 之和 |
| 到期仍盈利 | 合计 &gt; 0 | 实际结算合计 |
#### 总览卡片
| 指标 | 计算 |
|------|------|
| 计划笔数 | count(closed) |
| 胜率 | 胜场 / 笔数 |
| 区间净盈亏 | sum(realized_pnl_total) |
| 止盈桶净盈亏 | sum where stats_bucket=tp |
| 止损桶净盈亏 | sum where stats_bucket=sl |
| 期期到期亏损合计 | sum where oo_expiry_loss(绝对值或带符号合计) |
| 总保费支出 | sum(premium_total) |
| 平均持仓时长 | avg(closed_at opened_at) |
#### 分类型卡片
永期、期期各一套:笔数、胜率、净盈亏、平均保费;永期再拆 **止盈桶 / 止损桶**.
#### 退出结构
| 指标 | 过滤 |
|------|------|
| 止盈结束笔数 | `perp_tp` |
| 止损结束笔数 | `perp_sl` |
| 期期到期无盈利笔数 | `oo_expiry_loss` |
| 目标价路径完结 | 含 `target_win_leg` 后收尾 |
| 半腿/失败 | `partial_fail` / failed |
#### 简易表(可选)
最近 N 条已结束计划迷你列表,点击跳详情.
**导出(P5 可选):** CSV.
---
### 10.5 与现有页面关系
| 现有页 | 关系 |
|--------|------|
| 交易记录与复盘 | **不写入**;永续腿若系统仍落 `trade_records`,可标记来源「对冲计划#id」,但人工复盘以对冲详情为准 |
| 统计分析 | **不合并**对冲净盈亏到全站数字(避免重复或口径混乱) |
| 期权页成交/持仓 | 腿 `options_trade_id` 可跳转对照;期权页仍可看单腿 |
| 中控 | V1 不聚合;V2 可选只读摘要 |
---
### 10.6 API(历史 / 统计 / 复盘)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/hedge-plan/list` | 进行中+草稿;`status` 过滤 |
| GET | `/api/hedge-plan/history` | 已结束列表;类型/日期/标的 |
| GET | `/api/hedge-plan/<id>` | 详情 = 计划 + legs + note + preview |
| PATCH | `/api/hedge-plan/<id>/note` | 保存复盘短评 |
| GET | `/api/hedge-plan/stats` | query:`from`,`to`,`plan_type`,`underlying` → 总览+分类型+退出结构 |
---
## 11. 监控线程
`crypto_okx` 同进程内新增 **`hedge_plan_monitor_loop`**(可与 `options_monitor_loop` 并列):
| 职责 | |
|------|--|
| 永期 | 侦测永续 TP/SL → 按 §5.1 结束计划并结账;SL 时强制平期权 |
| 期期 | 侦测价触 S\* → 平盈利腿;到期无盈利 → 结束并记总亏损 |
| 微信 | **开始必推、结束必推**(§5.3);半腿/强平失败告警 |
| 幂等 | `wechat_start_sent` / `wechat_end_sent` 防重复推送 |
---
## 12. 配置项与前端 env 页
对冲相关开关 **一律在 OKX 实例「env 配置」页维护**,不要求 SSH 改 `.env`.
实现对齐现有白名单模式(`lib/env/env_ui_manifest.py` 的「期权账户」分组).
### 12.1 前端分组
在 env 配置页新增独立卡片,标题 **「对冲计划」**:
- **仅 OKX** 展示(Binance/Gate 不出现)
- 放在 **「期权账户」下方**(依赖期权模块)
- 卡片说明文案建议:
- 永期开仓还要求「交易执行」里计仓模式为 **全仓**(`POSITION_SIZING_MODE=full_margin`)
- 真实下单还与「交易所与实盘」→ `LIVE_TRADING_ENABLED`、本卡片 `HEDGE_PLAN_LIVE_ORDER` 同时开启
- `HEDGE_PLAN_ENABLED` 关闭时隐藏顶栏「对冲计划」并拒绝启动计划
### 12.2 本分组字段(前端可配)
| 变量 | 前端标签 | 默认 | 控件 | 热更新 | 说明 |
|------|----------|------|------|--------|------|
| `HEDGE_PLAN_ENABLED` | 启用对冲计划 | false | bool | 热更优先 | 总开关:导航 + API |
| `HEDGE_PLAN_LIVE_ORDER` | 允许对冲真实下单 | false | bool | 热更 | 关则只测算/草稿 |
| `HEDGE_PLAN_OPEN_ORDER` | 永期开仓顺序 | options_first | select:`options_first`/`perp_first` | 热更 | 默认先期权后永续 |
| `HEDGE_PLAN_ON_PERP_SL_CLOSE_OPTIONS` | 永期止损后强制平期权 | true | bool | 热更 | **保护机制,默认 true** |
| `HEDGE_PLAN_ON_PERP_TP_CLOSE_OPTIONS` | 永期止盈后强制平期权 | false | bool | 热更 | **默认 false,保险腿不平** |
| `HEDGE_PLAN_OO_CLOSE_WINNER_ONLY` | 期期只平盈利腿 | true | bool | 热更 | 达目标价只平盈利方 |
| `MAX_ACTIVE_HEDGE_PLANS` | 最大同时活跃计划数 | 1 | number | 热更 | 建议保持 1 |
| `HEDGE_PLAN_MONITOR_POLL_SECONDS` | 对冲监控轮询(秒) | 15 | number | 热更 | 侦测 TP/SL/目标价 |
| `HEDGE_PLAN_PARTIAL_AUTO_CLOSE_OPTION` | 半腿失败时自动平期权 | true | bool | 热更 | 期权成、永续败时的补偿 |
**不放入本分组、沿用已有卡片:**
| 已有位置 | 键 | 对冲用途 |
|----------|-----|----------|
| 交易执行 | `POSITION_SIZING_MODE` | 全仓才允许永期开仓 |
| 交易执行 | `FULL_MARGIN_BUFFER_RATIO` | 默认 0.98 |
| 交易执行 | `BTC_LEVERAGE` | BTC/ETH 档(默认 10) |
| 交易所与实盘 | `LIVE_TRADING_ENABLED` | 总实盘门 |
| 期权账户 | `OKX_OPTIONS_*` | 期权 API、预算、标的 |
### 12.3 `.env.example` 片段(实现时写入 OKX)
```env
# --- 对冲计划(仅 OKX;前端 env「对冲计划」) ---
HEDGE_PLAN_ENABLED=false
HEDGE_PLAN_LIVE_ORDER=false
HEDGE_PLAN_OPEN_ORDER=options_first
HEDGE_PLAN_ON_PERP_SL_CLOSE_OPTIONS=true
HEDGE_PLAN_ON_PERP_TP_CLOSE_OPTIONS=false
HEDGE_PLAN_OO_CLOSE_WINNER_ONLY=true
MAX_ACTIVE_HEDGE_PLANS=1
HEDGE_PLAN_MONITOR_POLL_SECONDS=15
HEDGE_PLAN_PARTIAL_AUTO_CLOSE_OPTION=true
```
### 12.4 编码触点
| 文件 | 改动 |
|------|------|
| `lib/env/env_ui_manifest.py` | `_HEDGE_PLAN_SECTION`,`exchanges={"okx"}`,接入 `ui_sections_for_exchange` |
| `crypto_monitor_okx/.env.example` | 增加上表键与分组注释 |
| `lib/env/env_schema.py` | 纳入 `HOT_RELOAD_EXACT`(及必要时重启列表) |
| `docs/env配置说明.md` | 上线时补「对冲计划」小节 |
推荐分期:**P0 先做 env 白名单 + 开关可读**,页面按 `HEDGE_PLAN_ENABLED` 显隐导航.
---
## 13. 前端与路由(实现要点)
- 导航:OKX 实例顶栏 **「对冲计划」**(display prefs 可加 `show_nav_hedge_plan`).
- 路由建议:`/hedge-plan`(主)、`/hedge-plan/history``/hedge-plan/stats`(或单页 Tab).
- 模板/静态:`lib/options` 旁新增 `lib/hedge_plan/`(或 `lib/hedge/`),复用:
- 期权链 CSS/T 型渲染思路(`options_panel.js` / `options-strike-table--t`)
- `compute_full_margin_sizing` / `position_sizing_lib`
- 永续下单 + TPSL、期权限价开平 API
API 草图:
- `GET /api/hedge-plan/market` — 永续行情 + 全仓试算
- `GET /api/hedge-plan/options-chain` — 期权链
- `POST /api/hedge-plan/preview` — 情景测算
- `GET /api/hedge-plan/list` / `history` / `<id>` / `stats`
- `PATCH /api/hedge-plan/<id>/note` — 复盘短评
- `POST /api/hedge-plan` — 保存草稿/启动
- `POST /api/hedge-plan/<id>/cancel|close`
非全仓请求启动永期 → `400` 明确:「永期对冲开仓仅全仓模式可用」.
---
## 14. 分期实施
| 阶段 | 交付 | 验收 |
|------|------|------|
| **P0** | env「对冲计划」分组 + 页框 + 行情 + 永期列表/期期 T + 情景测算 + 门禁 | env 可改开关;非全仓无法启动永期;全仓可看建议张数 |
| **P1** | 表结构 + 草稿/列表 | DB 可查 |
| **P2** | 永期自动开仓(全仓) | 双腿成交入计划 |
| **P3** | 监控:止损强制平期权;止盈不平期权 | 用例测 TP/SL 分支 |
| **P4** | 期期开仓 + 目标价只平盈利腿 | 达价仅平一侧 |
| **P5** | 历史列表列 + 详情复盘(note) + 统计看板 + 微信 | 与 /records /stats 隔离;止损/止盈文案可区分 |
建议顺序严格;P3 规则错误会误平保险腿,上线前用 dry-run / paper flags.
---
## 15. 与现有文档关系
| 文档 | 关系 |
|------|------|
| [期权对冲方案分析.md](./期权对冲方案分析.md) | 策略观念;本模块是其「计划化 + 自动执行」实现 |
| [对冲计划策略与P0校验.md](./对冲计划策略与P0校验.md) | P0 交付与口径校验 |
| [期权方案.md](./期权方案.md) / [期权用法.md](./期权用法.md) | 期权 API、仅买方、限价规则必须遵守 |
| [期权开平仓与监控说明.md](./期权开平仓与监控说明.md) | 买一平仓、门控、监控与风险;线上 `/options/guide` |
| [position-sizing-mode.md](./position-sizing-mode.md) | 全仓公式与缓冲 0.98 |
本模块上线后,可在《期权对冲方案分析》末尾增加「系统对冲计划」链接指向本文.
---
## 16. 已拍板规则摘要(校验清单)
- [x] 放在 **OKX 实例**,名 **永期对冲 / 期期对冲**
- [x] 永期止盈 → **期权不强制平**,但 **计划算结束**;统计 = **止盈盈利 权利金**
- [x] 永期止损 → **期权必须强制平**,计划结束;统计 = **期权盈利 永续亏损**
- [x] 期期按目标价 → **只平盈利方**;到期无盈利 → **算结束并统计总亏损**
- [x] 对冲计划 **开始与结束均企业微信推送**
- [x] **独立历史 + 独立统计 + 计划详情复盘**(短评 note;不进普通交易复盘)
- [x] 永期开仓 **仅全仓**;非全仓永期只算账
- [x] 非全仓允许 **期期**开仓;全仓永期+期期均可
- [x] 永期张数:**ETH/BTC 10x 全仓 × 0.98**,先算盈亏再选期权
- [x] 行情自动;永期期权 **列表式**;期期 **T 型**
- [x] 对冲开关在前端 **env 配置 →「对冲计划」** 维护(仅 OKX);计仓/杠杆/期权 API 复用已有分组
- [x] 期权腿实盘平仓:**禁市价、只锁买一、分批;流动性/2×门控见开平仓说明**
---
## 17. 免责与边界
- 双账户非原子成交,存在半腿风险.
- 止盈结束账上按权利金全额计成本;期权若仍持仓,后续行情 **不再改计划合计**,属设计意图.
- 止盈后期权可能继续损耗直至到期,与「计划已结束」并存.
- 买方权利金可能全部损失;期期到期无盈利记总亏损,属设计意图.
- 本文不构成投资建议.
-109
View File
@@ -1,109 +0,0 @@
# 对冲计划策略说明与 P0 校验
> 配套实现方案:[对冲计划开发方案.md](./对冲计划开发方案.md)
> 本文记录 **策略口径** 与 **P0 代码校验**,确认可继续 P1+.
---
## 1. 策略摘要
| 类型 | 账户 | 作用 |
|------|------|------|
| **永期对冲** | 永续子账户 + 期权主账户买方 | 全仓做方向,期权买保险 |
| **期期对冲** | 仅期权主账户双买方 | 目标价兑现盈利腿,亏损腿到期 |
### 永期结束与统计
| 事件 | 期权处理 | 计划 | 统计公式 |
|------|----------|------|----------|
| 止盈 | 不强平 | **结束** | **止盈盈利 权利金** |
| 止损 | **强制平** | **结束** | **期权盈利 永续亏损**(有符号相加) |
### 期期结束与统计
| 事件 | 处理 | 统计 |
|------|------|------|
| 达目标价 | 只平盈利腿 | 待亏损腿到期后结账 |
| 到期无盈利 | **结束** | **总亏损** |
起止均企业微信推送(P2+ 监控落地后再接).
### 门禁
- 永期开仓:**仅** `POSITION_SIZING_MODE=full_margin`
- 非全仓:永期可测算不可开;期期 P0 起可测算(开仓后续版本)
- env:OKX「对冲计划」分组;须 `HEDGE_PLAN_ENABLED=true` 才显示导航
---
## 2. P0 已交付
| 项 | 状态 |
|----|------|
| env 白名单「对冲计划」9 字段 | 有 |
| OKX `.env.example` 字段 | 有 |
| `/hedge-plan` 页(永期列表 / 期期 T) | 有 |
| `/api/hedge-plan/market|options-chain|preview|gates` | 有 |
| 全仓建议张数(可用×0.98×10x) | 有 |
| 情景测算止盈/止损口径 | 有 |
| 启动开仓 | **禁用**(明示 P0) |
| 历史/统计/监控/微信 | **未做**(P1P5) |
关键文件:
- `lib/hedge_plan/hedge_plan_calc_lib.py`
- `lib/hedge_plan/hedge_plan_register.py`
- `lib/hedge_plan/templates/hedge_plan_panel.html`
- `lib/common/static/hedge_plan.js`
- `tests/test_hedge_plan_calc.py`
---
## 3. 校验清单(可行性)
### 计算口径
```
止盈: perp_pnl(tp) - premium
止损: option_expiry_pnl(spot=sl) + perp_pnl(sl)
期期到期无盈利: expiry_flat_total <= 0 → 记总亏损
```
单测覆盖:`tests/test_hedge_plan_calc.py`.
### 门禁
- `risk` + 永期 → `can_start=false`,文案含「全仓」
- `HEDGE_PLAN_ENABLED=false` → 导航隐藏(服务端 template 读 env)
### 行情
- 永续:`exchange.fetch_ticker` + `get_available_trading_usdt` + `compute_full_margin_sizing`
- 期权:`build_option_chain`(与期权页同源)
### 已知边界(非 P0 bug)
1. 建议张数未强制 `amount_to_precision`(开仓阶段再对齐交易所精度).
2. 止盈账扣全额权利金,与期权是否仍持仓无关(策略如此).
3. 热更新 `HEDGE_PLAN_ENABLED` 后需刷新页面才显隐导航.
4. 嵌入壳 Tab 已注册 `hedge_plan`;中控能力勾选若需显式「对冲」可后续加.
---
## 4. 服务器启用步骤
```bash
# env 配置页 → 对冲计划 → HEDGE_PLAN_ENABLED=true → 保存
# 或服务器:
cd /opt/crypto_monitor_user/crypto_monitor_okx
# 确保 .env 含 HEDGE_PLAN_* 字段后
pm2 restart crypto_okx --update-env
```
验收:
1. 顶栏出现「对冲计划」
2. 永期可见建议张数(全仓时)
3. 点「计算」得到止盈/止损合计
4. 「启动计划」禁用
5. env 页可见「对冲计划」分组
-464
View File
@@ -1,464 +0,0 @@
# 更新文档(仓库级)
自 2026-07-16 起:**凡修改或更新功能,必须在本文件追加一条记录**,写明原因、改动位置、目标与交付验收。实例目录下旧版说明可保留,但共享逻辑(`lib/`)以本文为准。
---
## 2026-07-17 · 修复 pip>=26 部署依赖安装失败
### 修改原因
单所验证时 `setup_env` 升级到 pip 26 后,`--progress-bar ascii` 非法,依赖安装中断;腾讯源偶发空索引也会导致一次失败.
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `deploy/lib/common.sh` | `pip_progress_bar_arg` 改为 `on`(兼容 pip 26);`pip install``--retries 5` |
### 达成的目标
非 TTY / SSH 下一键安装可顺利 `pip install -r`.
### 交付之后的验收
`bash deploy/lib/install.sh --exchange okx` 能过依赖安装并起 `crypto_okx`.
---
## 2026-07-17 · 一键部署支持单所仅实例(不含中控)
### 修改原因
新机或专用机只需跑某一所 Flask 时,全套 7 进程过重;希望菜单可直接选「仅 OKX / Binance / Gate」,不起中控与 agent.
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `deploy/manage.sh` | 菜单增加 4/5/6 单所实例入口 |
| `deploy/lib/install.sh` | `--exchange okx\|binance\|gate` 单所流水线 |
| `deploy/pm2_start_all.sh` | `--only` 只启对应 ecosystem |
| `deploy/lib/common.sh` | 单所验收 / 完成提示 / 辅助映射 |
| `deploy/README.md` | 菜单说明 |
### 达成的目标
1. 选 4/5/6: `setup_env --only <所>` + 仅启动该所 PM2,不含 hub/agent.
2. 选 1: 全套行为与改前一致.
3. 仍共用整仓 `/opt/crypto_monitor_user`,不拆仓库.
### 交付之后的验收
1. 菜单可见 4/5/6.
2. `bash deploy/lib/install.sh --exchange okx` 后仅 `crypto_okx` 起来,`:5004` 可访问.
3. 全套选项 1 仍可部署三所+中控.
---
## 2026-07-17 · 永续估算盈亏统一扣双边 taker 手续费
### 修改原因
中控/实例「盈利金额」、微信推送「本单盈亏」、交易记录 `pnl_amount` 使用价差毛利,未扣开平手续费,与交易所实际净盈亏及盈亏比体感偏差较大。
### 定稿口径
| 项 | 约定 |
|----|------|
| 浮盈亏 | 仍读交易所,不改 |
| 费率 | taker 单边 **0.05%**`PERP_TAKER_FEE_RATE`,默认 `0.0005`),开+平双边 |
| 净盈亏 | 毛利 − 开仓名义×费率 − 平仓名义×费率(不考虑滑点) |
| RR | 净盈利 / 原风险(风险侧加费第二步再做) |
| 历史记录 | 不回算 |
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `lib/trade/trade_fee_lib.py` | 新增公共扣费 / 净盈亏 |
| `lib/strategy/strategy_roll_ui_lib.py` | `reward_at_tp_usdt` → 净盈利 |
| `lib/strategy/strategy_roll_lib.py` | 同上 |
| `lib/strategy/strategy_trend_lib.py` | `calc_tp_profit_usdt` → 净盈利 |
| `lib/hub/hub_calculator_lib.py` | 滚仓预览止盈盈利 / 首仓盈利扣费;RR 跟净盈利 |
| `crypto_monitor_okx/app.py` | `calc_pnl` → 净盈亏(推送/记账) |
| `crypto_monitor_gate/app.py` | 同上 |
| `crypto_monitor_binance/app.py` | `calc_pnl` / 成交回退扣费;income 真费路径优先不改 |
| `tests/test_trade_fee_lib.py` | 新增 |
| `tests/test_strategy_roll_ui_lib.py` | 断言改净额 |
| `tests/test_order_monitor_display_lib.py` | 断言改净额 |
### 达成的目标
1. 中控持仓「盈利金额」、实例「盈利金额」、计算器止盈盈利、趋势/滚仓预览一致为净盈亏。
2. 微信推送与新建交易记录的 `pnl_amount` 与上述估算口径一致。
3. 币安若能拉到 income 净额(已含真实手续费)仍优先用交易所数。
4. 浮盈亏展示仍跟交易所。
### 交付之后的验收
1. 同一笔持仓:中控盈利金额 ≈ 实例盈利金额(均为扣费后)。
2. 平仓推送「本单盈亏」与新写入记录接近,不再明显大于交易所净利。
3. 浮盈亏与交易所 App 一致(本改不动)。
4. 单测:`python -m unittest tests.test_trade_fee_lib tests.test_strategy_roll_ui_lib tests.test_order_monitor_display_lib tests.test_trend_preview_tp -v` 通过。
---
## 2026-07-16 · 计算器左侧 Tab + 三行输入
### 修改原因
电脑端顶部横向 Tab 与纵向表单不协调,输入项行数偏多。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/index.html` | 增加计算器工作区容器,更新 CSS 缓存 |
| `manual_trading_hub/static/app.css` | 电脑端 Tab 改为左侧竖排;≥1200px 基础输入改为五列、三行排列 |
### 达成的目标
电脑端左侧切换计算器,右侧集中填写;宽屏基础输入压缩为三行。
### 交付之后的验收
1. 电脑端两个计算器 Tab 位于左侧。
2. 1920px 宽屏基础输入区为三行。
3. Tab 切换和计算功能正常;手机端保持原布局。
---
## 2026-07-16 · 电脑端计算器改为 Tab 切换
### 修改原因
电脑端同时并排显示趋势回调与滚仓计算器,横向空间利用和操作聚焦不理想。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/index.html` | 计算器 Tab 增加电脑端完整名称,更新 CSS 缓存 |
| `manual_trading_hub/static/app.css` | 电脑端显示 Tab、单列展示当前计算器;手机端沿用原紧凑 Tab |
### 达成的目标
电脑端通过「趋势回调计算器 / 滚仓计算器」Tab 切换,一次只显示一个计算器。
### 交付之后的验收
1. 电脑端默认显示趋势回调计算器。
2. 点击滚仓计算器 Tab 后只显示滚仓计算器,切回正常。
3. 手机端原有计算器 Tab 样式和交互不变。
---
## 2026-07-16 · 资金概况移除累计盈亏长条
### 修改原因
「同步快照」后方的累计盈亏长条与下方汇总卡片重复,占用横向空间。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/index.html` | 删除资金工具栏中的累计盈亏/较昨日长条 |
### 达成的目标
资金概况工具栏仅保留「同步快照」和状态信息,累计盈亏继续由下方汇总卡展示。
### 交付之后的验收
1. 「同步快照」按钮后不再显示累计盈亏长条。
2. 下方累计盈亏、较昨日汇总卡数据正常显示。
---
## 2026-07-16 · 今日统计默认折叠 + 交易所标题行下移
### 修改原因
今日统计常占一行挤空间;默认只需看总浮盈亏。交易所卡标题/打开实例贴顶过紧。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | 今日统计默认折叠只露总浮盈亏;展开显示明细;状态写入 localStorage |
| `manual_trading_hub/static/app.css` | 折叠/展开样式;展开后明细字号加大;分栏卡 `card-head` 上内边距加大 |
| `manual_trading_hub/static/index.html` | 缓存 `20260716-hub-stats-fold` |
### 达成的目标
监控区默认更省高;需要时一键展开更大明细;交易所标识行不再贴顶。
### 交付之后的验收
1. 默认只见「今日统计 + 总浮盈亏」与「展开明细」。
2. 点展开后六项明细可见且数字更大。
3. OKX/币安等卡标题与按钮相对顶边有更明显间距。
---
## 2026-07-16 · 监控芯片还原 + 底栏贴底 + 1080p 留白
### 修改原因
「监控位」本意是原先关键位/趋势回调/顺势加仓芯片,不是单独「无监控位」槽;全屏提示须贴卡片最底;1920×1080 两侧需留白,带鱼屏保持现宽。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | 去掉错误的监控位槽;恢复策略芯片(仍隐藏期权 N仓) |
| `manual_trading_hub/static/app.css` | 分栏卡 `card-expand-hint` `margin-top:auto` 贴底;≤2000px 加大左右留白,>2000px 保持 1860 内容宽 |
| `manual_trading_hub/static/index.html` | 缓存 `20260716-hub-chips-margin` |
### 达成的目标
有关键位/趋势/顺势时仍以芯片显示;提示条在卡底;1080p 两侧有留白,带鱼屏观感不变。
### 交付之后的验收
1. 无「监控位 · 0 / 无监控位」区块;有关键位等时出现原芯片样式。
2. 「点击标题栏进入全屏…」贴在各分栏卡最底部。
3. 1920×1080 内容两侧留白明显;带鱼屏内容宽度仍约 1860。
---
## 2026-07-16 · 监控区 2×2 细化(目标监控列/预留行/去平板专属)
### 修改原因
四卡对齐后需:左右等宽;期权表改目标监控列;去掉打开期权页与永续卡「期权 N仓」;合约卡预留仓位+监控位两行并统一全屏提示;多仓时同行左右一起长高;平板改用浏览器 80% 缩放,去掉 hub-tablet 专属样式(手机 UI 不动)。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | 平铺 `monitor-split-2x2`;期权表删指数/到期平衡/平掉回本,加目标监控列(有=绿/无=`—`);去打开期权页;永续卡隐藏期权徽章;预留仓位/监控位槽;去掉 `isTabletLayout` |
| `manual_trading_hub/static/app.css` | 左右 1:1`minmax(min-content,1fr)` 同行同高可外扩;删除全部 `hub-tablet` 规则 |
| `manual_trading_hub/static/index.html` | 缓存 `20260716-hub-2x2-slots` |
### 达成的目标
桌面监控区四卡等宽对齐;期权看目标监控列;永续卡结构为仓位行+监控位行+提示行;≥2 仓左右一起加高;平板不再走单独 CSS。
### 交付之后的验收
1. 左右列等宽;永续卡无「期权 1仓」、无「打开期权页」。
2. 期权表有「目标监控」列,有监控绿色、无则 `—`;无指数/到期平衡/平掉回本。
3. 永续/币安卡可见预留仓位行、监控位行与完整全屏提示文案。
4. 多开仓后该行变高且左右同高;`body``hub-tablet`;手机布局未改。
---
## 2026-07-16 · OKX 拆成永续/期权双卡(2×2 对齐)
### 修改原因
OKX 单卡内嵌永续+期权过高,右侧币安/Gate 两卡对不齐,1080p 观感不协调。按产品建议改为四卡对齐。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | 期权分栏时 OKX 渲染为「·永续」「·期权」两张独立卡;标题与操作按钮按卡片分流 |
| `manual_trading_hub/static/app.css` | 左右列均 `1fr/1fr`,四卡 2×2 等高对齐;卡体内滚 |
| `manual_trading_hub/static/index.html` | 静态资源缓存 `20260716-hub-okx-2x2` |
### 达成的目标
监控区呈现:左上永续 / 左下期权 / 右上币安 / 右下 Gate,四卡对齐。
### 交付之后的验收
1. 桌面监控区可见 `OKX_趋势 · 永续``OKX_趋势 · 期权` 两张独立卡。
2. 四卡与右侧币安、Gate 同行等高,不再一大两小。
3. 点击任一张 OKX 卡标题仍可全屏;期权卡「全平」不重复出现。
---
## 2026-07-16 · 1080p 监控区无持仓空洞收紧
### 修改原因
1920×1080 上一屏适配用 `1fr/1fr` 把永续/分所空卡强行均分拉高,「无持仓」下方大片空洞;带鱼屏尚可,短屏观感差。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.css` | OKX 内卡改为 `auto + 1fr`(永续按内容、期权吃剩余);右侧 Gate/币安改为 `auto auto` 按内容收紧;1080p 短屏左侧略加宽 |
| `manual_trading_hub/static/index.html` | CSS 缓存 `20260716-hub-1080-tight` |
### 达成的目标
无持仓区块不再被拉成半屏空黑;有期权/持仓的区域拿到更多可视高度。
### 交付之后的验收
1. 1920×1080 监控区:永续「无持仓」仅占内容高度,期权表区域明显变高。
2. 右侧币安/Gate 无仓时卡片贴内容,不再卡片内大片空洞。
3. 带鱼屏布局仍可用;持仓变多时右侧列可内滚。
---
## 2026-07-16 · 电脑端误判平板导致发糊
### 修改原因
`isTabletLayout()` 曾用「高度 ≤920 即平板」;1080p 电脑有任务栏/浏览器栏时 `innerHeight` 常落在此区间,桌面被套上平板压缩字号(约 10px),观感发糊发虚。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | 平板判定改为横屏 `7211366 × ≤900` / 竖屏 `≤920 × ≥900`;去掉仅按高度命中 |
| `manual_trading_hub/static/index.html` | JS 缓存 `20260716-hub-desktop-clear` |
### 达成的目标
常规电脑端不再误加 `hub-tablet`,恢复桌面字号与清晰度;真平板视口仍走一屏密度样式。
### 交付之后的验收
1. 1080p/1440p 电脑打开中控,正文与表格清晰,非异常小字。
2. 浏览器开发者工具确认 `body``hub-tablet`(窄窗模拟平板除外)。
3. 平板横/竖仍为一屏密度布局。
---
## 2026-07-16 · 平板一屏密度适配(不裁切)
### 修改原因
平板字号偏大、留白空、卡片半截裁切或底部大片空黑,显得 low;需要「一屏看完」且正文不被拦腰裁掉。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.css` | `hub-tablet`:锁 100dvh;压缩字号/间距;监控区 flex 填满;竖屏 OKX 上 + Gate/币安并排;表体内滚兜底;资金页缩曲线、压汇总数字、分户卡完整可见 |
| `manual_trading_hub/static/index.html` | CSS 缓存 `20260716-hub-tablet-onescreen` |
### 达成的目标
平板监控区/资金概况一屏呈现、信息密度接近桌面;常规持仓与分户名称/余额不被裁半;持仓很多时仅表体内滚。
### 交付之后的验收
1. 平板强制刷新后,监控区三所卡片同屏,余额与持仓列完整可读。
2. 资金概况:四格汇总 + 曲线 + 分户卡同一屏,账户名不被切半。
3. 底部不再大片空黑;桌面大屏一屏规则不受影响。
---
## 2026-07-16 · 平板监控卡片内容裁切修复(已由一屏密度方案取代)
先前改为整页可滚以避免裁切;用户要求改为「一屏 + 不裁切 + 提密度」,由上一条覆盖。
---
## 2026-07-16 · 中控平板一屏适配(2560×1600)
### 修改原因
平板物理分辨率 2560×1600 在 2× 缩放下 CSS 视口约为 **1280×800**,进不了此前桌面规则 `min-width:1600px`,监控/行情/资金仍整页滚动。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | 新增 `isTabletLayout()``hub-tablet` body class |
| `manual_trading_hub/static/app.css` | 一屏适配门槛降为 `min-width:721px` + `min-height:650px`;另增平板矮/窄视口加密度规则 |
| `manual_trading_hub/static/index.html` | 缓存版本 `20260716-hub-fit-tablet` |
### 达成的目标
平板(含 2560×1600@2x)与桌面一样:监控区 / 行情区 / 资金概况尽量一屏、无整页下拉。
### 交付之后的验收
1. 平板横屏打开中控,强制刷新后 body 应有 `hub-tablet`(开发者工具)。
2. 监控区(OKX 一期权 ± 永续空/一仓,另两所各 ≤1 仓):无整页纵向滚动。
3. 行情区、资金概况同屏无整页滚动。
4. 手机(≤720px)仍走 `hub-phone`,不受影响。
---
## 2026-07-16 · 中控三页 1920×1080 一屏显示
### 修改原因
监控区在 OKX「一永续 + 一期权」、另两所各一仓(或空仓)时,以及行情区、资金概况在 1920×1080 下出现整页纵向滚动,无法一屏看完。
### 修改的地方
| 文件 | 改动摘要 |
|------|----------|
| `manual_trading_hub/static/app.js` | `setActiveNav` 增加 `hub-page-monitor` / `hub-page-market` body class |
| `manual_trading_hub/static/app.css` | `@media (min-width:1600px) and (min-height:900px)` 一屏适配:壳层 `100dvh` 不滚动;三页 flex 填满;监控卡片/表格压缩;行情 K 线区 flex 吃剩余高度;资金曲线与分户区压缩 |
| `manual_trading_hub/static/index.html` | `app.css` / `app.js` 缓存版本 `20260716-hub-fit-1080` |
**未改:** 期权开平仓规则、实例交易页、手机端 `hub-phone` 布局。
### 达成的目标
1. **监控区**:桌面大屏下整页无纵向滚动;OKX 左右分栏(永续+期权)与 Binance/Gate 同屏可见。仓位表过长时仅卡片内部滚动。
2. **行情区**:工具条 + K 线同屏,图表占满剩余高度。
3. **资金概况**:统计卡 + 曲线 + 三分户同屏。
### 交付之后的验收(1920×1080,浏览器缩放 100%
1. 打开中控监控区:服务器状态与操作栏保持折叠时,页面**无**浏览器纵向滚动条;OKX 期权 1 仓 + 另两所空仓/各 1 仓均一屏可见。
2. 行情区:加载 BTC 日线后,OHLCV + 图在一屏内,无整页滚动。
3. 资金概况:曲线与三分户卡片同屏,无整页滚动。
4. 窄屏/手机(`hub-phone`)布局不受影响。
5. 展开「服务器状态」后若内容过高,允许监控网格内部滚动,仍尽量避免整页滚动。
---
## 2026-07-16 · 期权/对冲开仓仅认真实卖一深度
### 修改原因
此前报价在无盘口卖一时会用**标记价顶进 `ask`**,界面仍显示「限价买入 @ 卖一」,造成误以为在吃卖一;深度实值合约还容易「链上有 `~` 价、点选却失败或按估算价下单」。需要与产品规则对齐:**开仓只吃真实卖一,且必须有卖一量**。
### 修改的地方(明确清单)
| 文件 | 改动摘要 |
|------|----------|
| `lib/exchange/okx_options_lib.py` | 新增 `option_buy_liquidity_ok` / `cap_option_buy_sheets_to_ask_depth``quote_option_contract` **不再**用 mark 填充开仓 `ask`;返回 `can_open` / `ref_ask` / `open_block_msg` / `ask_source` |
| `lib/options/options_register.py` | `/api/options/quote` 开仓 sizing 仅在 `can_open` 时计算,张数 cap 到卖一深度;`/api/options/open` 服务端再验深度并 cap 张数 |
| `lib/common/static/options_panel.js` | 面板展示参考标记价;无深度禁用开仓按钮与说明文案;开仓前校验 `can_open` |
| `lib/options/templates/options_panel.html` | 提示文案;增加「参考标记价」字段;脚本 `?v=37` |
| `lib/hedge_plan/hedge_plan_orders_lib.py` | **仅** `_buy_option`(买入开仓)同步深度门禁与张数 cap;**未改** `_sell_option` 平仓 |
| `lib/hedge_plan/templates/hedge_plan_panel.html` | 单位说明补充开仓规则 |
| `tests/test_option_buy_liquidity.py` | 新增门禁/深度 cap 单测 |
| `tests/test_hedge_plan_orders.py` | mock 补 `ask_sz`;无深度拒绝 / 深度 cap 用例 |
**铁律:未改动任何平仓规则**(期权买一平仓、`_sell_option`、close_preview / close 执行路径逻辑保持原样;报价里买一仍可用 mark 补展示,仅服务平仓读 bid)。
### 达成的目标
1. 开仓条件:`askPx` 有效 **且** `askSz > 0`
2. 无卖一/无深度:可展示参考标记价 `ref_ask`/`mark`,明确「不可用于开仓」,按钮禁用。
3. 有深度时:限价买 @ 真实卖一;张数不超过卖一深度(向下取整)。
4. 期权面板与对冲计划买入路径规则一致。
### 交付之后的验收
1. **有卖一深度**:选合约 → 卖一显示 `价/量` → 按钮「限价买入 @ 卖一」可点 → 下单张数 ≤ 卖一量。
2. **无卖一或深度为 0**:卖一为 `—`;参考标记价显示 `~xx (不可开仓)`;红色说明含「仅供参考,不可用于开仓」;按钮为「暂无卖一深度,无法开仓」且不可点;直接调 open API 应返回失败文案。
3. **链上 `~` 估算**:仍可浏览;点选后若无真实深度,不得用估算价成交。
4. **平仓**:持仓「买一平仓」行为与改前一致(抽测一条即可)。
5. **对冲计划**:执行买入腿时无深度应失败并提示;有深度 dry_run/实盘张数不超过卖一量。
6. 单测:`python -m pytest tests/test_option_buy_liquidity.py tests/test_hedge_plan_orders.py -q` 通过。
### 未纳入本次(另单)
硬刷新链可能毁掉下单面板、限频 fallback tick、CSS `?v=` 缓存等,见会话审计清单,不在本条范围。
-322
View File
@@ -1,322 +0,0 @@
# 期权对冲方案分析
> 适用范围:OKX **永续子账户**(USDT 本位) + **期权主账户**(USDⓈ 本位买方).
> 本文档为 **策略与操盘说明**,非系统自动下单功能;组合须 **人工** 在永续页与期权页分别执行.
---
## 1. 前提与账户分工
| 维度 | 永续合约(子账户) | 期权(主账户) |
|------|------------------|--------------|
| API | `OKX_API_*` | `OKX_OPTIONS_API_*` |
| 系统页面 | 实盘下单 / 关键位 / 策略 | 期权 |
| 保证金 | USDT | USDC / USDG |
| 本系统能力 | 开平仓、止损、关键位 | **仅买方** 开平仓,无组合单 |
**重要约束:**
- 两套资金 **不自动合并**;对冲是逻辑上的组合,资金与下单 **分账户** 管理.
- 系统 **不支持** 卖方开仓、跨式组合单、自动 Delta 调仓;下文操盘均为 **手工流程**.
- 期权模块默认:≤2 日到期、轻度实值、单笔权利金预算(如 10 USDC).对冲设计需与此预算协调.
---
## 2. 期权 + 永续合约对冲
指用 **期权买方头寸** 去对冲或替代 **永续方向敞口**,降低单边暴跌/暴涨带来的尾部风险,或锁定部分利润.
### 2.1 使用场景
| 场景 | 永续侧状态 | 期权侧动作 | 目的 |
|------|------------|------------|------|
| **保护性 Put** | 子账户 **多头** 永续(策略/关键位持仓) | 主账户买入 **看跌 Put**(轻度实值、近月) | 大跌时 Put 升值,抵消永续浮亏 |
| **看涨保险** | 子账户 **空头** 永续 | 主账户买入 **看涨 Call** | 急涨时 Call 升值,限制空头亏损 |
| **事件前对冲** | 永续有仓,临近 FOMC/CPI/非农 | 临时买 **Put 或 Call**(方向视净敞口) | 降低数据公布瞬间波动伤害 |
| **锁利减仓** | 永续浮盈较大,不愿全平 | 买 **反向期权** 作「便宜保险」 | 保留永续吃趋势,用权利金买回撤保护 |
| **替代硬止损** | 永续止损易被扫或滑点大 | Put/Call 权利金 ≈ 可接受最大额外损失 | 用期权时间价值换「软止损」 |
**不适合:**
- 长期持仓 + 远期期权(本系统偏 ≤2 日 DTE,时间价值流失快).
- 指望「完全对冲」零波动:买方期权有 **Theta 衰减**,永续有 **资金费**,不可能完美镜像.
- 资金不足:期权需先 **USDT→USDC 兑换 + 划转到交易户**,再下单.
### 2.2 案例分析
#### 案例 A:保护性 Put(多头永续 + 买 Put)
**背景**
- 子账户 ETH 永续 **多 0.5 ETH**,均价 3,200,浮盈 +5%.
- 当晚有宏观数据,担心 30 分钟内急跌 3%~8%.
**操作**
1. 永续:维持多单,或略减杠杆(系统「实盘下单」/策略仓).
2. 期权主账户:USDT→USDC→划转到交易户.
3. 期权页:ETH **看跌 Put**,行权价略低于现价(轻度实值),1~2 日到期.
4. 按预算 10 USDC 买满(约 0.0x ETH 名义),记录权利金 **C**.
**结果推演**
| ETH 走势 | 永续盈亏(示意) | Put 盈亏(示意) | 组合效果 |
|----------|----------------|----------------|----------|
| 横盘 | 小亏资金费 | Put 因 Theta 贬值 | 净成本 ≈ 权利金 C |
| 跌 5% | 永续大亏 | Put 明显升值 | 部分对冲,净亏 < 无 Put |
| 涨 3% | 永续盈利 | Put 接近归零 | 永续盈利 − C |
**要点:** 买的是 **保险**,不是赚钱工具;权利金 C 是「保费」.
#### 案例 B:空头永续 + 买 Call
**背景**
- 子账户 BTC 永续 **空 0.02 BTC**,判断短期震荡偏空,但担心消息拉升.
**操作**
-**看涨 Call**(轻度实值、近月),权利金控制在预算内.
**结果推演**
- 下跌:永续盈利,Call 损耗 → 净赚略少于裸空.
- 急涨:永续亏损,Call 盈利 → 涨幅越大对冲越有效.
#### 案例 C:事件窗口「临时对冲」
**背景**
- 永续多仓持有中,事件前 2 小时不想平仓(怕踏空).
**操作**
- 事件前:买小仓位 Put,事件后 1~2 小时内无论盈亏 **平掉 Put**.
- 永续:按原策略止损/止盈,不因期权改变永续规则.
**要点:** 短期 Put 的 Theta 极快;**事件结束尽快平仓**,避免「保险变持仓」.
### 2.3 风险评估
| 风险类型 | 说明 | 等级 |
|----------|------|------|
| **权利金损耗(Theta)** | 买方期权每天衰减;横盘即亏保费 | 高 |
| **对冲比例不足** | 10U 预算买到的名义远小于永续仓位 | 高 |
| **方向错配** | 多头却买 Call、空头却买 Put | 高 |
| **双账户操作延迟** | 永续已亏,期权尚未成交 | 中 |
| **流动性** | 限价未成交,极端行情无法对冲 | 中 |
| **资金费 vs 保费** | 长期持仓资金费 + 反复买 Put 成本叠加 | 中 |
| **汇率/币种** | 永续 USDT、期权 USDC,汇率波动次要 | 低 |
| **API/权限** | 子账户与主账户密钥混用 | 低(配置隔离即可) |
**风险量化思路(手工估算):**
```
可接受保费上限 ≈ 永续名义价值 × 愿意承担的单日额外损失比例
例:0.5 ETH × 3,200 × 0.5% ≈ 8 USDC → 与 OKX_OPTIONS_TRADE_BUDGET_USDC 对齐
```
若保费 << 永续风险敞口,属于 **部分对冲**,需心里有数.
### 2.4 操盘说明(期权 + 永续)
**准备(每次对冲前)**
1. 确认子账户永续:**方向、数量、均价、浮盈亏**(实盘顶栏/持仓).
2. 确认主账户期权:**交易户 USDC 余额** 足够(兑换+划转).
3. 明确本次是 **保护多仓(Put)** 还是 **保护空仓(Call)**.
**执行顺序(推荐)**
```
① 永续侧:确认仓位与风控(止损/关键位)已就绪
② 主账户:资金户 USDT → USDC(币种兑换) → 划转到交易户
③ 期权页:选标的(ETH/BTC) → 到期日(12日) → Call/Put → 轻度实值行权价
④ 限价买入(卖一),成交后记录:张数、权利金、行权价、到期时间
⑤ 企业微信:关注翻倍提醒(浮盈≥100%权利金)作为减仓信号,非必须平永续
```
**平仓/退出**
| 情况 | 永续 | 期权 |
|------|------|------|
| 趋势延续、保险未触发 | 按原策略 | 临近到期或 Theta 损耗大时 **平 Put/Call** |
| 期权浮盈翻倍(系统提醒) | 可选:减永续仓或上移止损 | **平期权锁利**,保留永续 |
| 永续已止损离场 | 无仓 | **立即平期权**,避免裸买权衰减 |
| 事件结束 | 照旧 | 平期权,勿长期持有近月买方 |
**检查清单**
- [ ] 永续方向与期权类型匹配(多→Put,空→Call)
- [ ] 权利金 ≤ 预算,且 ≤ 心理「保费」上限
- [ ] 成交后两边持仓在各自页面可核对
- [ ] 到期日前 24h 评估是否平仓期权
---
## 3. 期权 + 期权对冲
**仅主账户** 内,用两个(或多个)买方期权组合,表达 **波动、方向区间或尾部保护**,不直接动永续仓位.
> 本系统 **仅买方**;下列组合均为 **买 Call + 买 Put** 或 **不同行权价双买**,不含卖权收权利金策略.
### 3.1 使用场景
| 场景 | 组合结构 | 目的 |
|------|----------|------|
| **Long Straddle(双买)** | 同行权附近 **Call + Put** | 赌大波动(突破),不怕方向 |
| **Long Strangle(宽双买)** | OTM **Call + OTM Put** | 降低成本,赌更大波动才盈利 |
| **风险逆转(买方版)** | 轻度 ITM Call + 轻度 ITM Put(不同行权) | 同时防暴涨暴跌(保费更高) |
| **方向 + 尾部** | 主方向 Call(或 Put) + 反向少量 Put(或 Call) | 主观点明确,反向作灾难保险 |
| **到期滚动** | 近月双买 → 波动未出则平掉 → 换远 1 日 | 控制 Theta,需严格纪律 |
**不适合:**
- 预期 **窄幅震荡**(双买最亏 Theta).
- 预算只够一笔 10U(双买需 **两倍保费** 或各减半张数).
- 把双买当「稳赚」:横盘天天亏.
### 3.2 案例分析
#### 案例 D:Long Strangle(赌突破)
**背景**
- 认为 ETH 未来 24~48h 将选方向突破,但不确定涨跌.
- 永续不想开仓,仅用期权表达波动观点.
**操作**
1. 选 12 日到期.
2.**轻度 OTM Call**(行权价略高于现价).
3.**轻度 OTM Put**(行权价略低于现价).
4. 各用约一半预算(如各 5 USDC),总保费 ≈ 10U.
**盈亏示意**
| 市场 | 结果 |
|------|------|
| 横盘 | Call、Put 均衰减 → **最大亏全部保费** |
| 大涨 | Call 盈利可能覆盖 Put 亏损 |
| 大跌 | Put 盈利可能覆盖 Call 亏损 |
**要点:** 需要波动 **幅度** 超过「总保费对应的隐含波动门槛」才划算.
#### 案例 E:主多观点 + 尾部 Put(期权 + 期权)
**背景**
- 强烈看多 24h,但怕黑天鹅砸盘.
**操作**
- 70% 预算买 **Call**(进攻).
- 30% 预算买 **Put**(尾部保险).
**与「永续 + Put」区别**
- 不占用永续保证金,无资金费.
-**无 Delta 线性收益**:涨得慢可能 Call 仍亏 Theta.
#### 案例 F:事件双买
**背景**
- 非农数据公布前后 2h.
**操作**
- 公布前 30min:Strangle 双买.
- 公布后:波动释放则 **平盈利腿 + 平亏损腿**;勿持仓过夜除非仍看好波动.
### 3.3 风险评估
| 风险类型 | 说明 | 等级 |
|----------|------|------|
| **双倍 Theta** | 两条腿同时衰减 | 很高 |
| **预算分裂** | 单腿名义过小,波动不够覆盖成本 | 高 |
| **行权价选错** | Strangle 过宽,突破仍不够回本 | 高 |
| **执行误差** | 两腿须分别下单,一腿成交一腿未成交 | 中 |
| **IV crush** | 事件后隐含波动率骤降,双买同时贬值 | 中 |
| **仅买方限制** | 无法做卖方收窄成本(如 Iron Condor) | 中 |
**与永续对冲对比**
| 维度 | 期权 + 永续 | 期权 + 期权 |
|------|-------------|-------------|
| 资金账户 | 两账户 | 仅主账户 |
| 趋势收益 | 永续线性 | 非线性,近月衰减快 |
| 保费成本 | 永续资金费 + 期权 | 仅期权(常更高) |
| 适合行情 | 有主仓需保 | 无仓赌波动/事件 |
### 3.4 操盘说明(期权 + 期权)
**预算拆分建议**
```
总预算 B (如 10 USDC)
├── 腿 A(主观点):B × 60%70%
└── 腿 B(对冲/反向):B × 30%40%
双买 Strangle:各 50%,但须接受单腿名义减半
```
**执行顺序**
1. 先下 **流动性更好的一腿**(通常轻度 ITM 或更近 ATM),减少单腿敞口时间.
2. 再下第二腿;若第二腿限价未成交,评估是否撤单重报或放弃组合.
3. 记录两笔 `options_trades` 对应关系(备注:组合 ID / 事件名).
**平仓纪律**
- **时间止损:** 距到期 < 12h 且未盈利 → 考虑双平,避免 Theta 加速.
- **盈利止损:** 组合净浮盈达保费 50%~100% → 可分批平(系统翻倍提醒可作参考).
- **单边平仓风险:** 只平盈利腿会留下裸反向腿,除非有意转方向.
---
## 4. 方案选型简表
| 你的状态 | 推荐方案 | 理由 |
|----------|----------|------|
| 子账户已有永续多仓 | **永续 + Put** | 直接保护现有 Delta |
| 子账户已有永续空仓 | **永续 + Call** | 限制逼空风险 |
| 无永续仓,赌大波动 | **期权 Strangle** | 不付资金费,纯波动 |
| 有方向观点,不想开永续 | **Call 或 Put 单腿** | 简单,保费可控 |
| 宏观事件前 | **临时 Put/Call 或双买** | 短持有,事件后平 |
| 长期持仓数月 | 本系统近月买方 **不合适** | Theta 与操作频率不匹配 |
---
## 5. 与本系统功能的衔接
| 功能 | 对冲中的用途 |
|------|--------------|
| 永续「实盘下单 / 关键位 / 策略」 | 建立或管理被对冲的合约仓 |
| 期权页链 + 限价开平仓 | 建立买方保险或双买腿 |
| 系统设置 → 币种兑换 / 划转 | 准备 USDC 权利金 |
| 期权顶栏资金(资金户/交易户) | 检查保费是否足够 |
| 企业微信翻倍提醒 | 期权腿止盈参考,非永续平仓信号 |
| 中控 / 子代理 | **不聚合期权仓**;对冲状态需人工台账 |
**建议人工台账字段**
- 日期、事件、永续方向与数量、期权合约与张数、权利金、计划平仓条件、实际结果.
---
## 6. 免责声明
- 本文档为 **教育与操盘参考**,不构成投资建议.
- 加密货币期权与永续波动极大,买方权利金可能 **全部损失**.
- 对冲 **无法消除** 风险,只能改变风险形态;请用小资金验证全流程后再放大.
---
## 7. 相关文档
| 文档 | 内容 |
|------|------|
| [期权方案.md](./期权方案.md) | 技术架构与 API |
| [期权用法.md](./期权用法.md) | 兑换、划转、开平仓操作 |
| [期权用法.md §9](./期权用法.md) | 基础风险说明 |
-93
View File
@@ -1,93 +0,0 @@
# OKX 期权 — 开平仓与监控说明
> 独立页查看(登录后):`/options/guide`
> 对冲计划侧同步见 [对冲计划开发方案.md](./对冲计划开发方案.md) §期权腿开平仓.
---
## 1. 开仓方式
| 项 | 规则 |
|----|------|
| 方向 | **仅买方**(Call / Put 限价买入) |
| 价格 | **卖一 ask** 限价;无卖一时可用标记估算展示,实下单仍以可挂限价为准 |
| 张数 | 1 张 = 0.01 ETH/BTC;可按预算打满或指定数量 |
| 资金 | 交易账户 **USDC**(或 USDG);不自动兑划 |
| 入口 | OKX 实例 **期权** 页列表 / T 型;对冲计划可带期权腿开仓 |
开仓后写入 `options_trades`(open),并在持仓卡展示权利金、买盘深度、按买一可回收等.
**同合约加仓**:每次买入再插一条 open 记录;展示权利金 / 平仓门控 / 翻倍提醒按同合约 **SUM(premium_paid)** 汇总,不再只取最新一笔.
---
## 2. 平仓方式
### 2.1 统一规则(手动 / 目标自动共用执行核)
1. **禁止市价平仓**(代码硬关闭,忽略 `OKX_OPTIONS_ALLOW_MARKET_CLOSE`).
2. **只锁买一**:本轮张数 = `min(持仓, 买一深度)`,限价 = 校验通过当刻的买一价.
3. **不吃买二及以下**;买一不够则只平本轮能吃掉的部分,**剩余仓位保留**,下次再平再锁新的买一.
4. 全程 `reduceOnly` 限价卖.
5. **平仓限价挂单超时自动撤**:卖出/平仓委托未成交超过默认 **10 分钟**(`OKX_OPTIONS_PENDING_TTL_SECONDS`,默认 600)由监控自动撤销,并可微信通知;UI「委托」面板实时展示挂单与剩余自动撤倒计时.
示例:持仓 300、买一深度 200 → 本轮只平 200;剩 100 等下次「买一平仓」或目标位再次触发.
### 2.2 手动「买一平仓」
- 入口:持仓卡按钮.
- **只校验有效流动性**(买一非残档、有深度).
- **不卡**「回收 ≥ 2×权利金」门控(用户主动平仓).
### 2.3 目标位自动平仓
- 设置目标指数后由监控轮询;Call 指数 ≥ 目标 / Put 指数 ≤ 目标触发.
- 触发后走同一买一执行核.
- **额外门控**(不是独立自动平):仅当目标已触达时才检查;买一可回收 ≥ **权利金 × 2**,且连续约 **120 秒**(env:`OKX_OPTIONS_CLOSE_RECYCLE_MULT` / `OKX_OPTIONS_CLOSE_HOLD_SECONDS`).**到 2× 本身不会自动平仓**.
- 首次通过后,同仓**续批**只再验流动性,不再重跑 2 分钟计时.
- 无有效买一或门控未就绪 → 本轮不挂单,等下一轮;已有未成交卖平单则等成交,不撤了重挂.
---
## 3. 监控逻辑
| 监控 | 行为 |
|------|------|
| 持仓 / 买盘预览 | 轮询刷新;净盈亏按**本轮买一可回收 − 权利金** |
| 残档买一 | 买一 ≪ 标记/内在价值(默认 &lt; 30%) → 禁止按买盘平,UI 显示无效 |
| 未成交委托 | 期权下单区右侧「委托」列表展示开/平仓限价单,可手动撤销;页面轮询刷新 |
| 平仓挂单超时 | 卖出平仓限价超 TTL 未成交 → 自动撤单(默认 10 分钟) |
| 目标位 | 独立监控表;触发后买一平;推送企业微信(防重复) |
| 翻倍提醒 | 未实现口径达权利金 × `OKX_OPTIONS_PROFIT_ALERT_RATIO` 时推送一次 |
| 到期 | 无系统止损;到期交割/保险腿自灭(对冲计划另有退出规则) |
---
## 4. 平仓校验(门控)
| 门控 | 手动买一平 | 目标自动平 | 说明 |
|------|------------|------------|------|
| 有效流动性 | ✅ 必验 | ✅ 必验 | 残档买一 / 无买一 → 拒平 |
| 回收 ≥ 2× 权利金 + 持续 hold | ❌ | ✅ 首次 | 通过后同仓续批只验流动性 |
| 锁定买一价 | ✅ | ✅ | 下单价 = 通过校验时的买一 |
| 市价兜底 | ❌ | ❌ | 永不市价 |
---
## 5. 风险点
1. **流动性不足**:只平买一深度,大仓位可能多次才能平完;若买一突然撤档,限价可能挂着 — 超 TTL 会自动撤,之后需再次点平或等目标触发.
2. **开仓挂单**:买入委托不在超时自动撤范围(仅平仓卖单);可在「委托」面板手动撤销.
3. **残档假买一**:若未拦住残档会严重贱卖 — 系统用标记/内在价值比例拦截,但不等于保证最优成交价.
4. **权利金沉没**:手动可在未达 2× 时平仓,可能主动止损或提前锁利不及预期.
5. **无市价强平**:盘口真空时系统**不会**市价砸盘,仓位可能留到到期.
6. **目标位只看指数**:触达后仍受买一/2×门控约束,可能「到价却平不掉」.
7. **对冲计划腿**:期权腿退出规则见对冲方案;独立期权页平仓勿与计划状态脱节.
---
## 6. 相关文档
- [期权用法.md](./期权用法.md) — 资金兑划与页面操作
- [期权方案.md](./期权方案.md) — env 与架构
- [对冲计划开发方案.md](./对冲计划开发方案.md) — 永期/期期与期权腿
-151
View File
@@ -1,151 +0,0 @@
# OKX 期权模块 — 技术方案
> 适用范围:`crypto_monitor_okx` 实例;与永续子账户并行,不新增 PM2 进程.
## 1. 目标
在现有 OKX 监控实例中增加 **USDⓈ 本位期权(买方)** 能力:
- 永续/关键位:继续走 **子账户 API-A**(现有 `OKX_API_*`)
- 期权:走 **主账户 API-B**(`OKX_OPTIONS_API_*`)
- 资金展示对齐 OKX:**资金账户 / 交易账户**,分币种显示 USDT,USDC,USDG
- 支持 **手动 USDT→USDC 兑换****USDC 账户划转**
- **无总资金池上限**;单笔权利金上限可配置(默认 10 USDC)
## 2. 交易规则(硬约束)
| 规则 | 说明 |
|------|------|
| 仅买方 | 开仓 `buy`,平仓 `sell`;禁止卖方开仓 |
| 产品 | `BTC-USD_UM` / `ETH-USD_UM`(线性,USDC/USDG 结算) |
| 到期 | 仅展示 ≤2 日到期合约(可配置 `OKX_OPTIONS_MAX_DTE_DAYS`) |
| 虚实 | 仅 **轻度实值**(`OKX_OPTIONS_ITM_ONLY`) |
| 合约规格 | **1 张 = 0.01 ETH/BTC**(`ctMult=0.01`,以接口为准) |
| 报价单位 | 盘口 ask/bid = **每 1 ETH/BTC** 的 USD 价 |
| 权利金 | `总权利金 = 报价 × ETH数量`;`张数 = ETH数量 / 0.01` |
| 单笔预算 | `≤ OKX_OPTIONS_TRADE_BUDGET_USDC`(默认 10),算张数 × `OKX_OPTIONS_BUDGET_BUFFER`(默认 0.95) |
| 开仓 | 限价买单,价格 = 卖一 |
| 平仓 | 限价卖单,价格 = 买一(市价需显式开启且二次确认) |
| 监控 | 浮盈 / 已付权利金 ≥ 100% → 企业微信推送一次 |
## 3. 架构
```
crypto_okx(单 PM2)
├── exchange (swap) ← OKX_API_* 子账户
└── exchange_options ← OKX_OPTIONS_API_* 主账户
lib/options/
├── okx_options_lib.py # 封装于 lib/exchange/
├── options_pricing_lib.py
├── options_db.py
├── options_monitor_lib.py
└── options_register.py # 路由 + 监控线程
```
**隔离:** 期权模块只调用 `exchange_options`;永续逻辑只调用 `exchange`.
## 4. 资金与兑换
### 4.1 展示(期权页顶栏)
| 账户 | 币种 |
|------|------|
| 资金账户 | USDT,USDC(若有) |
| 交易账户 | USDT,USDC,USDG(若有) |
不展示「练手池」等抽象记账名称.
### 4.2 推荐操作流程
```
资金账户 USDT
→ [手动兑换 USDT→USDC](OKX Convert API,资金账户内)
→ [划转到交易账户](USDC)
→ 交易账户 USDC
→ [限价买入期权]
```
### 4.3 API
| 接口 | OKX |
|------|-----|
| 余额 | `fetch_balance`(funding / trading)+ `GET /api/v5/asset/balances` |
| 询价兑换 | `POST /api/v5/asset/convert/estimate-quote` |
| 确认兑换 | `POST /api/v5/asset/convert/trade` |
| 划转 | `exchange.transfer(ccy, amt, from, to)` |
## 5. 配置项(`.env`)
```bash
OKX_OPTIONS_ENABLED=false
OKX_OPTIONS_API_KEY=
OKX_OPTIONS_API_SECRET=
OKX_OPTIONS_API_PASSPHRASE=
OKX_OPTIONS_ACCOUNT_LABEL=主账户·期权
OKX_OPTIONS_TRADE_BUDGET_USDC=10
OKX_OPTIONS_BUDGET_BUFFER=0.95
OKX_OPTIONS_DEFAULT_UNDERLY=ETH
OKX_OPTIONS_MAX_DTE_DAYS=2
OKX_OPTIONS_ITM_MAX_DIST_USD=30
OKX_OPTIONS_PROFIT_ALERT_RATIO=1.0
OKX_OPTIONS_POLL_SECONDS=15
OKX_OPTIONS_TD_MODE=cross
# 市价平仓已在代码中硬关闭,此变量无效,可删
# OKX_OPTIONS_ALLOW_MARKET_CLOSE=false
OKX_OPTIONS_CLOSE_RECYCLE_MULT=2
OKX_OPTIONS_CLOSE_HOLD_SECONDS=120
# 平仓限价挂单超时自动撤(秒),默认 600=10 分钟;联调可临时改 60
OKX_OPTIONS_PENDING_TTL_SECONDS=600
```
平仓执行:**只锁买一限价**,说明见 [期权开平仓与监控说明.md](./期权开平仓与监控说明.md);线上 `/options/guide`.
修改 `.env` 后须 `pm2 restart crypto_okx`.
## 6. 数据库
### `options_trades`
记录本地开仓/平仓,权利金,翻倍提醒状态.
### `options_convert_log` / `options_transfer_log`
可选记录兑换与划转操作.
## 7. HTTP 路由
| 方法 | 路径 |
|------|------|
| GET | `/options` |
| GET | `/options/guide` | 开平仓与监控说明(独立页) |
| GET | `/api/options/balances` |
| GET | `/api/options/chain` |
| GET | `/api/options/quote` |
| POST | `/api/options/open` |
| POST | `/api/options/close` |
| POST | `/api/options/convert/quote` |
| POST | `/api/options/convert/execute` |
| POST | `/api/options/transfer` |
| GET | `/api/options/positions` |
## 8. 分阶段交付
1. **基础设施**:双 API,余额,文档,设置页说明
2. **兑换 + 划转**:资金账户 USDT→USDC,划转到交易户
3. **交易**:链,报价,开平仓,持仓
4. **监控**:翻倍微信提醒
## 9. 不在一期范围
- 卖方,组合单,RFQ
- 自动 USDT↔USDC
- `manual-agent-okx` / 中控聚合
- 币本位期权
## 10. 安全
- 期权 API:**交易 + 读**,禁止提币
- 日志不输出 Secret
- 下单前校验 `client is exchange_options`
-149
View File
@@ -1,149 +0,0 @@
# OKX 期权 — 使用说明
## 1. 前置条件
1. OKX **主账户**已开通期权(USDⓈ 本位),且 App 中可见 `ETHUSD UM` / `BTCUSD UM`.
2.`crypto_monitor_okx/.env` 配置 **期权专用 API**(与永续子账户分开):
```bash
OKX_OPTIONS_ENABLED=true
OKX_OPTIONS_API_KEY=你的主账户Key
OKX_OPTIONS_API_SECRET=...
OKX_OPTIONS_API_PASSPHRASE=...
```
3. 重启实例:`pm2 restart crypto_okx`
> 永续仍用原有 `OKX_API_*`(子账户);期权只用 `OKX_OPTIONS_API_*`(主账户).
## 2. 资金准备
期权权利金使用 **USDC 或 USDG**,不能直接用 USDT 买入.
### 推荐步骤
1. 打开 **期权** 页,查看顶栏:
- **资金账户**:USDT 余额
- **交易账户**:USDC 余额(买期权从这里扣)
2. **币种兑换**(资金账户内)
- 从 USDT 兑换为 USDC
- 先点 **询价**,确认预估获得量后点 **确认兑换**
3. **账户划转**
- 从:资金账户 → 到:交易账户
- 币种:USDC
- 将兑换得到的 USDC 划到交易账户
4. 确认 **交易账户 USDC** 足够支付本笔权利金
系统 **不会** 自动兑换或划转,避免误动资金.
## 3. 下单流程
1. 顶栏进入 **期权**
2. 选择 **ETH****BTC**
3. 选择 **到期日**(默认仅 12 日)
4. 选择 **看涨 Call****看跌 Put**
5. 在行权价列表中选 **轻度实值** 合约
6. 查看:
- **卖一价**(每 1 ETH/BTC 的报价)
- **张数 / ETH 数量**
- **预估权利金**(USDC)
7. 选择 **按预算打满**(默认 10U×0.95)或 **指定 ETH 数量**
8. 点击 **限价买入**(价格 = 卖一)
### 张数说明
- **1 张 = 0.01 ETH**(或 0.01 BTC)— 与 OKX App「合约价值」一致
- 盘口报价是 **每 1 ETH** 的价格
例:报价 15.6,买 0.5 ETH(50 张)→ 权利金 ≈ 15.6 × 0.5 = **7.8 USDC**
## 4. 持仓与平仓
持仓表字段对齐 OKX:合约,张数,开仓均价,标记价,净盈亏,收益率,到期等.
**买一平仓:**
1. 在持仓卡点击 **买一平仓**
2. 系统重读盘口并校验有效买一(非残档)
3. 本轮只按买一深度限价卖出;买一不够则剩余下次再平
4. **市价平仓已禁用**(代码硬关闭)
目标位自动平另需「可回收 ≥ 2×权利金并持续约 2 分钟」;细则见独立说明:
- 仓库文档:[期权开平仓与监控说明.md](./期权开平仓与监控说明.md)
- 线上(登录后):`/options/guide`
## 5. 微信提醒
当某笔持仓 **未实现盈亏 ≥ 已付权利金的 100%**(翻倍)时,会发 **一条** 企业微信提醒(同一笔只提醒一次).
需已配置 `WECHAT_WEBHOOK`.
## 6. 与永续的关系
| | 永续(子账户) | 期权(主账户) |
|--|----------------|----------------|
| API | `OKX_API_*` | `OKX_OPTIONS_API_*` |
| 页面 | 实盘下单 / 关键位 | 期权 |
| 资金顶栏 | USDT 资金户+交易户 | 期权页单独显示 USDC 等 |
两套资金 **不合并** 显示.
## 7. 配置说明
| 变量 | 默认 | 含义 |
|------|------|------|
| `OKX_OPTIONS_TRADE_BUDGET_USDC` | 10 | 单笔权利金上限 |
| `OKX_OPTIONS_BUDGET_BUFFER` | 0.95 | 算张数时预留 5% 缓冲 |
| `OKX_OPTIONS_MAX_DTE_DAYS` | 2 | 最多选几天内到期 |
| `OKX_OPTIONS_ITM_MAX_DIST_USD` | 30 | 轻度实值:价内不超过多少 USD |
| `OKX_OPTIONS_PROFIT_ALERT_RATIO` | 1.0 | 浮盈/权利金 ≥ 此值推送 |
## 8. 期权复盘(含对冲)
**OKX** 实例提供独立页 **期权复盘**(`/options/review`),与合约「交易记录与复盘」完全隔离.
### 数据来源
| 类型 | source_type | 来源 | 粒度 |
|------|-------------|------|------|
| 纯期权 | `option_spot` | 本地 `options_trades` 已平仓 | 一仓一条 |
| 永期对冲 | `perp_options` | 本地 `hedge_plans``status=closed` | **一计划一条** |
| 期期对冲 | `options_options` | 同上 | **一计划一条** |
- 打开复盘页即自动读取本地记录,**不访问交易所**.
- 对冲盈亏主口径:`realized_pnl_total`;详情另显永续/期权分项.
- 若某纯期权 `inst_id` 已出现在对冲腿中,默认标记排除,避免总盈亏双计.
- 人工复盘字段存在 `options_review_entries`,刷新本地源**不会覆盖**.
### 图片
- 目录:`static/images/options_journal/`
- 文件名:`options_journal_{draftId}_{5m|15m|1h|4h}.ext`(与合约复盘同周期槽位)
- 备份时与 `crypto.db` 一并打包即可;勿与合约 `journal_*` 截图混用.
### 页面
顶部三个 Tab:**期权交易记录** / **期期对冲记录** / **永期对冲记录**.点击列表行后在下方打开「复盘记录上传」,支持四周期即时截图与情绪标签.
### 统计
同页 KPI + 分组:类型、标的、策略标签、对冲结束原因、持有周期、Call/Put.策略维度仅统计已填策略标签的记录.
## 9. 常见问题
**Q:为什么买不了?**
- 交易账户 USDC 不足 → 先兑换再划转
- 卖一价过高,10U 预算买不到 1 张 → 选更便宜合约或提高 `OKX_OPTIONS_TRADE_BUDGET_USDC`
- 期权 API 未配置或 `OKX_OPTIONS_ENABLED=false`
**Q:报价 15 是每张 15U 吗?**
- 不是.15 是 **每 1 ETH** 的报价;每张(0.01 ETH)约 0.15 USDC.
**Q:子账户能开期权吗?**
- 本系统期权走主账户 API;子账户永续不受影响.
## 10. 风险说明
- 买方最大亏损为 **权利金**;近期实值仍会时间衰减
- 限价单可能因无流动性未成交
- 请先在小额下验证兑换,划转,开平仓全流程
-168
View File
@@ -1,168 +0,0 @@
# 系统设置页说明
本文档描述各交易实例 Web 端 **「系统设置」** 页各区块功能,与 env 配置页的分工,以及导航显示开关规则.
---
## 1. 页面结构
系统设置为 **两列卡片** 布局,各区块可在「导航显示」中单独开关(见第 2 节).
| 区块 | 默认显示 | 说明 |
|------|----------|------|
| 导航显示 | 固定 | 控制顶栏与其它设置区块是否出现 |
| 账户密码修改 | 可关 | 修改网页登录用户名/密码 |
| 永续资金划转 | 可关 | 手动在资金账户与交易账户间划转 USDT |
| 数据导出 | 可关 | 下载 CSV |
| 币种兑换 | 可关 | 仅 OKX 期权相关 |
| 期权资金划转 | 可关 | 仅 OKX |
| 期权设置面板 | OKX 有模块时 | 较大块,占整行 |
**固定不可隐藏**(顶栏):关键位监控,实盘下单,系统设置.
---
## 2. 导航显示
### 2.1 顶栏导航开关
| 开关 | 对应 Tab | 默认 |
|------|----------|------|
| 数据看板 | 数据看板(本户活跃监控总览) | **关闭** |
| 策略交易 | 策略交易 | 开 |
| 策略交易记录 | 策略交易记录 | 开 |
| 交易记录与复盘 | 交易记录与复盘 | 开 |
| 统计分析 | 统计分析 | 开 |
| 风控说明 | 风控说明 | 开 |
| env 配置 | env 配置 | 开 |
| 期权 | 期权(仅 OKX 等有期权模块时有效) | 开 |
保存后 **立即生效**,无需重启.中控 iframe 内嵌导航同步生效.
### 2.2 系统设置内区块开关
| 开关 | 隐藏内容 |
|------|----------|
| 资金划转 | 永续资金划转卡片 |
| 数据导出 | 数据导出卡片 |
| 账户密码修改 | 改密卡片 |
| 期权币种兑换 | OKX 兑换卡片 |
| 期权资金划转 | OKX 期权划转卡片 |
---
## 3. 账户密码修改
### 用途
- 修改 **直链打开实例**`/login` 使用的用户名与密码.
- 写入本实例目录 `.env``APP_USERNAME`,`APP_PASSWORD`.
- **三所建议使用相同账号**,便于记忆;本页仅改 **当前实例**`.env`,若需三所一致请分别保存或后续做批量同步.
### 与中控 / 密钥的关系
| 项目 | 是否在系统设置改 | 说明 |
|------|------------------|------|
| 网页登录密码 | ✅ | 本区块 |
| 中控通信密钥 `HUB_BRIDGE_TOKEN` | ❌ | 部署时自动生成,中控与实例一致 |
| 登录会话密钥 `FLASK_SECRET_KEY` | ❌ | 部署时自动生成,三所相同 |
| 交易所 API | ❌ | 在 **env 配置** 页(各所自配) |
| AI 复盘 / OpenAI | ❌ | 在中控 **系统设置 → AI 配置**(同步三所) |
### 操作流程
1. 输入 **当前密码**(与 `.env``APP_PASSWORD` 一致).
2. 可选填 **新用户名**;不填则保持原用户名.
3. 输入 **新密码****确认密码**(至少 6 位).
4. 保存后 **自动重启当前实例**(PM2),请用新密码登录.
经中控 SSO 打开实例时,通常无需输入实例密码;改密主要影响 **直链访问**.
---
## 4. 永续资金划转
### 用途
**子账户永续** 场景下,于 **资金账户(funding)****交易账户(swap)** 之间手动划转 USDT.
### 与 env 配置的关系
| 能力 | 系统设置 | env 配置 |
|------|----------|----------|
| **手动**划转一笔 | ✅ 本区块 | ❌ |
| **自动**每日划转规则 | ❌ | ✅「自动划转」卡片 |
自动划转规则(开关,目标余额,整点等)在 env 配置中维护,见 [env配置说明.md](./env配置说明.md).
---
## 5. 数据导出
提供 CSV 下载(版本号见页内标注):
| 链接 | 内容 |
|------|------|
| 交易记录 | 成交/订单相关导出 |
| 复盘记录 | 复盘日记 |
| 关键位(当前) | 当前关键位列表 |
| 关键位历史 | 历史关键位 |
导出为只读操作,不修改配置.
---
## 6. 期权相关(仅 OKX)
当实例启用期权模块时,系统设置可能包含:
- **币种兑换**:期权账户内币种兑换操作
- **期权资金划转**:期权与永续/资金账户间划转
- **期权设置面板**:页内期权参数与状态(大块区域)
是否在顶栏显示「期权」Tab,由 **导航显示 → 期权** 控制;是否在设置页显示兑换/划转卡片,由对应子开关控制.
期权 env 参数(API,预算,策略默认值)在 **env 配置 → 期权账户** 维护,见 [期权用法.md](./期权用法.md).
---
## 7. 顶栏与设置页差异
| 页面 | 顶栏资金信息 | 说明 |
|------|--------------|------|
| 关键位,实盘,策略等 | 显示 | 含资金,盈亏等 |
| 系统设置,风控说明,env 配置 | 隐藏资金条 | 与实盘顶栏共用组件,设置类页面简化展示 |
主题切换(明/暗)在系统设置页可用(若已接入主题切换 UI).
---
## 8. 权限与安全
- 所有设置 API 需 **已登录**(或部署时 `APP_AUTH_DISABLED=true` 的联调环境).
- 改密,env 保存,PM2 重启等写操作 **不接受** 仅带 `X-Hub-Token` 的中控请求修改(防止中控误改实例配置).
- 生产环境建议 `APP_AUTH_DISABLED=false`,公网务必开启登录校验.
---
## 9. 首次部署时的账号与密钥(规划)
以下由 **部署脚本** 自动完成,**不在** 系统设置或 env 配置页手工填写:
1. **生成 `HUB_BRIDGE_TOKEN`** → 写入中控 + 三实例 `.env`(相同).
2. **生成 `FLASK_SECRET_KEY`** → 写入三实例 `.env`(三所相同).
3. **生成初始 `APP_USERNAME=admin`,`APP_PASSWORD=admin123`** → 写入三实例(仅当尚未配置时);用户日后在 **系统设置** 改密.
脚本应对 **已有非空值** 跳过写入,避免覆盖生产环境.
---
## 10. 相关文档
| 文档 | 内容 |
|------|------|
| [env配置说明.md](./env配置说明.md) | env 配置页字段与密钥分工 |
| [account-risk-cooldown.md](./account-risk-cooldown.md) | 账户冷静期规则 |
| [auto-transfer-daily.md](./auto-transfer-daily.md) | 自动划转 |
| [daily-open-limit.md](./daily-open-limit.md) | 单日开仓限制 |
| [manual_trading_hub/使用说明.md](../manual_trading_hub/使用说明.md) | 中控与 SSO |