|
@@ -321,42 +321,36 @@ class TradeLifecycleManager:
|
|
|
logger.error(f"❌ Error confirming position with exchange: {e}")
|
|
|
return False
|
|
|
|
|
|
- def update_trade_market_data(self,
|
|
|
- trade_lifecycle_id: str,
|
|
|
- unrealized_pnl: Optional[float] = None,
|
|
|
- mark_price: Optional[float] = None,
|
|
|
- current_position_size: Optional[float] = None,
|
|
|
- entry_price: Optional[float] = None,
|
|
|
- liquidation_price: Optional[float] = None,
|
|
|
- margin_used: Optional[float] = None,
|
|
|
- leverage: Optional[float] = None,
|
|
|
- position_value: Optional[float] = None,
|
|
|
- unrealized_pnl_percentage: Optional[float] = None) -> bool:
|
|
|
+ def update_trade_market_data(self, lifecycle_id: str, current_position_size: Optional[float] = None,
|
|
|
+ unrealized_pnl: Optional[float] = None, roe_percentage: Optional[float] = None,
|
|
|
+ mark_price: Optional[float] = None, position_value: Optional[float] = None,
|
|
|
+ margin_used: Optional[float] = None, leverage: Optional[float] = None,
|
|
|
+ liquidation_price: Optional[float] = None) -> bool:
|
|
|
"""Update market data for a trade lifecycle."""
|
|
|
try:
|
|
|
# Build dynamic update query based on provided fields
|
|
|
update_fields = []
|
|
|
params = []
|
|
|
|
|
|
+ if current_position_size is not None:
|
|
|
+ update_fields.append("current_position_size = ?")
|
|
|
+ params.append(current_position_size)
|
|
|
+
|
|
|
if unrealized_pnl is not None:
|
|
|
update_fields.append("unrealized_pnl = ?")
|
|
|
params.append(unrealized_pnl)
|
|
|
|
|
|
+ if roe_percentage is not None:
|
|
|
+ update_fields.append("roe_percentage = ?")
|
|
|
+ params.append(roe_percentage)
|
|
|
+
|
|
|
if mark_price is not None:
|
|
|
update_fields.append("mark_price = ?")
|
|
|
params.append(mark_price)
|
|
|
|
|
|
- if current_position_size is not None:
|
|
|
- update_fields.append("current_position_size = ?")
|
|
|
- params.append(current_position_size)
|
|
|
-
|
|
|
- if entry_price is not None:
|
|
|
- update_fields.append("entry_price = ?")
|
|
|
- params.append(entry_price)
|
|
|
-
|
|
|
- if liquidation_price is not None:
|
|
|
- update_fields.append("liquidation_price = ?")
|
|
|
- params.append(liquidation_price)
|
|
|
+ if position_value is not None:
|
|
|
+ update_fields.append("position_value = ?")
|
|
|
+ params.append(position_value)
|
|
|
|
|
|
if margin_used is not None:
|
|
|
update_fields.append("margin_used = ?")
|
|
@@ -366,35 +360,27 @@ class TradeLifecycleManager:
|
|
|
update_fields.append("leverage = ?")
|
|
|
params.append(leverage)
|
|
|
|
|
|
- if position_value is not None:
|
|
|
- update_fields.append("position_value = ?")
|
|
|
- params.append(position_value)
|
|
|
-
|
|
|
- if unrealized_pnl_percentage is not None:
|
|
|
- update_fields.append("unrealized_pnl_percentage = ?")
|
|
|
- params.append(unrealized_pnl_percentage)
|
|
|
+ if liquidation_price is not None:
|
|
|
+ update_fields.append("liquidation_price = ?")
|
|
|
+ params.append(liquidation_price)
|
|
|
|
|
|
if not update_fields:
|
|
|
- logger.warning(f"No fields to update for trade {trade_lifecycle_id}")
|
|
|
return False
|
|
|
|
|
|
# Add timestamp and lifecycle_id
|
|
|
- timestamp = datetime.now(timezone.utc).isoformat()
|
|
|
- update_fields.append("updated_at = ?")
|
|
|
- params.append(timestamp)
|
|
|
- params.append(trade_lifecycle_id)
|
|
|
+ update_fields.append("updated_at = CURRENT_TIMESTAMP")
|
|
|
+ params.append(lifecycle_id)
|
|
|
|
|
|
query = f"""
|
|
|
- UPDATE trades
|
|
|
+ UPDATE trades
|
|
|
SET {', '.join(update_fields)}
|
|
|
- WHERE trade_lifecycle_id = ? AND status = 'position_opened'
|
|
|
+ WHERE trade_lifecycle_id = ?
|
|
|
"""
|
|
|
|
|
|
- self.db._execute_query(query, params)
|
|
|
+ self.db.execute_query(query, params)
|
|
|
return True
|
|
|
-
|
|
|
except Exception as e:
|
|
|
- logger.error(f"❌ Error updating trade market data: {e}")
|
|
|
+ logger.error(f"Error updating trade market data: {e}")
|
|
|
return False
|
|
|
|
|
|
def get_recent_trades(self, limit: int = 10) -> List[Dict[str, Any]]:
|