auto_trade_sys/docs/配置值格式转换修复_2026-01-26.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

169 lines
5.2 KiB
Markdown
Raw Permalink 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.

# 配置值格式转换修复2026-01-26
## 🚨 问题描述
### 问题1配置值格式不一致
**数据库中的配置值**(百分比形式):
- `TRAILING_STOP_ACTIVATION` = 30表示30%
- `TRAILING_STOP_PROTECT` = 15表示15%
- `MIN_VOLATILITY` = 3表示3%
**代码期望的格式**(比例形式):
- `TRAILING_STOP_ACTIVATION` = 0.30表示30%
- `TRAILING_STOP_PROTECT` = 0.15表示15%
- `MIN_VOLATILITY` = 0.03表示3%
**问题**
- 如果数据库中存储的是百分比形式30代码中 `trailing_activation * 100` 会变成 `30 * 100 = 3000`
- 导致移动止损永远不会激活需要盈利3000%才激活)
- 导致止盈价计算错误止盈目标显示为683.17%等异常值)
### 问题2止盈价计算错误
**日志显示**
- AUCTIONUSDT 盈利30.52%,但止盈目标是**683.17%**
- ROSEUSDT 盈利30.12%,但止盈目标是**306.38%**
- AXSUSDT 盈利80.86%,但止盈目标是**470.29%**
**原因**
- 如果 `TAKE_PROFIT_PERCENT = 30`(百分比形式),那么 `margin * 30 = 30倍保证金`
- 导致止盈价计算错误,止盈目标异常高
---
## 🔧 修复方案
### 修复1配置值格式转换backend/config_manager.py
**位置**`backend/config_manager.py:720-733`
**修复**
-`eff_get()` 函数中添加格式转换逻辑
- 如果配置值是百分比形式(>1自动转换为比例形式除以100
- 兼容数据库中存储的百分比形式和比例形式
**代码**
```python
def eff_get(key: str, default: Any):
# ... 读取配置值 ...
# ⚠️ 关键修复:百分比配置值格式转换
if isinstance(value, (int, float)) and value is not None:
percent_keys = [
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT',
# ... 其他百分比配置项 ...
]
if key in percent_keys:
# 如果值>1认为是百分比形式转换为比例形式
if value > 1:
value = value / 100.0
logger.debug(f"配置值格式转换: {key} = {value*100:.2f}%")
return value
```
### 修复2日志输出修复trading_system/main.py
**位置**`trading_system/main.py:344-347, 355`
**修复**
- 修复移动止损激活条件和保护利润的显示
- 修复最小波动率的显示
- 确保配置值格式正确后再显示
### 修复3移动止损逻辑修复trading_system/position_manager.py
**位置**`trading_system/position_manager.py:1442-1447`
**修复**
- 在使用移动止损配置值前,检查并转换格式
- 确保移动止损能正确激活
### 修复4止盈价计算修复trading_system/risk_manager.py
**位置**`trading_system/risk_manager.py:814-820`
**修复**
- 在使用 `TAKE_PROFIT_PERCENT` 前,检查并转换格式
- 确保止盈价计算正确
### 修复5开仓时止盈计算修复trading_system/position_manager.py
**位置**`trading_system/position_manager.py:512-515`
**修复**
- 在使用 `TAKE_PROFIT_PERCENT` 前,检查并转换格式
- 确保开仓时止盈价计算正确
### 修复6推荐系统止盈计算修复trading_system/trade_recommender.py
**位置**`trading_system/trade_recommender.py:455-460`
**修复**
- 在使用 `TAKE_PROFIT_PERCENT` 前,检查并转换格式
- 确保推荐系统止盈价计算正确
---
## 📊 修复效果
### 修复前
**配置值**
- `TRAILING_STOP_ACTIVATION` = 30百分比形式
- 代码中 `30 * 100 = 3000`,移动止损永远不会激活
**止盈价**
- `TAKE_PROFIT_PERCENT` = 30百分比形式
- `margin * 30 = 30倍保证金`止盈目标显示为683.17%等异常值
### 修复后
**配置值**
- `TRAILING_STOP_ACTIVATION` = 30 → 自动转换为 0.30(比例形式)
- 代码中 `0.30 * 100 = 30`移动止损在盈利30%时激活 ✅
**止盈价**
- `TAKE_PROFIT_PERCENT` = 30 → 自动转换为 0.30(比例形式)
- `margin * 0.30 = 30%保证金`止盈目标显示为30% ✅
---
## ✅ 修复完成
**修复文件**
1. `backend/config_manager.py`:配置值格式转换(核心修复)
2. `trading_system/main.py`:日志输出修复
3. `trading_system/position_manager.py`:移动止损和止盈计算修复
4. `trading_system/risk_manager.py`:止盈价计算修复
5. `trading_system/trade_recommender.py`:推荐系统止盈计算修复
**下一步**
1. 重启交易进程,让修复生效
2. 观察日志,确认配置值显示正确
3. 观察止盈单确认止盈目标正常30%而不是683%
4. 观察移动止损确认在盈利30%时激活
---
## 📝 注意事项
1. **兼容性**
- 修复后系统同时支持百分比形式30和比例形式0.30
- 如果值>1自动转换为比例形式
- 如果值<=1直接使用
2. **数据库**
- 数据库中的配置值可以保持百分比形式30
- 系统会自动转换,不需要修改数据库
3. **前端**
- 前端显示时需要将比例形式转换为百分比形式乘以100
- 前端输入时可以输入百分比形式30系统会自动转换