소스 검색

Enhance position synchronization with unique identifiers.

- Updated BOT_VERSION for the upcoming release.
- Introduced UUIDs for entry and exit order IDs in PositionSynchronizer to improve tracking and avoid conflicts.
- Enhanced logging and synchronization processes for orphaned positions, ensuring better diagnostics and reliability.
Carles Sentis 1 일 전
부모
커밋
5288e79fe6
2개의 변경된 파일12개의 추가작업 그리고 7개의 파일을 삭제
  1. 11 6
      src/monitoring/position_synchronizer.py
  2. 1 1
      trading_bot.py

+ 11 - 6
src/monitoring/position_synchronizer.py

@@ -5,6 +5,7 @@ Handles synchronization of bot's position state with the exchange.
 
 import logging
 import asyncio
+import uuid
 from datetime import datetime, timezone
 from typing import Optional, Dict, Any, List
 
@@ -89,16 +90,17 @@ class PositionSynchronizer:
                     
                     logger.info(f"🔄 AUTO-SYNC: Orphaned position detected - {symbol} {position_side.upper()} {actual_contracts_size} @ ${final_entry_price:.4f} {price_source_log}")
                     
+                    unique_sync_id = str(uuid.uuid4())[:8]
                     lifecycle_id = stats.create_trade_lifecycle(
                         symbol=symbol, side=order_side, 
-                        entry_order_id=f"external_sync_{int(datetime.now(timezone.utc).timestamp())}",
+                        entry_order_id=f"external_sync_{unique_sync_id}",
                         trade_type='external_sync'
                     )
                     
                     if lifecycle_id:
                         success = stats.update_trade_position_opened(
                             lifecycle_id, final_entry_price, actual_contracts_size,
-                            f"external_fill_sync_{int(datetime.now(timezone.utc).timestamp())}"
+                            f"external_fill_sync_{unique_sync_id}"
                         )
                         
                         if success:
@@ -189,11 +191,12 @@ class PositionSynchronizer:
                     elif position_side == 'short':
                         realized_pnl = position_size_for_pnl * (entry_price - exit_price_for_calc)
                     
+                    unique_flat_id = str(uuid.uuid4())[:8]
                     success = stats.update_trade_position_closed(
                         lifecycle_id=lc_id,
                         exit_price=exit_price_for_calc, 
                         realized_pnl=realized_pnl,
-                        exchange_fill_id=f"auto_sync_flat_{int(datetime.now(timezone.utc).timestamp())}"
+                        exchange_fill_id=f"auto_sync_flat_{unique_flat_id}"
                     )
                     
                     if success:
@@ -331,16 +334,17 @@ class PositionSynchronizer:
                     
                     logger.info(f"🔄 STARTUP: Auto-syncing orphaned position: {symbol} {position_side.upper()} {formatter.format_amount(contracts_abs, token_for_log)} @ {formatter.format_price_with_symbol(entry_price, token_for_log)} {price_source_log}")
                     
+                    unique_id = str(uuid.uuid4())[:8]
                     lifecycle_id = stats.create_trade_lifecycle(
                         symbol=symbol, side=order_side,
-                        entry_order_id=f"startup_sync_{int(datetime.now(timezone.utc).timestamp())}",
+                        entry_order_id=f"startup_sync_{unique_id}",
                         trade_type='external_startup_sync'
                     )
                     
                     if lifecycle_id:
                         success = stats.update_trade_position_opened(
                             lifecycle_id, entry_price, contracts_abs,
-                            f"startup_fill_sync_{int(datetime.now(timezone.utc).timestamp())}"
+                            f"startup_fill_sync_{unique_id}"
                         )
                         if success:
                             synced_count += 1
@@ -415,11 +419,12 @@ class PositionSynchronizer:
                         elif position_side_lc == 'short': 
                             realized_pnl = position_size_for_pnl * (entry_price_lc - exit_price_for_calc) 
                         
+                        unique_close_id = str(uuid.uuid4())[:8]
                         success_close = stats.update_trade_position_closed(
                             lifecycle_id=lc_id,
                             exit_price=exit_price_for_calc, 
                             realized_pnl=realized_pnl,
-                            exchange_fill_id=f"startup_sync_flat_{int(datetime.now(timezone.utc).timestamp())}"
+                            exchange_fill_id=f"startup_sync_flat_{unique_close_id}"
                         )
                         
                         if success_close:

+ 1 - 1
trading_bot.py

@@ -14,7 +14,7 @@ from datetime import datetime
 from pathlib import Path
 
 # Bot version
-BOT_VERSION = "2.3.155"
+BOT_VERSION = "2.3.156"
 
 # Add src directory to Python path
 sys.path.insert(0, str(Path(__file__).parent / "src"))