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

6.6 KiB
Raw Blame History

趋势回调:中控平仓与交易记录(检阅备忘)

本文档汇总 中控手动结束趋势计划交易记录 / 策略记录 写入规则,以及 四所展示统一补仓表计价 相关修复,便于自行检阅与排错。

适用仓库:crypto_monitorBinance / 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_snapshotstrategy_trade_snapshots
  2. 撤该品种挂单
  3. 若尚无 trade_records.trend_plan_id = 计划ID
    • 更新当日 session 资金
    • insert_trade_record 写入交易记录
  4. 更新 trend_pullback_plans.statusstopped_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="趋势回调",触发:

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):

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_levelsenrich_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_priceavg_entry_price
顶部均价 优先交易所 live entry_price,非计划库内估算值

修复提交:08082eb(移除反推成交价逻辑)。

7.3 中控静态页

manual_trading_hub/static/app.js:趋势浮盈亏计算 优先 trendPlan.avg_entry_price,与计划卡一致。


8. 部署与自检

8.1 升级

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_recordenrich_trend_plan
strategy_trend_lib.py trend_leg_display_priceenrich_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 策略总览、策略交易记录页
crypto_monitor_gate_bot/趋势回调策略说明.md 趋势回调业务细则
manual_trading_hub/使用说明.md 中控监控与趋势卡布局
hub-symbol-archive-kline.md 币种档案、永久 5m K 线、交易 overlay

最后整理:2026-06-07(与对话中修复项同步)