Normalize fullwidth punctuation to ASCII across codebase.

Add scripts/normalize_ambiguous_unicode.py; fix corrupted patch_instance_theme_templates.py. Preserves curly quotes in string literals; removes Git homoglyph warnings on .env.example.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-08 23:42:26 +08:00
parent aaa72c7961
commit b733e551a0
392 changed files with 71522 additions and 71369 deletions
+147 -147
View File
@@ -1,147 +1,147 @@
# 界面与风控更新说明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:10.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` |
| 作用范围 | 关键位历史交易记录列表复盘记录 APIAI 历史 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`
## 交易记录与复盘
- 交易记录盈亏以**本地估算**为准平仓时按成交/计划价计算);盈亏列可标注 **估**
- 与币安 App 不一致时请在「核对修改」或复盘中 **手工填写** `reviewed_pnl_amount` 覆盖展示不再提供批量「同步交易所盈亏」)。
- **列表默认只显示当前 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 后止损阶梯上移时**同步交易所**——**先撤**该合约全部 TP/SL含 Algo 条件单**再挂**新止损 + 原止盈`replace_active_monitor_tpsl_on_exchange`)。仅交易所成功后才写库失败发企业微信告警未配置实盘 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` 中「关键位门控」「交易执行 / 人工风控」注释段
## 自动备份服务器
- 脚本`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_binance/app.py` | 列表筛选统计分块导出 v3复盘 K 线锚点入库逻辑 |
| `crypto_monitor_binance/templates/index.html` | 顶栏时间窗统计分块 UI止损(开仓)列复盘预填 |
## 升级步骤
1. `git pull` 后对比 `.env.example`把新增变量合并进本地 `.env`
2. 在 VPS 上为 Binance / Gate / **各执行一次** `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 与订单监控是否正常平仓后检查交易记录止损(开仓)与开仓类型
# 界面与风控更新说明(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`
## 交易记录与复盘
- 交易记录盈亏以**本地估算**为准(平仓时按成交/计划价计算);盈亏列可标注 **估**.
- 与币安 App 不一致时,请在「核对修改」或复盘中 **手工填写** `reviewed_pnl_amount` 覆盖展示(不再提供批量「同步交易所盈亏」).
- **列表默认只显示当前 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 后,止损阶梯上移时**同步交易所**——**先撤**该合约全部 TP/SL(含 Algo 条件单)**再挂**新止损 + 原止盈(`replace_active_monitor_tpsl_on_exchange`).仅交易所成功后才写库;失败发企业微信告警.未配置实盘 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` 中「关键位门控」「交易执行 / 人工风控」注释段.
## 自动备份(服务器)
- 脚本:`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_binance/app.py` | 列表筛选,统计分块,导出 v3,复盘 K 线锚点,入库逻辑 |
| `crypto_monitor_binance/templates/index.html` | 顶栏时间窗,统计分块 UI,止损(开仓)列,复盘预填 |
## 升级步骤
1. `git pull` 后对比 `.env.example`,把新增变量合并进本地 `.env`.
2. 在 VPS 上为 Binance / Gate / **各执行一次** `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 与订单监控是否正常;平仓后检查交易记录止损(开仓)与开仓类型.