200 lines
4.4 KiB
Markdown
200 lines
4.4 KiB
Markdown
# 配置值格式简化方案
|
||
|
||
## 🎯 简化原则
|
||
|
||
**核心原则**:用户直接输入小数(0.30),不做任何换算,怎么简单准确怎么来
|
||
|
||
### 数据格式
|
||
|
||
| 位置 | 格式 | 示例 | 说明 |
|
||
|------|------|------|------|
|
||
| **数据库存储** | 比例形式 | 0.30 | 表示30% |
|
||
| **前端显示** | 比例形式 | 0.30 | 直接显示数据库中的值 |
|
||
| **前端输入** | 比例形式 | 0.30 | 用户直接输入小数 |
|
||
| **前端存储** | 比例形式 | 0.30 | 直接存储,不做转换 |
|
||
| **后端使用** | 比例形式 | 0.30 | 直接使用,不需要转换 |
|
||
|
||
---
|
||
|
||
## ✅ 简化后的实现
|
||
|
||
### 前端逻辑
|
||
|
||
**显示逻辑**:
|
||
```javascript
|
||
// 直接显示数据库中的值(0.30)
|
||
return formatPercent(numVal <= 1 ? numVal : numVal / 100)
|
||
```
|
||
|
||
**输入逻辑**:
|
||
```javascript
|
||
// 用户直接输入小数(0.30),直接存储,不做转换
|
||
if (processedValue < 0 || processedValue > 1) {
|
||
return // 验证范围:0-1之间
|
||
}
|
||
// 直接使用输入的值(0.30),不做转换
|
||
```
|
||
|
||
**验证逻辑**:
|
||
```javascript
|
||
// 验证范围:0-1之间(比例形式)
|
||
if (numValue < 0 || numValue > 1) {
|
||
return // 超出范围,不更新
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 后端逻辑
|
||
|
||
**使用逻辑**:
|
||
```python
|
||
# 直接使用数据库中的值(0.30),不需要转换
|
||
value = config_value # 0.30
|
||
```
|
||
|
||
**临时兼容性处理**:
|
||
```python
|
||
# 如果值>1,说明可能是旧数据(百分比形式),转换为比例形式
|
||
if value > 1:
|
||
value = value / 100.0 # 30 -> 0.30
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 数据流
|
||
|
||
### 简化后的数据流
|
||
|
||
```
|
||
用户输入0.30
|
||
↓
|
||
前端验证:0-1之间 ✅
|
||
↓
|
||
直接存储到数据库:0.30(不做转换)✅
|
||
↓
|
||
前端显示:0.30(直接显示)✅
|
||
↓
|
||
后端读取:0.30(直接使用)✅
|
||
↓
|
||
后端使用:0.30(不需要转换)✅
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 优势
|
||
|
||
### 简化的优势
|
||
|
||
1. **逻辑简单**:
|
||
- 用户输入0.30,直接存储0.30
|
||
- 不需要做任何换算
|
||
- ✅ 减少出错,易于理解
|
||
|
||
2. **数据一致**:
|
||
- 前端输入:0.30
|
||
- 前端存储:0.30
|
||
- 后端使用:0.30
|
||
- ✅ 三者完全一致
|
||
|
||
3. **避免转换错误**:
|
||
- 不需要30 -> 0.30的转换
|
||
- 不需要0.30 -> 30%的显示转换
|
||
- ✅ 避免转换过程中的错误
|
||
|
||
---
|
||
|
||
## 📝 使用说明
|
||
|
||
### 用户输入示例
|
||
|
||
**正确输入**:
|
||
- `0.30` → 表示30%
|
||
- `0.15` → 表示15%
|
||
- `0.01` → 表示1%
|
||
|
||
**错误输入**:
|
||
- `30` → 超出范围(>1),会被拒绝
|
||
- `1.5` → 超出范围(>1),会被拒绝
|
||
|
||
### 配置项说明
|
||
|
||
**百分比配置项**(需要输入0-1之间的小数):
|
||
- `TAKE_PROFIT_PERCENT`: 0.30(表示30%)
|
||
- `STOP_LOSS_PERCENT`: 0.15(表示15%)
|
||
- `TRAILING_STOP_ACTIVATION`: 0.30(表示30%)
|
||
- `TRAILING_STOP_PROTECT`: 0.15(表示15%)
|
||
- `MIN_VOLATILITY`: 0.03(表示3%)
|
||
|
||
---
|
||
|
||
## 🔧 实施步骤
|
||
|
||
### 步骤1:执行数据迁移(必须)
|
||
|
||
**目的**:将数据库中的百分比形式(30)转换为比例形式(0.30)
|
||
|
||
**脚本**:`backend/database/migrate_percent_configs_to_ratio.sql`
|
||
|
||
**执行**:
|
||
```bash
|
||
# 执行SQL迁移脚本
|
||
mysql -u username -p database_name < backend/database/migrate_percent_configs_to_ratio.sql
|
||
```
|
||
|
||
---
|
||
|
||
### 步骤2:清除Redis缓存
|
||
|
||
```bash
|
||
# 清除Redis缓存,让系统重新加载配置
|
||
redis-cli DEL "config:trading_config:*"
|
||
redis-cli DEL "config:global_strategy_config:*"
|
||
```
|
||
|
||
---
|
||
|
||
### 步骤3:验证配置值
|
||
|
||
**检查前端显示**:
|
||
- 配置项应该显示为0.30(而不是30%)
|
||
- 用户输入0.30,直接存储0.30
|
||
|
||
**检查后端日志**:
|
||
```bash
|
||
# 查看配置日志,确认配置值正确
|
||
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep "交易配置"
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 总结
|
||
|
||
### 简化方案
|
||
|
||
1. **用户输入**:直接输入小数(0.30)
|
||
2. **前端存储**:直接存储(0.30),不做转换
|
||
3. **后端使用**:直接使用(0.30),不需要转换
|
||
|
||
### 关键点
|
||
|
||
- ✅ **逻辑简单**:不需要任何换算
|
||
- ✅ **数据一致**:前端和后端使用相同的值
|
||
- ✅ **避免错误**:减少转换过程中的错误
|
||
|
||
### 使用建议
|
||
|
||
- ✅ **用户输入**:直接输入0.30(表示30%)
|
||
- ✅ **验证范围**:0-1之间(比例形式)
|
||
- ✅ **存储格式**:0.30(与后端使用相同的值)
|
||
|
||
---
|
||
|
||
## 🎯 最终结论
|
||
|
||
**简化方案**:
|
||
- ✅ 用户直接输入小数(0.30)
|
||
- ✅ 前端直接存储(0.30),不做转换
|
||
- ✅ 后端直接使用(0.30),不需要转换
|
||
- ✅ 怎么简单准确怎么来
|