161 lines
4.8 KiB
Markdown
161 lines
4.8 KiB
Markdown
# 分步止盈状态细分实施完成总结(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_profit`
|
||
- `take_profit_partial_then_take_profit`(完整成功)
|
||
- `take_profit_partial_then_stop`(部分成功:第一目标已达成)
|
||
- `take_profit_partial_then_trailing_stop`(部分成功:第一目标已达成)
|
||
|
||
**失败单**:
|
||
- `stop_loss`(纯止损)
|
||
- `trailing_stop`(如果未启用分步止盈)
|
||
|
||
**中性单**:
|
||
- `manual`
|
||
- `sync`
|
||
|
||
---
|
||
|
||
### 盈亏比统计
|
||
|
||
**盈利单**:
|
||
- 所有`take_profit*`状态
|
||
- 计算时,`take_profit_partial_then_stop`应该算作盈利(第一目标已达成)
|
||
|
||
**亏损单**:
|
||
- `stop_loss`(纯止损)
|
||
- `trailing_stop`(如果未启用分步止盈)
|
||
|
||
---
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **数据库迁移**:
|
||
- 执行`backend/database/add_partial_profit_exit_reasons.sql`
|
||
- 更新字段注释,说明新的状态值
|
||
|
||
2. **向后兼容**:
|
||
- 保留原有状态值,不影响现有数据
|
||
- 新状态仅用于新交易
|
||
|
||
3. **统计逻辑更新**:
|
||
- 前端统计展示需要更新,将`take_profit_partial_then_*`状态归类为"成功"或"部分成功"
|
||
|
||
---
|
||
|
||
## 📝 下一步
|
||
|
||
1. **执行数据库迁移**:
|
||
```bash
|
||
mysql -u root -p auto_trade_sys < backend/database/add_partial_profit_exit_reasons.sql
|
||
```
|
||
|
||
2. **更新前端统计逻辑**:
|
||
- 修改统计展示,将`take_profit_partial_then_*`状态归类为"成功"
|
||
- 可以添加"部分成功"分类,用于更详细的分析
|
||
|
||
3. **测试验证**:
|
||
- 测试分步止盈场景,验证状态设置正确
|
||
- 验证统计结果是否准确
|
||
|
||
---
|
||
|
||
## ✅ 总结
|
||
|
||
**问题**:
|
||
- 日志文案与实际配置不一致
|
||
- 状态管理不完整,无法区分"纯止损"和"第一目标止盈后剩余仓位止损"
|
||
- 统计准确性受影响
|
||
|
||
**解决方案**:
|
||
- ✅ 更新日志文案,使用实际配置值
|
||
- ✅ 细分订单状态,新增`take_profit_partial_then_*`状态
|
||
- ✅ 更新代码逻辑,根据`partial_profit_taken`设置正确的状态
|
||
|
||
**预期效果**:
|
||
- ✅ 更准确的状态管理
|
||
- ✅ 更准确的胜率、盈亏比统计
|
||
- ✅ 更清晰的日志输出
|