from enum import Enum from pydantic import BaseModel, Field class TradeDirection(str, Enum): LONG = "long" SHORT = "short" class RecommendationType(str, Enum): RECOMMENDED = "It is recommended to enter the transaction." NOT_RECOMMENDED = "It is not recommended to enter into a transaction." CAUTIOUS = "Entering the trade with caution" class TakeProfitPoints(BaseModel): first: float = Field(..., description="First take profit") second: float = Field(..., description="Second take profit") third: float = Field(..., description="Third take profit") class TradeSuggestion(BaseModel): symbol: str direction: TradeDirection entry_price: float recommended_leverage: int take_profit: TakeProfitPoints recommendation: RecommendationType current_price: float trade_amount: float @property def is_entry_better_than_current(self) -> bool: return ( self.entry_price <= self.current_price if self.direction == TradeDirection.LONG else self.entry_price >= self.current_price ) @property def potential_profit_percentage(self) -> float: if self.direction == TradeDirection.LONG: return ( ((self.take_profit.third - self.entry_price) / self.entry_price) * 100 * self.recommended_leverage ) return ( ((self.entry_price - self.take_profit.third) / self.entry_price) * 100 * self.recommended_leverage ) def to_prompt_dict(self) -> dict: return { "symbol": self.symbol, "direction": self.direction.value, "entry_price": f"${self.entry_price:.2f}", "leverage": f"{self.recommended_leverage}x", "take_profit_1": f"${self.take_profit.first:.2f}", "take_profit_2": f"${self.take_profit.second:.2f}", "take_profit_3": f"${self.take_profit.third:.2f}", "recommendation": self.recommendation.value, "current_price": f"${self.current_price:.2f}", "trade_amount": f"${self.trade_amount:.2f}", "potential_profit": f"{self.potential_profit_percentage:.2f}%", }