# 界面与风控更新说明（Gate 实例）

## 顶栏导航（4 项）

| 顺序 | 名称 | 路由 | 说明 |
|------|------|------|------|
| 1 | 关键位监控 | `/key_monitor` | 关键位添加、实时门控、历史 |
| 2 | 实盘下单 | `/trade` | 人工开仓、划转、实时持仓（**默认首页** `/` → `/trade`） |
| 3 | 交易记录与复盘 | `/records` | 交易记录、复盘表单、AI 历史（受顶栏 UTC 时间窗筛选） |
| 4 | 统计分析 | `/stats` | 按北京时间交易日切日 + 分品类统计块 |

## 关键位监控页

- 标题去掉「5m」；规则条从 `.env` 读取（周期、确认K、量能、自动开仓盈亏比、日成交量排名）。
- 左列：活跃关键位，**pos-card** 样式展示现价/距上沿/距下沿/门控。
- 右列：关键位历史（失效/结案），与左列等高滚动；**受顶栏 UTC 列表时间窗筛选**（默认 UTC 当日）。
- 监控类型新增：**斐波回调0.618**、**斐波回调0.786**（与 Binance 主站同一套规则，计算逻辑见仓库根目录 `fib_key_monitor_lib.py`）。

### 斐波关键位监控（方案 A：交易所限价）

| 项 | 说明 |
|----|------|
| 同币互斥 | 每个币种只能有一条斐波监控（0.618 与 0.786 不可并存） |
| 上下沿 | 上沿 **H**、下沿 **L**（须 H > L） |
| 挂单价 E | **做多** `E = H − ratio × (H − L)`（自 H 向下回撤）；**做空** `E = L + ratio × (H − L)`（自 L 向上反弹） |
| 做多 | 限价 @ E，止损 L，止盈 H |
| 做空 | 限价 @ E，止损 H，止盈 L |
| 添加后 | **立即**在 Gate 挂限价单；卡片显示 **挂E**、限价单 ID |
| 失效 | 以**标记价**判断：做多且标记价 ≥ H、做空且标记价 ≤ L，且限价**未成交** → 撤销该限价单并结案（不写历史开仓） |
| 成交后 | 按仓位挂交易所 TP/SL → 写入 **实盘下单监控**（`monitor_type=关键位监控`，`key_signal_type=斐波回调0.618/0.786`）→ 从关键位列表移除 |
| 撤单 | 仅撤本条斐波的 `fib_limit_order_id`，**不会** `cancel_all`，避免误伤其他委托 |
| 盈亏比 | 计划 RR 须 > `KEY_AUTO_MIN_PLANNED_RR`（与箱体/收敛一致）；0.618 理论约 1.6:1，0.786 约 3.7:1 |
| 日成交量 | 与箱体/收敛相同，须在前 `KEY_DAILY_VOLUME_RANK_MAX` 名内方可添加 |

后台轮询：`check_fib_key_monitors()`（标记价失效 / 成交检测）；箱体/收敛仍走 `check_key_monitors()`，互不干扰。

手动删除关键位时，若斐波限价尚未成交，会先撤交易所限价再删库记录。

### 箱体 / 收敛自动开仓（来源标注）

- 自动开仓写入 `order_monitors.key_signal_type`：`箱体突破` 或 `收敛突破`。
- 持仓卡片、交易记录列表会显示「来源 · 信号类型」。

## 列表时间窗（UTC，全站顶栏）

共用模块：仓库根目录 `history_window_lib.py`（Gate / Binance 主站一致）。

| 项 | 说明 |
|----|------|
| 默认 | **UTC 当日**（`win_preset=utc_today`，从 UTC 0:00 至当前时刻） |
| 可选 | 近 24 小时、近 7 天、自定义起止（UTC，`datetime-local`） |
| 作用范围 | 关键位历史、交易记录列表、复盘记录 API、AI 历史 API、导出「交易记录」「关键位历史」 |
| 与统计的关系 | **仅影响列表/导出**；**统计分析页仍按北京时间 `TRADING_DAY_RESET_HOUR`（默认 8:00）切交易日** |
| 库内时间 | DB 存北京时间字符串；后端用 `utc_window_to_bj_sql_strings()` 换算后再 SQL 比较 |
| 切换方式 | 顶栏「列表筛选（UTC）」→ 选预设 → **应用**（保留当前路由，如 `/records?win_preset=…`） |

