# 界面与风控更新说明(Binance 实例) ## 顶栏导航(4 项) | 顺序 | 名称 | 路由 | 说明 | |------|------|------|------| | 1 | 关键位监控 | `/key_monitor` | 关键位添加、实时门控、历史 | | 2 | 实盘下单 | `/trade` | 人工开仓、划转、实时持仓(**默认首页** `/` → `/trade`) | | 3 | 交易记录与复盘 | `/records` | 交易记录、复盘表单、AI 历史(受顶栏 UTC 时间窗筛选) | | 4 | 统计分析 | `/stats` | 按北京时间交易日切日 + 分品类统计块 | ## 关键位监控页 - 标题去掉「5m」;规则条从 `.env` 读取(周期、确认K、量能、自动开仓盈亏比、日成交量排名)。 - 左列:活跃关键位,**pos-card** 样式展示现价/距上沿/距下沿/门控。 - 右列:关键位历史(失效/结案),与左列等高滚动;**受顶栏 UTC 列表时间窗筛选**(默认 UTC 当日)。 - 监控类型新增:**斐波回调0.618**、**斐波回调0.786**(与 Gate 主站同一套规则,计算逻辑见仓库根目录 `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 | | 添加后 | **立即**在 Binance U 本位挂限价单;卡片显示 **挂E**、限价单 ID | | 失效 | 以**标记价**判断:做多且标记价 ≥ H、做空且标记价 ≤ L,且限价**未成交** → 撤销该限价单并结案 | | 成交后 | 挂交易所 TP/SL(含 Algo 通道条件单)→ 写入 **实盘下单监控**(`monitor_type=关键位监控`,`key_signal_type=斐波回调…`)→ 从关键位列表移除 | | 撤单 | 仅撤本条斐波的订单 ID,**不会**对该合约 `cancel_all_orders` / 全撤 Algo,避免误伤其他委托 | | 盈亏比 | 计划 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` ## 交易记录与复盘 - 支持从交易所收入流水等同步已实现盈亏;盈亏列标注 **所** / **估**。 - 记录页 **立即同步**(`POST /api/sync_exchange_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 时间窗限制。 ## 实盘下单页 - 左列:实盘下单监控(表单、划转、规则)。 - 右列:实时持仓(独立模块)。 - **人工开仓门控**:计划盈亏比 < `MANUAL_MIN_PLANNED_RR`(默认 **1.4**)时前端弹窗 + 后端拒绝。 ## 统计分析页(`/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` 中「关键位门控」「交易执行 / 人工风控」注释段。 ## 自动备份(服务器) - 脚本:`scripts/backup_data.sh`(`crypto.db` + `static/images`) - 定时:`scripts/install_backup_cron.sh` → 每天 **北京时间 0:00**,目录 **`/root/backups/<实例名>/YYYY-MM-DD/`**,保留 **30** 天 - 详见 `部署文档.md` 第 5.3 节 ## 数据库(启动时自动迁移) `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_binance/app.py` | 列表筛选、统计分块、导出 v3、复盘 K 线锚点、入库逻辑 | | `crypto_monitor_binance/templates/index.html` | 顶栏时间窗、统计分块 UI、止损(开仓)列、复盘预填 | ## 升级步骤 1. `git pull` 后对比 `.env.example`,把新增变量合并进本地 `.env`。 2. 在 VPS 上为 Binance / Gate / Gate Bot **各执行一次** `bash scripts/install_backup_cron.sh`(若尚未安装)。 3. 重启 Binance 实例(如 `pm2 restart crypto_binance`);SQLite 会自动 `ALTER` 缺列(斐波、交易所盈亏、`entry_reason` 等)。 4. 浏览器强刷(Ctrl+F5)避免旧版 `index.html` 缓存。 5. 打开任意页确认顶栏出现 **「列表筛选(UTC)」**;`/stats` 可见分品类统计与「北京 8:00 切日」说明。 6. 建议先用测试币验证斐波:限价挂出、标记价失效撤单、成交后 TP/SL 与订单监控是否正常;平仓后检查交易记录止损(开仓)与开仓类型。