auto_trade_sys/docs/币安持仓与DB同步说明.md
薇薇安 df2b8d6372 fix(config_manager, api, database, position_manager, user_data_stream): 增强配置管理和日志记录
在配置管理模块中,新增了 `ONLY_AUTO_TRADE_CREATES_RECORDS` 配置项,以控制自动开仓记录的写入行为。同时,在多个模块中优化了日志记录,确保在数据库操作和交易记录完善时提供更清晰的错误信息。这一改动旨在提升系统的稳定性和可维护性,确保交易策略的有效性与安全性。
2026-02-26 11:19:23 +08:00

61 lines
3.7 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.

# 币安持仓与 DB 同步说明
当出现「币安有仓、数据库没有 open 记录」时,仪表盘/持仓列表会显示这些仓位没有 `id`、`stop_loss_price`、`take_profit_price`,且点「补挂止盈止损」依赖接口侧用配置比例计算(已支持无 DB 补挂)。若希望**在 trading_system 里为这些仓位补建 DB 记录**,并自动挂止损止盈、纳入监控,需正确配置以下项。
## 为何会“跳过补建”
逻辑顺序:
1. **ONLY_AUTO_TRADE_CREATES_RECORDS**(默认 `True`
为 True 时表示「只允许自动开仓写入 DB」会**强制关闭**补建与手动开仓建记录,即:
- `SYNC_RECOVER_MISSING_POSITIONS` 被置为 False
- `SYNC_CREATE_MANUAL_ENTRY_RECORD` 被置为 False
因此日志会看到“已跳过自动创建交易记录”。
2. **SYNC_RECOVER_MISSING_POSITIONS**(默认 `True`
为 True 时,在**未**被上一条关闭的前提下会对「币安有仓、DB 无 open」的 symbol 做**补建**:写 DB、挂 SL/TP、纳入监控。
## 让币安持仓与 DB 一致(推荐配置)
目标:让那 15 个(或更多)「仅币安有仓」的持仓在下次同步时自动写入 DB、挂止损止盈并进入监控。
1. **ONLY_AUTO_TRADE_CREATES_RECORDS = False**
允许同步/补建时创建 DB 记录(必改,否则补建永远关闭)。
2. **SYNC_RECOVER_MISSING_POSITIONS = True**
开启「补建缺失持仓」(通常已是 True只要没被上一条覆盖即可
3. 修改方式:
- **推荐**:在**后台配置/仪表盘**的「持仓」类配置中,将 `ONLY_AUTO_TRADE_CREATES_RECORDS` 设为 `false`(保存后会写入 Redistrading_system 下次拉取配置即生效)。
- 或直接在 Redis / 数据库配置表中把 `ONLY_AUTO_TRADE_CREATES_RECORDS` 设为 false。
- 若策略从本地 `config.py` 读配置,则在该处将 `ONLY_AUTO_TRADE_CREATES_RECORDS` 设为 False。
4. **重启 trading_system** 或等待下一次持仓同步(例如定时 sync 或启动时 sync即可对当前「币安有、DB 无」的持仓执行补建。
补建时会:
- 为每个 symbol 创建一条 open 交易记录(`entry_reason` 为 `sync_recovered``sync_recovered_unknown_origin`
- 先读交易所已有止损/止盈(若有且已达保本则沿用),否则用配置的 `STOP_LOSS_PERCENT` / `TAKE_PROFIT_PERCENT` 计算并挂单;
- 将仓位加入内存监控(保本/移动止损等)。
## 可选配置
- **SYNC_RECOVER_ONLY_WHEN_HAS_SLTP**(默认 True
未配置 `SYSTEM_ORDER_ID_PREFIX` 时:仅对「已有止损/止盈单」的持仓补建。若希望**无 SL/TP 的仓位也补建**,可设为 False。
- **SYSTEM_ORDER_ID_PREFIX**
若配置了系统单前缀(如 `SYS`),补建会尝试用开仓订单的 `clientOrderId` 识别是否为本系统单;无论是否带前缀,当前逻辑都会**一律补建并挂 SL/TP**(不再因“来历不明”或“无 SL/TP”跳过
- **SYNC_CREATE_MANUAL_ENTRY_RECORD**(默认 False
仅当 `sync_recover` 为 False 时生效:为 True 时会对「仅币安有仓」走另一条「手动开仓」建记录分支。通常只要把 `ONLY_AUTO_TRADE_CREATES_RECORDS=False``SYNC_RECOVER_MISSING_POSITIONS=True` 即可,不必单独开这个。
## 日志说明
- 若看到:
`因 ONLY_AUTO_TRADE_CREATES_RECORDS=True 已关闭补建,共 N 个仅币安持仓未写入 DB。`
表示当前配置不允许补建,按上文把 `ONLY_AUTO_TRADE_CREATES_RECORDS` 设为 False 并保证 `SYNC_RECOVER_MISSING_POSITIONS=True` 即可。
- 若看到:
`→ 补建缺失持仓:一律写入 DB、自动挂止损止盈并纳入监控`
表示补建已开启,下次同步会对缺失的 symbol 执行补建。