2
0
forked from kodorvan/stcs

The timer start function has been updated

This commit is contained in:
algizn97
2025-09-11 12:02:47 +05:00
parent f42940f847
commit babbcbd1fc
5 changed files with 56 additions and 48 deletions

View File

@@ -9,7 +9,7 @@ from logger_helper.logger_helper import LOGGING_CONFIG
from app.services.Bybit.functions.Futures import (close_user_trade, set_take_profit_stop_loss, \
get_active_positions_by_symbol, get_active_orders_by_symbol,
get_active_positions, get_active_orders, cancel_all_tp_sl_orders,
trading_cycle, open_position, close_trade_after_delay, safe_float,
open_position, close_trade_after_delay, safe_float,
)
from app.services.Bybit.functions.balance import get_balance
import app.telegram.Keyboards.inline_keyboards as inline_markup
@@ -29,6 +29,7 @@ logger = logging.getLogger("functions")
router_functions_bybit_trade = Router()
user_trade_tasks = {}
@router_functions_bybit_trade.callback_query(F.data.in_(['clb_start_trading', 'clb_back_to_main', 'back_to_main']))
async def clb_start_bybit_trade_message(callback: CallbackQuery) -> None:
@@ -63,7 +64,6 @@ async def start_bybit_trade_message(message: Message) -> None:
"""
balance = await get_balance(message.from_user.id, message)
tg_id = message.from_user.id
await run_ws_for_user(tg_id, message)
if balance:
await run_ws_for_user(tg_id, message)
@@ -229,14 +229,40 @@ async def start_trading_process(callback: CallbackQuery) -> None:
timer_minute = timer_data or 0
if timer_minute > 0:
await message.answer(f"Торговля начнётся через {timer_minute} мин.")
await trading_cycle(tg_id, message, side=side, margin_mode=margin_mode, symbol=symbol,
starting_quantity=starting_quantity)
await rq.update_user_timer(tg_id, minutes=0)
await message.answer(f"Торговля начнётся через {timer_minute} мин.", reply_markup=inline_markup.cancel_start)
async def delay_start():
try:
await asyncio.sleep(timer_minute * 60)
await open_position(tg_id, message, side, margin_mode, symbol=symbol, quantity=starting_quantity)
await rq.update_user_timer(tg_id, minutes=0)
except asyncio.CancelledError:
logger.exception(f"Торговый цикл для пользователя {tg_id} был отменён.", exc_info=True)
raise
task = asyncio.create_task(delay_start())
user_trade_tasks[tg_id] = task
else:
await open_position(tg_id, message, side, margin_mode, symbol=symbol, quantity=starting_quantity)
@router_functions_bybit_trade.callback_query(F.data == "clb_cancel_start")
async def cancel_start_trading(callback: CallbackQuery):
tg_id = callback.from_user.id
task = user_trade_tasks.get(tg_id)
if task and not task.done():
task.cancel()
try:
await task
except asyncio.CancelledError:
pass
user_trade_tasks.pop(tg_id, None)
await callback.message.answer("Запуск торговли отменён.", reply_markup=inline_markup.back_to_main)
await callback.message.edit_reply_markup(reply_markup=None)
else:
await callback.answer("Нет запланированной задачи запуска.", show_alert=True)
@router_functions_bybit_trade.callback_query(F.data == "clb_my_deals")
async def show_my_trades(callback: CallbackQuery) -> None:
"""