Compare commits
	
		
			2 Commits
		
	
	
		
			ab752b5dd8
			...
			690d793e8c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 690d793e8c | |||
| 
						 | 
					a0ef48810a | 
@@ -61,19 +61,6 @@ async def start_trading_cycle(
 | 
				
			|||||||
            leverage=leverage,
 | 
					            leverage=leverage,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        res = await open_positions(
 | 
					 | 
				
			||||||
            tg_id=tg_id,
 | 
					 | 
				
			||||||
            symbol=symbol,
 | 
					 | 
				
			||||||
            side=side,
 | 
					 | 
				
			||||||
            order_quantity=order_quantity,
 | 
					 | 
				
			||||||
            trigger_price=trigger_price,
 | 
					 | 
				
			||||||
            margin_type=margin_type,
 | 
					 | 
				
			||||||
            leverage=leverage,
 | 
					 | 
				
			||||||
            take_profit_percent=take_profit_percent,
 | 
					 | 
				
			||||||
            stop_loss_percent=stop_loss_percent,
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if res == "OK":
 | 
					 | 
				
			||||||
        await rq.set_user_deal(
 | 
					        await rq.set_user_deal(
 | 
				
			||||||
            tg_id=tg_id,
 | 
					            tg_id=tg_id,
 | 
				
			||||||
            symbol=symbol,
 | 
					            symbol=symbol,
 | 
				
			||||||
@@ -93,6 +80,20 @@ async def start_trading_cycle(
 | 
				
			|||||||
            commission_fee=commission_fee,
 | 
					            commission_fee=commission_fee,
 | 
				
			||||||
            commission_place=commission_place
 | 
					            commission_place=commission_place
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        res = await open_positions(
 | 
				
			||||||
 | 
					            tg_id=tg_id,
 | 
				
			||||||
 | 
					            symbol=symbol,
 | 
				
			||||||
 | 
					            side=side,
 | 
				
			||||||
 | 
					            order_quantity=order_quantity,
 | 
				
			||||||
 | 
					            trigger_price=trigger_price,
 | 
				
			||||||
 | 
					            margin_type=margin_type,
 | 
				
			||||||
 | 
					            leverage=leverage,
 | 
				
			||||||
 | 
					            take_profit_percent=take_profit_percent,
 | 
				
			||||||
 | 
					            stop_loss_percent=stop_loss_percent,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if res == "OK":
 | 
				
			||||||
            return "OK"
 | 
					            return "OK"
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
            res
 | 
					            res
 | 
				
			||||||
@@ -151,26 +152,11 @@ async def trading_cycle_profit(
 | 
				
			|||||||
        else:
 | 
					        else:
 | 
				
			||||||
            s_side = side
 | 
					            s_side = side
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        next_series = current_series + 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        res = await open_positions(
 | 
					 | 
				
			||||||
            tg_id=tg_id,
 | 
					 | 
				
			||||||
            symbol=symbol,
 | 
					 | 
				
			||||||
            side=s_side,
 | 
					 | 
				
			||||||
            order_quantity=base_quantity,
 | 
					 | 
				
			||||||
            trigger_price=trigger_price,
 | 
					 | 
				
			||||||
            margin_type=margin_type,
 | 
					 | 
				
			||||||
            leverage=leverage,
 | 
					 | 
				
			||||||
            take_profit_percent=take_profit_percent,
 | 
					 | 
				
			||||||
            stop_loss_percent=stop_loss_percent,
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if res == "OK":
 | 
					 | 
				
			||||||
        await rq.set_user_deal(
 | 
					        await rq.set_user_deal(
 | 
				
			||||||
            tg_id=tg_id,
 | 
					            tg_id=tg_id,
 | 
				
			||||||
            symbol=symbol,
 | 
					            symbol=symbol,
 | 
				
			||||||
            current_step=1,
 | 
					            current_step=1,
 | 
				
			||||||
                current_series=next_series,
 | 
					            current_series=current_series,
 | 
				
			||||||
            trade_mode=trade_mode,
 | 
					            trade_mode=trade_mode,
 | 
				
			||||||
            side_mode=side_mode,
 | 
					            side_mode=side_mode,
 | 
				
			||||||
            margin_type=margin_type,
 | 
					            margin_type=margin_type,
 | 
				
			||||||
@@ -185,6 +171,20 @@ async def trading_cycle_profit(
 | 
				
			|||||||
            commission_fee=commission_fee,
 | 
					            commission_fee=commission_fee,
 | 
				
			||||||
            commission_place=commission_place
 | 
					            commission_place=commission_place
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        res = await open_positions(
 | 
				
			||||||
 | 
					            tg_id=tg_id,
 | 
				
			||||||
 | 
					            symbol=symbol,
 | 
				
			||||||
 | 
					            side=s_side,
 | 
				
			||||||
 | 
					            order_quantity=base_quantity,
 | 
				
			||||||
 | 
					            trigger_price=trigger_price,
 | 
				
			||||||
 | 
					            margin_type=margin_type,
 | 
				
			||||||
 | 
					            leverage=leverage,
 | 
				
			||||||
 | 
					            take_profit_percent=take_profit_percent,
 | 
				
			||||||
 | 
					            stop_loss_percent=stop_loss_percent,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if res == "OK":
 | 
				
			||||||
            return "OK"
 | 
					            return "OK"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
@@ -253,19 +253,6 @@ async def trading_cycle(
 | 
				
			|||||||
        else:
 | 
					        else:
 | 
				
			||||||
            r_side = side
 | 
					            r_side = side
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        res = await open_positions(
 | 
					 | 
				
			||||||
            tg_id=tg_id,
 | 
					 | 
				
			||||||
            symbol=symbol,
 | 
					 | 
				
			||||||
            side=r_side,
 | 
					 | 
				
			||||||
            order_quantity=total_quantity,
 | 
					 | 
				
			||||||
            trigger_price=trigger_price,
 | 
					 | 
				
			||||||
            margin_type=margin_type,
 | 
					 | 
				
			||||||
            leverage=leverage,
 | 
					 | 
				
			||||||
            take_profit_percent=take_profit_percent,
 | 
					 | 
				
			||||||
            stop_loss_percent=stop_loss_percent,
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if res == "OK":
 | 
					 | 
				
			||||||
        await rq.set_user_deal(
 | 
					        await rq.set_user_deal(
 | 
				
			||||||
            tg_id=tg_id,
 | 
					            tg_id=tg_id,
 | 
				
			||||||
            symbol=symbol,
 | 
					            symbol=symbol,
 | 
				
			||||||
@@ -285,6 +272,20 @@ async def trading_cycle(
 | 
				
			|||||||
            commission_fee=commission_fee,
 | 
					            commission_fee=commission_fee,
 | 
				
			||||||
            commission_place=commission_place
 | 
					            commission_place=commission_place
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        res = await open_positions(
 | 
				
			||||||
 | 
					            tg_id=tg_id,
 | 
				
			||||||
 | 
					            symbol=symbol,
 | 
				
			||||||
 | 
					            side=r_side,
 | 
				
			||||||
 | 
					            order_quantity=total_quantity,
 | 
				
			||||||
 | 
					            trigger_price=trigger_price,
 | 
				
			||||||
 | 
					            margin_type=margin_type,
 | 
				
			||||||
 | 
					            leverage=leverage,
 | 
				
			||||||
 | 
					            take_profit_percent=take_profit_percent,
 | 
				
			||||||
 | 
					            stop_loss_percent=stop_loss_percent,
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if res == "OK":
 | 
				
			||||||
            return "OK"
 | 
					            return "OK"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return (
 | 
					        return (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,14 +110,8 @@ class TelegramMessageHandler:
 | 
				
			|||||||
            get_total_fee = user_auto_trading.total_fee
 | 
					            get_total_fee = user_auto_trading.total_fee
 | 
				
			||||||
            total_fee = safe_float(exec_fee) + safe_float(get_total_fee)
 | 
					            total_fee = safe_float(exec_fee) + safe_float(get_total_fee)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
            if user_auto_trading is not None and user_auto_trading.fee is not None:
 | 
					 | 
				
			||||||
                fee = user_auto_trading.fee
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                fee = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            exec_pnl = format_value(execution.get("execPnl"))
 | 
					            exec_pnl = format_value(execution.get("execPnl"))
 | 
				
			||||||
            # total_pnl = safe_float(exec_pnl) - safe_float(exec_fee) - fee
 | 
					            pnl = safe_float(exec_pnl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            header = (
 | 
					            header = (
 | 
				
			||||||
                "Сделка закрыта:" if safe_float(closed_size) > 0 else "Сделка открыта:"
 | 
					                "Сделка закрыта:" if safe_float(closed_size) > 0 else "Сделка открыта:"
 | 
				
			||||||
@@ -132,6 +126,7 @@ class TelegramMessageHandler:
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
            commission_fee = user_deals_data.commission_fee
 | 
					            commission_fee = user_deals_data.commission_fee
 | 
				
			||||||
            commission_place = user_deals_data.commission_place
 | 
					            commission_place = user_deals_data.commission_place
 | 
				
			||||||
 | 
					            current_series = user_deals_data.current_series
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if commission_fee == "Yes_commission_fee":
 | 
					            if commission_fee == "Yes_commission_fee":
 | 
				
			||||||
                if commission_place == "Commission_for_qty":
 | 
					                if commission_place == "Commission_for_qty":
 | 
				
			||||||
@@ -159,7 +154,7 @@ class TelegramMessageHandler:
 | 
				
			|||||||
            if safe_float(closed_size) == 0:
 | 
					            if safe_float(closed_size) == 0:
 | 
				
			||||||
                text += f"Движение: {side_rus}\n"
 | 
					                text += f"Движение: {side_rus}\n"
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                text += f"\nРеализованная прибыль: {exec_pnl:.7f}\n"
 | 
					                text += f"\nПрибыль: {pnl:.7f}\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await self.telegram_bot.send_message(
 | 
					            await self.telegram_bot.send_message(
 | 
				
			||||||
                chat_id=tg_id, text=text, reply_markup=kbi.profile_bybit
 | 
					                chat_id=tg_id, text=text, reply_markup=kbi.profile_bybit
 | 
				
			||||||
@@ -172,7 +167,7 @@ class TelegramMessageHandler:
 | 
				
			|||||||
                and safe_float(closed_size) > 0
 | 
					                and safe_float(closed_size) > 0
 | 
				
			||||||
                and user_symbols is not None
 | 
					                and user_symbols is not None
 | 
				
			||||||
            ):
 | 
					            ):
 | 
				
			||||||
                if safe_float(exec_pnl) > 0:
 | 
					                if safe_float(pnl) > 0:
 | 
				
			||||||
                    profit_text = "📈 Начинаю новую серию с базовой ставки\n"
 | 
					                    profit_text = "📈 Начинаю новую серию с базовой ставки\n"
 | 
				
			||||||
                    await self.telegram_bot.send_message(
 | 
					                    await self.telegram_bot.send_message(
 | 
				
			||||||
                        chat_id=tg_id, text=profit_text, reply_markup=kbi.profile_bybit
 | 
					                        chat_id=tg_id, text=profit_text, reply_markup=kbi.profile_bybit
 | 
				
			||||||
@@ -195,7 +190,10 @@ class TelegramMessageHandler:
 | 
				
			|||||||
                    res = await trading_cycle_profit(
 | 
					                    res = await trading_cycle_profit(
 | 
				
			||||||
                        tg_id=tg_id, symbol=symbol, side=r_side
 | 
					                        tg_id=tg_id, symbol=symbol, side=r_side
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
 | 
					                    current_series += 1
 | 
				
			||||||
 | 
					                    await rq.set_current_series(
 | 
				
			||||||
 | 
					                        tg_id=tg_id, symbol=symbol, current_series=current_series
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
                    if res == "OK":
 | 
					                    if res == "OK":
 | 
				
			||||||
                        pass
 | 
					                        pass
 | 
				
			||||||
                    else:
 | 
					                    else:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1171,6 +1171,34 @@ async def set_last_side_by_symbol(tg_id: int, symbol: str, last_side: str):
 | 
				
			|||||||
        return False
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async def set_current_series(tg_id: int, symbol: str, current_series: int):
 | 
				
			||||||
 | 
					    """Set current 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.current_series = current_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 current series for user %s and symbol %s", tg_id, symbol)
 | 
				
			||||||
 | 
					            return True
 | 
				
			||||||
 | 
					    except Exception as e:
 | 
				
			||||||
 | 
					        logger.error("Error setting user deal current 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