查询参数示例：

- `?win_preset=utc_today`
- `?win_preset=utc_last24h` / `utc_last7d`
- `?win_preset=custom&from_utc=2026-05-18 00:00:00&to_utc=2026-05-19 12:00:00`

## 交易记录与复盘

- 平仓记录可同步交易所已实现盈亏（Gate 仓位历史等）；列表盈亏列优先显示交易所数据，标注 **所** / **估**。
- 记录页提供 **立即同步**（`POST /api/sync_exchange_pnl`），用于补全或刷新 `exchange_realized_pnl` 等字段。
- 未做人工复盘时，展示以交易所盈亏为准（有同步数据时）。
- **列表默认只显示当前 UTC 时间窗内**的记录（见上节）；导出 CSV 同步该时间窗。
- 表头 **「止损(开仓)」**：展示开仓快照 `initial_stop_loss`（无则回退 `stop_loss`）；核对/复盘仍可用有效止损字段。
- 平仓写入 `trade_records` 时：`stop_loss` 与 `initial_stop_loss` 均写入**开仓时止损快照**；`key_signal_type` 保留箱体/收敛/斐波来源（`fib_key_monitor_lib.key_signal_type_for_trade_record`）。
- **开仓类型**（`entry_reason`）：机器单平仓入库时，若未手填，按 `key_signal_type` 自动映射（见下表）；列表/导出「开仓类型」列 = 复盘核对值优先，否则入库值，否则按信号映射。

| `key_signal_type` | 自动写入的 `entry_reason` |
|-------------------|---------------------------|
| 箱体突破 | 关键位箱体突破 |
| 收敛突破 | 关键位收敛突破 |
| 斐波回调0.618 | 关键位斐波0.618 |
| 斐波回调0.786 | 关键位斐波0.786 |

- 复盘表单 **开仓类型** 下拉新增上述四条固定文案（与趋势/波段类并列）。
- 复盘 **离场触发** 新增 **「止盈」**；从交易记录「填入复盘」时，若结果为「止盈/保本止盈/移动止盈/止损/手动平仓」会自动选中对应触发项，并按 `key_signal_type` 预填开仓类型。
- 勾选「保存时自动生成多周期 K 线图」时：以 **平仓时间** 为锚点，各周期向前约 `ORDER_CHART_LIMIT`（默认 100）根 K 线（`_fetch_ohlcv_ending_at`），不再固定拉「最近 100 根」。
- `/api/journals`、`/api/reviews` 支持同一时间窗 query，与列表一致。

### 导出（交易记录 v3）

- 文件名：`trade_records_v3_YYYYMMDD.csv`
- 相对 v2 增加：`key_signal_type`、`initial_stop_loss`（及开仓快照列）、`planned_rr`、`actual_rr`、`risk_amount`、交易所盈亏与时间字段等；末列「开仓类型」为有效展示文案。
- 「关键位历史」导出同样受 UTC 时间窗限制。

## 实盘下单页

- 左列：实盘下单监控（表单、划转、规则）。
- 右列：实时持仓（独立模块）。
- **人工开仓门控**：计划盈亏比 &lt; `MANUAL_MIN_PLANNED_RR`（默认 **1.4**）时前端弹窗 + 后端拒绝。
- **移动保本**（勾选启用）：监控轮询达到触发 RR 后，止损阶梯上移时**同步交易所**——调用与页面「挂止盈止损」相同的 **先撤后挂**（`replace_active_monitor_tpsl_on_exchange`：撤该合约全部 TP/SL 条件单 → 按新止损 + 原止盈重挂）。仅交易所成功后才写库；失败发企业微信告警，本地止损不变。未配置实盘 API 时仍只更新本地（与旧行为一致）。

## 统计分析页（`/stats`）

