4.8 KiB
4.8 KiB
分步止盈状态细分实施完成总结(2026-01-27)
✅ 已完成的优化
1. 日志文案优化
修改位置:trading_system/position_manager.py:2858-2865
优化内容:
- 动态读取
TAKE_PROFIT_PERCENT配置值 - 更新日志文案,使用实际配置值(如10%)而不是硬编码的"30%"
效果:
- 日志更准确,反映实际配置
- 配置变更后,日志自动更新
2. 订单状态细分
新增状态类型:
take_profit_partial_then_take_profit: 第一目标止盈后,剩余仓位第二目标止盈take_profit_partial_then_stop: 第一目标止盈后,剩余仓位止损(保本)take_profit_partial_then_trailing_stop: 第一目标止盈后,剩余仓位移动止损
保留原有状态:
take_profit: 单次止盈(未启用分步止盈)stop_loss: 止损trailing_stop: 移动止损manual: 手动平仓sync: 同步平仓
3. 代码修改位置
修改1:第二目标止盈状态
位置:trading_system/position_manager.py:2923
- 从
take_profit改为take_profit_partial_then_take_profit
修改2:剩余仓位止损状态(实时监控)
位置:trading_system/position_manager.py:2832-2835
- 检查
partial_profit_taken,如果为True,设置take_profit_partial_then_stop
修改3:剩余仓位止损状态(交易所止盈单检查)
位置:trading_system/position_manager.py:1553-1555
- 检查
partial_profit_taken,如果为True,根据是否移动止损设置相应状态
修改4:剩余仓位移动止损状态(实时监控)
位置:trading_system/position_manager.py:2798-2800
- 检查
partial_profit_taken,如果为True,根据是否移动止损设置相应状态
4. 数据库迁移脚本
文件:backend/database/add_partial_profit_exit_reasons.sql
内容:
- 更新
exit_reason字段注释,说明新的状态值 - 验证字段长度
- 查看当前状态分布
📊 状态映射表
| 场景 | 原状态 | 新状态 | 说明 |
|---|---|---|---|
| 第一目标止盈(50%)→ 第二目标止盈(剩余50%) | take_profit |
take_profit_partial_then_take_profit |
完整成功 |
| 第一目标止盈(50%)→ 剩余仓位止损(保本) | stop_loss |
take_profit_partial_then_stop |
部分成功 |
| 第一目标止盈(50%)→ 剩余仓位移动止损 | trailing_stop |
take_profit_partial_then_trailing_stop |
部分成功 |
| 单次止盈(未启用分步止盈) | take_profit |
take_profit |
保持 |
| 止损 | stop_loss |
stop_loss |
保持 |
| 移动止损 | trailing_stop |
trailing_stop |
保持 |
| 手动平仓 | manual |
manual |
保持 |
| 同步平仓 | sync |
sync |
保持 |
🎯 统计分类建议
胜率统计
成功单:
take_profittake_profit_partial_then_take_profit(完整成功)take_profit_partial_then_stop(部分成功:第一目标已达成)take_profit_partial_then_trailing_stop(部分成功:第一目标已达成)
失败单:
stop_loss(纯止损)trailing_stop(如果未启用分步止盈)
中性单:
manualsync
盈亏比统计
盈利单:
- 所有
take_profit*状态 - 计算时,
take_profit_partial_then_stop应该算作盈利(第一目标已达成)
亏损单:
stop_loss(纯止损)trailing_stop(如果未启用分步止盈)
⚠️ 注意事项
-
数据库迁移:
- 执行
backend/database/add_partial_profit_exit_reasons.sql - 更新字段注释,说明新的状态值
- 执行
-
向后兼容:
- 保留原有状态值,不影响现有数据
- 新状态仅用于新交易
-
统计逻辑更新:
- 前端统计展示需要更新,将
take_profit_partial_then_*状态归类为"成功"或"部分成功"
- 前端统计展示需要更新,将
📝 下一步
-
执行数据库迁移:
mysql -u root -p auto_trade_sys < backend/database/add_partial_profit_exit_reasons.sql -
更新前端统计逻辑:
- 修改统计展示,将
take_profit_partial_then_*状态归类为"成功" - 可以添加"部分成功"分类,用于更详细的分析
- 修改统计展示,将
-
测试验证:
- 测试分步止盈场景,验证状态设置正确
- 验证统计结果是否准确
✅ 总结
问题:
- 日志文案与实际配置不一致
- 状态管理不完整,无法区分"纯止损"和"第一目标止盈后剩余仓位止损"
- 统计准确性受影响
解决方案:
- ✅ 更新日志文案,使用实际配置值
- ✅ 细分订单状态,新增
take_profit_partial_then_*状态 - ✅ 更新代码逻辑,根据
partial_profit_taken设置正确的状态
预期效果:
- ✅ 更准确的状态管理
- ✅ 更准确的胜率、盈亏比统计
- ✅ 更清晰的日志输出