CRITICAL BUG FIXED (Nov 30, 2025): Position Manager was setting tp1Hit=true based ONLY on size mismatch, without verifying price actually reached TP1 target. This caused: - Premature order cancellation (on-chain TP1 removed before fill) - Lost profit potential (optimal exits missed) - Ghost orders after container restarts ROOT CAUSE (line 1086 in position-manager.ts): trade.tp1Hit = true // Set without checking this.shouldTakeProfit1() FIX IMPLEMENTED: - Added price verification: this.shouldTakeProfit1(currentPrice, trade) - Only set tp1Hit when BOTH conditions met: 1. Size reduced by 5%+ (positionSizeUSD < trade.currentSize * 0.95) 2. Price crossed TP1 target (this.shouldTakeProfit1 returns true) - Verbose logging for debugging (shows price vs target, size ratio) - Fallback: Update tracked size but don't trigger TP1 logic REAL INCIDENT: - Trade cmim4ggkr00canv07pgve2to9 (SHORT SOL-PERP Nov 30) - TP1 target: $137.07, actual exit: $136.84 - False detection triggered premature order cancellation - Position closed successfully but system integrity compromised FILES CHANGED: - lib/trading/position-manager.ts (lines 1082-1111) - CRITICAL_TP1_FALSE_DETECTION_BUG.md (comprehensive incident report) TESTING REQUIRED: - Monitor next trade with TP1 for correct detection - Verify logs show TP1 VERIFIED or TP1 price NOT reached - Confirm no premature order cancellation ALSO FIXED: - Restarted telegram-trade-bot to fix /status command conflict See: Common Pitfall #63 in copilot-instructions.md (to be added)
80 KiB
80 KiB