| 项 | 说明 |
|----|------|
| 切日 | **北京时间**；交易日边界 = 每日 `TRADING_DAY_RESET_HOUR:00`（`.env` 默认 **8**） |
| 品类下拉 | 页顶 **「统计品类」** 下拉切换（默认「全部交易」）：全部交易、下单监控、关键位箱体突破、关键位收敛结构、关键位斐波0.618、关键位斐波0.786；一次只显示所选品类的日/周/月 |
| URL | 切换后写入 `stats_segment=`（如 `all`、`manual`、`key_box`、`key_conv`、`key_fib618`、`key_fib786`），刷新 `/stats` 可保持选项 |
| 每块指标 | 日 / 周 / 月：开单次数、平仓笔数、胜率、净盈亏、回撤、连续亏损等（与原口径一致） |
| 开单次数 | 人工块：`monitor_type=下单监控` 且无 `key_signal_type`；关键位块：按 `order_monitors.key_signal_type` 计数 |
| 不受 UTC 窗影响 | 统计始终基于库内全部已平仓记录，按北京交易日归类，**不**随顶栏 UTC 列表窗切换 |

## 持仓与计仓

- `MAX_ACTIVE_POSITIONS` 默认 **1**（可在 `.env` 调大）。
- 关键位自动开仓：在已有持仓时，若 `KEY_SIZING_USE_ZERO_POSITION_SNAPSHOT=true`，按**首笔开仓前**交易账户资金快照计仓（`trading_sessions.key_sizing_capital_snapshot`）。

## 配置

详见 `.env.example` 中「关键位门控」「交易执行 / 人工风控」注释段。Gate 专用项（`GATE_*`、止盈止损触发等）保持原有段落不变。

## 自动备份（服务器）

- 脚本：`scripts/backup_data.sh`（`crypto.db` + `static/images`）
- 定时：`scripts/install_backup_cron.sh` → 每天 **北京时间 0:00**，目录 **`/root/backups/<实例名>/YYYY-MM-DD/`**，保留 **30** 天
- 详见 `部署文档.md` 第 5.4 节（自动备份）

## 数据库（启动时自动迁移）

`key_monitors` 新增斐波字段（示例）：`fib_limit_order_id`、`fib_entry_price`、`fib_stop_loss`、`fib_take_profit`、`fib_order_amount`、`fib_margin_capital`、`fib_leverage`。

`trade_records` / `order_monitors` 新增或沿用：`key_signal_type`、`exchange_realized_pnl`、`exchange_opened_at`、`exchange_closed_at`、`exchange_sync_key`、`entry_reason`、`reviewed_entry_reason`、`initial_stop_loss`。

**历史数据**：本次**不做**旧记录的批量回填（`entry_reason` / `initial_stop_loss` / `key_signal_type` 等）；仅**新产生**的平仓与复盘按新逻辑写入。旧行展示可回退已有字段。

## 涉及文件（便于排查）

| 路径 | 说明 |
|------|------|
| `history_window_lib.py` | UTC 时间窗解析与转北京时间 SQL 字符串 |
| `fib_key_monitor_lib.py` | 斐波计算、`KEY_ENTRY_REASON_BY_SIGNAL`、`entry_reason_from_key_signal` |
| `crypto_monitor_gate/app.py` | 列表筛选、统计分块、导出 v3、复盘 K 线锚点、入库逻辑 |
| `crypto_monitor_gate/templates/index.html` | 顶栏时间窗、统计分块 UI、止损(开仓)列、复盘预填 |

## 升级步骤

1. `git pull` 后对比 `.env.example`，把新增变量合并进本地 `.env`。
2. 在 VPS 上为 Binance / Gate / Gate Bot **各执行一次** `bash scripts/install_backup_cron.sh`（若尚未安装）。
3. 重启 Gate 实例服务（如 `pm2 restart crypto_gate`）；首次启动会自动 `ALTER TABLE` 缺列（斐波、交易所盈亏、`entry_reason` 等）。
4. 浏览器强刷（Ctrl+F5）避免旧版 `index.html` 缓存。
5. 打开任意页确认顶栏出现 **「列表筛选（UTC）」**；`/stats` 可见分品类统计与「北京 8:00 切日」说明。
6. 建议在测试币上先添加一条斐波监控，确认：限价已挂出、标记价失效会撤单、成交后出现持仓监控且 TP/SL 已挂上；平仓后交易记录止损(开仓)与开仓类型是否正确。
