4.3 KiB
4.3 KiB
交易流程分析与优化方案
🔴 当前严重问题:亏损达到30%以上
问题分析
根据最近的交易记录:
- CLOUSDT SELL: -17.54% (手动平仓)
- ICNTUSDT BUY: -19.60% (手动平仓)
- 0GUSDT BUY: -31.34% (手动平仓)
- ALCHUSDT BUY: -30.95% (同步平仓)
核心问题:止损没有及时触发,导致亏损远超止损设置(通常止损设置为8-10%)
根本原因
-
最小持仓时间锁阻止止损触发 ⚠️ 最严重
MIN_HOLD_TIME_SEC = 1800秒(30分钟)- 在持仓前30分钟内,即使触发止损,系统也会禁止平仓
- 这导致止损单无法执行,亏损持续扩大
- 对于小众币,30分钟内价格可能剧烈波动,亏损可能达到30%以上
-
交易所级别止损单可能未正确挂单
- 如果
_ensure_exchange_sltp_orders失败,只有本地监控 - 本地监控被时间锁阻止,无法平仓
- 如果
-
止损检查逻辑在时间锁之后
- 代码顺序:先检查时间锁 → 如果不足30分钟,直接
continue/return - 止损检查逻辑永远不会执行
- 代码顺序:先检查时间锁 → 如果不足30分钟,直接
📊 当前交易流程
开仓流程
- 市场扫描(每30分钟)
- 信号筛选(MIN_SIGNAL_STRENGTH >= 8)
- 计算止损止盈(基于ATR或保证金)
- 挂限价单开仓
- 订单成交后:
- 保存交易记录到数据库
- 在币安挂止损/止盈保护单(
_ensure_exchange_sltp_orders) - 启动WebSocket实时监控
平仓流程(当前有严重问题)
方式1:交易所级别止损/止盈单(最可靠)
- 币安自动触发,不受时间锁影响
- 但如果挂单失败,就没有保护
方式2:本地监控检查(被时间锁阻止)
check_stop_loss_take_profit()定期检查_check_single_position()WebSocket实时监控- 都被
MIN_HOLD_TIME_SEC阻止,前30分钟无法平仓
✅ 优化方案(已实施)
1. ✅ 完全移除最小持仓时间锁(已修复)
问题:时间锁阻止止损和止盈,导致亏损扩大和利润回吐
解决方案:✅ 完全移除时间锁限制
- ✅ 止损检查在时间锁之前执行,立即平仓
- ✅ 止盈也立即执行,不受时间锁限制
- ✅ 止损和止盈逻辑一致,都立即执行
- ✅ 修复了三个位置:
check_stop_loss_take_profit()、_check_single_position()和移动止损检查
移除理由:
- 止损和止盈都应该立即执行,保护资金和利润
- 交易所级别的止损/止盈单已提供保护
- 分步止盈策略本身已提供利润保护(50%在1:1止盈,剩余保本)
- 及时执行可以避免价格回落导致的利润回吐
- 如果需要防止秒级平仓,可以通过提高入场信号质量(MIN_SIGNAL_STRENGTH)来实现
2. 确保交易所级别止损单正确挂单
- 增加日志,记录挂单成功/失败
- 如果挂单失败,重试机制
- 定期检查并补挂止损单
3. 优化止损逻辑
- 止损检查应该在时间锁之前(如果采用选项B)
- 或者完全移除时间锁对止损的限制
4. 针对小众币的优化
- 提高最小成交量要求(避免流动性差的币)
- 增大止损距离(ATR倍数)以应对高波动
- 降低杠杆倍数(降低风险)
🎯 具体修复建议
立即修复(高优先级)
-
移除时间锁对止损的限制
- 止损应该立即执行,不受时间锁影响
- 时间锁只应用于止盈(防止过早止盈)
-
增强止损单挂单可靠性
- 增加重试机制
- 增加失败告警
- 定期检查并补挂
-
优化止损检查逻辑
- 确保止损检查在时间锁之前(如果保留时间锁)
- 或者完全移除时间锁
中期优化
-
提高入场信号质量
- 提高
MIN_SIGNAL_STRENGTH到 9-10 - 只交易高质量信号
- 提高
-
优化止损距离
- 对于小众币,使用更大的ATR倍数(2.0-2.5)
- 确保止损距离足够,不会被正常波动触发
-
降低杠杆
- 对于小众币,降低杠杆到5-8倍
- 降低单笔仓位到5%
📈 预期效果
修复后:
- ✅ 止损能及时触发,亏损控制在8-10%以内
- ✅ 不会出现30%以上的大额亏损
- ✅ 胜率提升(及时止损,避免大亏)
- ✅ 盈亏比改善(小亏大赚)