b733e551a0
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>
185 lines
6.3 KiB
Markdown
185 lines
6.3 KiB
Markdown
# 趋势回调:中控平仓与交易记录(检阅备忘)
|
|
|
|
本文档汇总 **中控手动结束趋势计划**,**交易记录 / 策略记录** 写入规则,以及 **三所展示统一**,**补仓表计价** 相关修复,便于自行检阅与排错.
|
|
|
|
适用仓库:`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 # 或本机仓库根目录
|
|
|
|
# 先预览
|
|
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
|
|
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(与对话中修复项同步)*
|