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

5.2 KiB
Raw Permalink Blame History

配置值格式转换修复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
  • 兼容数据库中存储的百分比形式和比例形式

代码

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系统会自动转换