Files
crypto_monitor/docs/trend-hub-close-and-trade-records.md
T
dekun 6a56928d59 feat(hub): add symbol archive with permanent 5m klines
Add /archive page, hub_symbol_archive.db, trade overlay, 4h background sync, and instance /api/hub/trades/archive. Document in hub-symbol-archive-kline.md with cross-links.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 22:51:48 +08:00

185 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 趋势回调:中控平仓与交易记录(检阅备忘)
本文档汇总 **中控手动结束趋势计划**、**交易记录 / 策略记录** 写入规则,以及 **四所展示统一**、**补仓表计价** 相关修复,便于自行检阅与排错。
适用仓库:`crypto_monitor`Binance / OKX / Gate / Gate Bot + `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`(四所同一套,Gate Bot 的 `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),**交易记录没有**。
**原因**Gate Bot 的 `insert_trade_record`**缺少 `entry_reason` 参数**,而 `_finalize_plan` 固定传入 `entry_reason="趋势回调"`,触发:
```text
TypeError: insert_trade_record() got an unexpected keyword argument 'entry_reason'
```
策略快照在异常 **之前** 已插入,交易记录插入失败,故只出现在策略记录页。
**修复提交**`80226ee`
- Gate Bot `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_bot/crypto.db --dry-run
# 确认后写入
python scripts/backfill_trend_trade_records.py \
--db crypto_monitor_gate_bot/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` |
Gate Bot 在 `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 crypto-monitor-gate-bot 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_bot/app.py` | `insert_trade_record`(含 `entry_reason` |
| `scripts/backfill_trend_trade_records.py` | 漏记交易记录补录 |
### 8.4 相关提交
| 提交 | 说明 |
|------|------|
| `6a4ec69` | 中控与四所趋势展示 enrich 统一 |
| `08082eb` | 移除补仓表反推虚构成交价 |
| `80226ee` | 修复 Gate Bot 中控平仓漏写 `trade_records` |
---
## 9. 相关文档
| 文档 | 内容 |
|------|------|
| [策略交易说明.md](../策略交易说明.md) | 策略总览、策略交易记录页 |
| [crypto_monitor_gate_bot/趋势回调策略说明.md](../crypto_monitor_gate_bot/趋势回调策略说明.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(与对话中修复项同步)*