4.5 KiB
4.5 KiB
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
问题:
-
第689-700行:选择"更紧的止损"(更接近入场价)
- BUY: 取最大值(更高的止损价,更接近入场价)✅
- SELL: 取最小值(更低的止损价,更接近入场价)✅
-
第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.082(ATR止损)
- 选择:max(0.075, 0.082) = 0.082(更宽松,更远离入场价)❌
- 结果:价格涨到0.0815时触发止损,亏损-91.93%
修复后
SELL单止损价格选择:
- 入场价:0.0731
- 候选止损价:0.075(保证金止损)、0.082(ATR止损)
- 选择:min(0.075, 0.082) = 0.075(更紧,更接近入场价)✅
- 结果:价格涨到0.075时触发止损,亏损约5%
🎯 预期效果
修复后预期:
- ✅ SELL单止损价格正确,选择"更紧"的止损(更接近入场价)
- ✅ 不再出现巨额亏损(-91.93%)
- ✅ 止损及时触发,保护资金
- ✅ 盈亏比改善(从0.39:1提升到1.5:1+)
⚠️ 注意事项
- 立即重启交易进程:修复后需要重启所有交易进程,让新代码生效
- 监控SELL单:修复后需要密切监控SELL单的止损价格和止损触发情况
- 检查现有持仓:如果有现有的SELL单持仓,需要检查止损价格是否正确
📝 相关配置
当前配置:
STOP_LOSS_PERCENT: 0.15(15%)ATR_STOP_LOSS_MULTIPLIER: 2.0MIN_STOP_LOSS_PRICE_PCT: 0.02(2%)
建议:
- 保持当前配置,修复后应该能正常工作
- 如果仍然出现止损过宽的问题,可以考虑降低
ATR_STOP_LOSS_MULTIPLIER到1.5