auto_trade_sys/docs/SELL单止损价格计算错误修复.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

4.5 KiB
Raw Blame History

SELL单止损价格计算错误修复

🚨 严重问题

问题描述

SELL单做空出现巨额亏损-91.93%),原因是止损价格计算逻辑错误,选择了"更宽松"的止损(更远离入场价),而不是"更紧"的止损(更接近入场价)。

具体案例

AXLUSDT SELL 单交易ID: 1727

  • 入场价0.0731
  • 出场价0.0815
  • 方向SELL做空
  • 盈亏比例:-91.93%(几乎亏光保证金)

问题分析

  • 做空单价格从0.0731涨到0.0815涨幅11.22%
  • 如果止损价格正确更接近入场价比如0.075应该在价格涨到0.075时止损亏损约5%
  • 但实际亏损-91.93%,说明止损价格设置错误,选择了"更宽松"的止损更远离入场价比如0.082

🔍 根本原因

代码逻辑矛盾

位置trading_system/risk_manager.py:689-757

问题

  1. 第689-700行:选择"更紧的止损"(更接近入场价)

    • BUY: 取最大值(更高的止损价,更接近入场价)
    • SELL: 取最小值(更低的止损价,更接近入场价)
  2. 第750-757行:重新选择最终的止损价,保持"更宽松/更远"的选择规则

    • BUY: 取最小值(更低的止损价,更远离入场价)
    • SELL: 取最大值(更高的止损价,更远离入场价)

结果

  • 第750-757行的逻辑会覆盖第689-700行的逻辑
  • 导致SELL单选择了"更宽松"的止损(更远离入场价)
  • 这就是为什么会出现-91.93%的巨额亏损

修复方案

修复内容

修改位置trading_system/risk_manager.py:750-757

修复前

# 重新选择最终的止损价(包括技术止损)
# 仍保持"更宽松/更远"的选择规则
if side == 'BUY':
    final_stop_loss = min(p[1] for p in candidate_prices)  # ❌ 更宽松
    selected_method = [p[0] for p in candidate_prices if p[1] == final_stop_loss][0]
else:
    final_stop_loss = max(p[1] for p in candidate_prices)  # ❌ 更宽松
    selected_method = [p[0] for p in candidate_prices if p[1] == final_stop_loss][0]

修复后

# ⚠️ 关键修复:重新选择最终的止损价(包括技术止损)
# 必须保持"更紧的止损"(更接近入场价)的选择规则,保护资金
# - 做多(BUY):止损价越低越紧 → 取最大值(更高的止损价,更接近入场价)
# - 做空(SELL):止损价越高越紧 → 取最小值(更低的止损价,更接近入场价)
if side == 'BUY':
    # 做多:选择更高的止损价(更接近入场价,更紧)
    final_stop_loss = max(p[1] for p in candidate_prices)  # ✅ 更紧
    selected_method = [p[0] for p in candidate_prices if p[1] == final_stop_loss][0]
else:
    # 做空:选择更低的止损价(更接近入场价,更紧)
    # ⚠️ 注意对于SELL单止损价高于入场价所以"更低的止损价"意味着更接近入场价
    final_stop_loss = min(p[1] for p in candidate_prices)  # ✅ 更紧
    selected_method = [p[0] for p in candidate_prices if p[1] == final_stop_loss][0]

📊 修复效果

修复前

SELL单止损价格选择

  • 入场价0.0731
  • 候选止损价0.075保证金止损、0.082ATR止损
  • 选择max(0.075, 0.082) = 0.082(更宽松,更远离入场价)
  • 结果价格涨到0.0815时触发止损,亏损-91.93%

修复后

SELL单止损价格选择

  • 入场价0.0731
  • 候选止损价0.075保证金止损、0.082ATR止损
  • 选择min(0.075, 0.082) = 0.075(更紧,更接近入场价)
  • 结果价格涨到0.075时触发止损亏损约5%

🎯 预期效果

修复后预期:

  • SELL单止损价格正确选择"更紧"的止损(更接近入场价)
  • 不再出现巨额亏损(-91.93%
  • 止损及时触发,保护资金
  • 盈亏比改善从0.39:1提升到1.5:1+

⚠️ 注意事项

  1. 立即重启交易进程:修复后需要重启所有交易进程,让新代码生效
  2. 监控SELL单修复后需要密切监控SELL单的止损价格和止损触发情况
  3. 检查现有持仓如果有现有的SELL单持仓需要检查止损价格是否正确

📝 相关配置

当前配置:

  • STOP_LOSS_PERCENT: 0.1515%
  • ATR_STOP_LOSS_MULTIPLIER: 2.0
  • MIN_STOP_LOSS_PRICE_PCT: 0.022%

建议:

  • 保持当前配置,修复后应该能正常工作
  • 如果仍然出现止损过宽的问题,可以考虑降低ATR_STOP_LOSS_MULTIPLIER到1.5