From a0ef48810a1aa35df9d0b7b25027a125fb73b732 Mon Sep 17 00:00:00 2001 From: algizn97 Date: Sun, 26 Oct 2025 19:44:16 +0500 Subject: [PATCH] Fixed the counting of the series, added a request to set the serial number --- app/bybit/open_positions.py | 117 +++++++++++++------------- app/bybit/telegram_message_handler.py | 18 ++-- database/request.py | 28 ++++++ 3 files changed, 95 insertions(+), 68 deletions(-) diff --git a/app/bybit/open_positions.py b/app/bybit/open_positions.py index 00968dd..717460d 100644 --- a/app/bybit/open_positions.py +++ b/app/bybit/open_positions.py @@ -61,6 +61,26 @@ async def start_trading_cycle( leverage=leverage, ) + await rq.set_user_deal( + tg_id=tg_id, + symbol=symbol, + current_step=1, + current_series=1, + trade_mode=trade_mode, + side_mode=switch_side, + margin_type=margin_type, + leverage=leverage, + order_quantity=order_quantity, + trigger_price=trigger_price, + martingale_factor=martingale_factor, + max_bets_in_series=max_bets_in_series, + take_profit_percent=take_profit_percent, + stop_loss_percent=stop_loss_percent, + base_quantity=order_quantity, + commission_fee=commission_fee, + commission_place=commission_place + ) + res = await open_positions( tg_id=tg_id, symbol=symbol, @@ -74,25 +94,6 @@ async def start_trading_cycle( ) if res == "OK": - await rq.set_user_deal( - tg_id=tg_id, - symbol=symbol, - current_step=1, - current_series=1, - trade_mode=trade_mode, - side_mode=switch_side, - margin_type=margin_type, - leverage=leverage, - order_quantity=order_quantity, - trigger_price=trigger_price, - martingale_factor=martingale_factor, - max_bets_in_series=max_bets_in_series, - take_profit_percent=take_profit_percent, - stop_loss_percent=stop_loss_percent, - base_quantity=order_quantity, - commission_fee=commission_fee, - commission_place=commission_place - ) return "OK" return ( res @@ -151,7 +152,25 @@ async def trading_cycle_profit( else: s_side = side - next_series = current_series + 1 + await rq.set_user_deal( + tg_id=tg_id, + symbol=symbol, + current_step=1, + current_series=current_series, + trade_mode=trade_mode, + side_mode=side_mode, + margin_type=margin_type, + leverage=leverage, + order_quantity=base_quantity, + trigger_price=trigger_price, + martingale_factor=martingale_factor, + max_bets_in_series=max_bets_in_series, + take_profit_percent=take_profit_percent, + stop_loss_percent=stop_loss_percent, + base_quantity=base_quantity, + commission_fee=commission_fee, + commission_place=commission_place + ) res = await open_positions( tg_id=tg_id, @@ -166,25 +185,6 @@ async def trading_cycle_profit( ) if res == "OK": - await rq.set_user_deal( - tg_id=tg_id, - symbol=symbol, - current_step=1, - current_series=next_series, - trade_mode=trade_mode, - side_mode=side_mode, - margin_type=margin_type, - leverage=leverage, - order_quantity=base_quantity, - trigger_price=trigger_price, - martingale_factor=martingale_factor, - max_bets_in_series=max_bets_in_series, - take_profit_percent=take_profit_percent, - stop_loss_percent=stop_loss_percent, - base_quantity=base_quantity, - commission_fee=commission_fee, - commission_place=commission_place - ) return "OK" return ( @@ -253,6 +253,26 @@ async def trading_cycle( else: r_side = side + await rq.set_user_deal( + tg_id=tg_id, + symbol=symbol, + current_step=current_step, + current_series=current_series, + trade_mode=trade_mode, + side_mode=side_mode, + margin_type=margin_type, + leverage=leverage, + order_quantity=next_quantity, + trigger_price=trigger_price, + martingale_factor=martingale_factor, + max_bets_in_series=max_bets_in_series, + take_profit_percent=take_profit_percent, + stop_loss_percent=stop_loss_percent, + base_quantity=base_quantity, + commission_fee=commission_fee, + commission_place=commission_place + ) + res = await open_positions( tg_id=tg_id, symbol=symbol, @@ -266,25 +286,6 @@ async def trading_cycle( ) if res == "OK": - await rq.set_user_deal( - tg_id=tg_id, - symbol=symbol, - current_step=current_step, - current_series=current_series, - trade_mode=trade_mode, - side_mode=side_mode, - margin_type=margin_type, - leverage=leverage, - order_quantity=next_quantity, - trigger_price=trigger_price, - martingale_factor=martingale_factor, - max_bets_in_series=max_bets_in_series, - take_profit_percent=take_profit_percent, - stop_loss_percent=stop_loss_percent, - base_quantity=base_quantity, - commission_fee=commission_fee, - commission_place=commission_place - ) return "OK" return ( diff --git a/app/bybit/telegram_message_handler.py b/app/bybit/telegram_message_handler.py index bf294cf..2315178 100644 --- a/app/bybit/telegram_message_handler.py +++ b/app/bybit/telegram_message_handler.py @@ -110,14 +110,8 @@ class TelegramMessageHandler: get_total_fee = user_auto_trading.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")) - # total_pnl = safe_float(exec_pnl) - safe_float(exec_fee) - fee + pnl = safe_float(exec_pnl) header = ( "Сделка закрыта:" if safe_float(closed_size) > 0 else "Сделка открыта:" @@ -132,6 +126,7 @@ class TelegramMessageHandler: ) commission_fee = user_deals_data.commission_fee commission_place = user_deals_data.commission_place + current_series = user_deals_data.current_series if commission_fee == "Yes_commission_fee": if commission_place == "Commission_for_qty": @@ -159,7 +154,7 @@ class TelegramMessageHandler: if safe_float(closed_size) == 0: text += f"Движение: {side_rus}\n" else: - text += f"\nРеализованная прибыль: {exec_pnl:.7f}\n" + text += f"\nПрибыль: {pnl:.7f}\n" await self.telegram_bot.send_message( chat_id=tg_id, text=text, reply_markup=kbi.profile_bybit @@ -172,7 +167,7 @@ class TelegramMessageHandler: and safe_float(closed_size) > 0 and user_symbols is not None ): - if safe_float(exec_pnl) > 0: + if safe_float(pnl) > 0: profit_text = "📈 Начинаю новую серию с базовой ставки\n" await self.telegram_bot.send_message( chat_id=tg_id, text=profit_text, reply_markup=kbi.profile_bybit @@ -195,7 +190,10 @@ class TelegramMessageHandler: res = await trading_cycle_profit( 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": pass else: diff --git a/database/request.py b/database/request.py index ce7265d..38d51a1 100644 --- a/database/request.py +++ b/database/request.py @@ -1171,6 +1171,34 @@ async def set_last_side_by_symbol(tg_id: int, symbol: str, last_side: str): 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 async def get_all_user_auto_trading(tg_id: int):