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

5.1 KiB
Raw Blame History

配置值格式统一 - 实施指南

🎯 统一原则

核心原则前端和后端使用相同的值比例形式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

执行

# 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

验证

-- 检查迁移结果:应该没有>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缓存

# 清除Redis缓存让系统重新加载配置
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config:*"

步骤3重启服务

# 重启后端服务
supervisorctl restart backend

# 重启交易进程
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4

步骤4验证配置值

检查日志

# 查看配置日志,确认配置值显示正确
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

优势

  • 避免中间转换出问题
  • 代码逻辑简单
  • 易于维护