# 配置值格式简化方案 ## 🎯 简化原则 **核心原则**:用户直接输入小数(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),不需要转换 - ✅ 怎么简单准确怎么来