Added pnl, tp and sl column
This commit is contained in:
		@@ -160,6 +160,9 @@ class UserDeals(Base):
 | 
				
			|||||||
    current_series = Column(Integer, nullable=True)
 | 
					    current_series = Column(Integer, nullable=True)
 | 
				
			||||||
    commission_fee = Column(String, nullable=True)
 | 
					    commission_fee = Column(String, nullable=True)
 | 
				
			||||||
    commission_place = Column(String, nullable=True)
 | 
					    commission_place = Column(String, nullable=True)
 | 
				
			||||||
 | 
					    pnl_series = Column(Float, nullable=True)
 | 
				
			||||||
 | 
					    take_profit = Column(Float, nullable=False, default=0.0)
 | 
				
			||||||
 | 
					    stop_loss = Column(Float, nullable=False, default=0.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    user = relationship("User", back_populates="user_deals")
 | 
					    user = relationship("User", back_populates="user_deals")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -200,6 +200,8 @@ async def create_user_additional_settings(tg_id: int) -> None:
 | 
				
			|||||||
                user=user,
 | 
					                user=user,
 | 
				
			||||||
                trade_mode="Long",  # Default value
 | 
					                trade_mode="Long",  # Default value
 | 
				
			||||||
                switch_side="По направлению",
 | 
					                switch_side="По направлению",
 | 
				
			||||||
 | 
					                side="Buy",
 | 
				
			||||||
 | 
					                trigger_price=0.0,
 | 
				
			||||||
                margin_type="ISOLATED_MARGIN",
 | 
					                margin_type="ISOLATED_MARGIN",
 | 
				
			||||||
                leverage="10",
 | 
					                leverage="10",
 | 
				
			||||||
                order_quantity=1.0,
 | 
					                order_quantity=1.0,
 | 
				
			||||||
@@ -990,7 +992,8 @@ async def set_user_deal(
 | 
				
			|||||||
        stop_loss_percent: int,
 | 
					        stop_loss_percent: int,
 | 
				
			||||||
        base_quantity: float,
 | 
					        base_quantity: float,
 | 
				
			||||||
        commission_fee: str,
 | 
					        commission_fee: str,
 | 
				
			||||||
        commission_place: str
 | 
					        commission_place: str,
 | 
				
			||||||
 | 
					        pnl_series: float
 | 
				
			||||||
):
 | 
					):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Set the user deal in the database.
 | 
					    Set the user deal in the database.
 | 
				
			||||||
@@ -1011,6 +1014,7 @@ async def set_user_deal(
 | 
				
			|||||||
    :param base_quantity: Base quantity
 | 
					    :param base_quantity: Base quantity
 | 
				
			||||||
    :param commission_fee: Commission fee
 | 
					    :param commission_fee: Commission fee
 | 
				
			||||||
    :param commission_place: Commission place
 | 
					    :param commission_place: Commission place
 | 
				
			||||||
 | 
					    :param pnl_series: PNL series
 | 
				
			||||||
    :return: bool
 | 
					    :return: bool
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
@@ -1043,6 +1047,7 @@ async def set_user_deal(
 | 
				
			|||||||
                deal.base_quantity = base_quantity
 | 
					                deal.base_quantity = base_quantity
 | 
				
			||||||
                deal.commission_fee = commission_fee
 | 
					                deal.commission_fee = commission_fee
 | 
				
			||||||
                deal.commission_place = commission_place
 | 
					                deal.commission_place = commission_place
 | 
				
			||||||
 | 
					                deal.pnl_series = pnl_series
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                # Creating new record
 | 
					                # Creating new record
 | 
				
			||||||
                new_deal = UserDeals(
 | 
					                new_deal = UserDeals(
 | 
				
			||||||
@@ -1062,7 +1067,8 @@ async def set_user_deal(
 | 
				
			|||||||
                    stop_loss_percent=stop_loss_percent,
 | 
					                    stop_loss_percent=stop_loss_percent,
 | 
				
			||||||
                    base_quantity=base_quantity,
 | 
					                    base_quantity=base_quantity,
 | 
				
			||||||
                    commission_fee=commission_fee,
 | 
					                    commission_fee=commission_fee,
 | 
				
			||||||
                    commission_place=commission_place
 | 
					                    commission_place=commission_place,
 | 
				
			||||||
 | 
					                    pnl_series=pnl_series
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                session.add(new_deal)
 | 
					                session.add(new_deal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1199,6 +1205,63 @@ async def set_current_series(tg_id: int, symbol: str, current_series: int):
 | 
				
			|||||||
        return False
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async def set_tp_sl_by_symbol(tg_id: int, symbol: str, tp: float, sl: float):
 | 
				
			||||||
 | 
					    """Set tp and sl for a user deal by symbol in the database."""
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        async with async_session() as session:
 | 
				
			||||||
 | 
					            result = await session.execute(select(User).filter_by(tg_id=tg_id))
 | 
				
			||||||
 | 
					            user = result.scalars().first()
 | 
				
			||||||
 | 
					            if user is None:
 | 
				
			||||||
 | 
					                logger.error(f"User with tg_id={tg_id} not found")
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            result = await session.execute(
 | 
				
			||||||
 | 
					                select(UserDeals).filter_by(user_id=user.id, symbol=symbol)
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            record = result.scalars().first()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if record:
 | 
				
			||||||
 | 
					                record.take_profit = tp
 | 
				
			||||||
 | 
					                record.stop_loss = sl
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                logger.error(f"User deal with user_id={user.id} and symbol={symbol} not found")
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					            await session.commit()
 | 
				
			||||||
 | 
					            logger.info("Set tp and sl for user %s and symbol %s", tg_id, symbol)
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					    except Exception as e:
 | 
				
			||||||
 | 
					        logger.error("Error setting user deal tp and sl for user %s and symbol %s: %s", tg_id, symbol, e)
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async def set_pnl_series_by_symbol(tg_id: int, symbol: str, pnl_series: float):
 | 
				
			||||||
 | 
					    """Set pnl series for a user deal by symbol in the database."""
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        async with async_session() as session:
 | 
				
			||||||
 | 
					            result = await session.execute(select(User).filter_by(tg_id=tg_id))
 | 
				
			||||||
 | 
					            user = result.scalars().first()
 | 
				
			||||||
 | 
					            if user is None:
 | 
				
			||||||
 | 
					                logger.error(f"User with tg_id={tg_id} not found")
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            result = await session.execute(
 | 
				
			||||||
 | 
					                select(UserDeals).filter_by(user_id=user.id, symbol=symbol)
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            record = result.scalars().first()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if record:
 | 
				
			||||||
 | 
					                record.pnl_series = pnl_series
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                logger.error(f"User deal with user_id={user.id} and symbol={symbol} not found")
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					            await session.commit()
 | 
				
			||||||
 | 
					            logger.info("Set pnl series for user %s and symbol %s", tg_id, symbol)
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					    except Exception as e:
 | 
				
			||||||
 | 
					        logger.error("Error setting user deal pnl series for user %s and symbol %s: %s", tg_id, symbol, e)
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# USER AUTO TRADING
 | 
					# USER AUTO TRADING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def get_all_user_auto_trading(tg_id: int):
 | 
					async def get_all_user_auto_trading(tg_id: int):
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user