auto_trade_sys/docs/配置值格式统一_实施指南.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

210 lines
5.1 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.

# 配置值格式统一 - 实施指南
## 🎯 统一原则
**核心原则**前端和后端使用相同的值比例形式0.30),只在显示时转换
### 数据格式
| 位置 | 格式 | 示例 | 说明 |
|------|------|------|------|
| **数据库存储** | 比例形式 | 0.30 | 表示30% |
| **前端显示** | 百分比形式 | 30% | 用户看到30%(仅显示转换) |
| **前端存储** | 比例形式 | 0.30 | 用户输入30转换为0.30存储 |
| **后端使用** | 比例形式 | 0.30 | 直接使用,不需要转换 |
---
## ✅ 当前实现状态
### 前端逻辑(已正确)
**显示逻辑**
- 从数据库读取0.30显示为30%(用户看到)
- 仅做显示转换,不改变存储值
**存储逻辑**
- 用户输入30转换为0.30存储
- 存储的值与后端使用相同的值0.30
**结论**:✅ **前端逻辑正确**,存储的值与后端一致
---
### 后端逻辑(已优化)
**当前实现**
- 直接使用比例形式0.30
- 临时兼容性处理:如果值>1转换为0.30(处理旧数据)
**结论**:✅ **后端逻辑正确**,数据迁移后可以移除兼容性处理
---
## 🔧 实施步骤
### 步骤1执行数据迁移必须
**目的**将数据库中的百分比形式30转换为比例形式0.30
**脚本**`backend/database/migrate_percent_configs_to_ratio.sql`
**执行**
```bash
# 1. 备份数据库(强烈推荐)
mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. 执行SQL迁移脚本
mysql -u username -p database_name < backend/database/migrate_percent_configs_to_ratio.sql
```
**验证**
```sql
-- 检查迁移结果:应该没有>1的值
SELECT config_key, config_value
FROM trading_config
WHERE config_key IN (
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT'
)
AND config_type = 'number'
AND CAST(config_value AS DECIMAL(10, 4)) > 1;
-- 应该返回0行
```
---
### 步骤2清除Redis缓存
```bash
# 清除Redis缓存让系统重新加载配置
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config:*"
```
---
### 步骤3重启服务
```bash
# 重启后端服务
supervisorctl restart backend
# 重启交易进程
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4
```
---
### 步骤4验证配置值
**检查日志**
```bash
# 查看配置日志,确认配置值显示正确
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep "交易配置"
```
**预期结果**
- 移动止损激活条件盈利30%而不是3000%
- 移动止损保护利润15%而不是1500%
- 最小波动率3%而不是300%
---
## 📊 数据流
### 统一后的数据流
```
用户输入30
前端输入转换30 -> 0.30(仅前端输入时转换)
存储到数据库0.30(与后端使用相同的值)
前端显示转换0.30 -> 30%仅显示时转换用户看到30%
后端读取0.30(直接使用,不需要转换)
后端使用0.30(直接使用)
```
---
## ✅ 优势
### 统一格式的优势
1. **数据格式统一**
- 数据库存储0.30
- 前端存储0.30
- 后端使用0.30
- ✅ 三者一致,避免格式混乱
2. **代码逻辑简单**
- 前端只在输入和显示时转换
- 后端直接使用,不需要转换
- ✅ 减少出错,易于维护
3. **避免中间转换问题**
- 前端存储的值与后端使用的值一致
- 不需要在代码中做格式转换
- ✅ 避免转换错误
---
## 📝 总结
### 最终方案
1. **数据库存储**比例形式0.30表示30%
2. **前端显示**百分比形式30%,用户看到)
3. **前端存储**比例形式0.30,与后端使用相同的值)
4. **后端使用**比例形式0.30,直接使用)
### 转换位置
-**前端输入时转换**30 -> 0.30用户输入30存储0.30
-**前端显示时转换**0.30 -> 30%用户看到30%
-**后端直接使用**0.30(不需要转换)
### 实施建议
1. **立即执行数据迁移**:统一数据格式
2. **保留格式转换作为兼容性处理**:标记为临时方案
3. **后续可以移除格式转换**:数据格式统一后,可以移除
---
## 🎯 关键点
### 前端和后端使用相同的值
-**前端存储**0.30用户输入30转换为0.30
-**后端使用**0.30(直接使用)
-**两者一致**:避免中间转换出问题
### 只在显示时转换
-**前端显示**30%(用户看到)
-**前端存储**0.30(与后端一致)
-**后端使用**0.30(直接使用)
---
## ✅ 结论
**前端和后端使用相同的值比例形式0.30**
- ✅ 前端输入时转换30 -> 0.30用户输入30存储0.30
- ✅ 前端显示时转换0.30 -> 30%用户看到30%
- ✅ 后端直接使用0.30(不需要转换)
- ✅ 数据格式统一数据库、前端、后端都是0.30
**优势**
- ✅ 避免中间转换出问题
- ✅ 代码逻辑简单
- ✅ 易于维护