Fixed
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
import logging.config
|
||||
from aiogram import F, Router
|
||||
|
||||
from app.services.Bybit.functions.bybit_ws import run_ws_for_user
|
||||
from app.telegram.functions.main_settings.settings import main_settings_message
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
|
||||
@@ -35,10 +36,13 @@ async def clb_start_bybit_trade_message(callback: CallbackQuery) -> None:
|
||||
Обработка нажатия кнопок запуска торговли или возврата в главное меню.
|
||||
Отправляет информацию о балансе, символе, цене и инструкциях по торговле.
|
||||
"""
|
||||
tg_id = callback.from_user.id
|
||||
message = callback.message
|
||||
user_id = callback.from_user.id
|
||||
balance = await get_balance(user_id, callback.message)
|
||||
|
||||
if balance:
|
||||
await run_ws_for_user(tg_id, message)
|
||||
symbol = await rq.get_symbol(user_id)
|
||||
price = await get_price(user_id, symbol=symbol)
|
||||
|
||||
@@ -61,8 +65,11 @@ 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)
|
||||
symbol = await rq.get_symbol(message.from_user.id)
|
||||
price = await get_price(message.from_user.id, symbol=symbol)
|
||||
|
||||
@@ -86,6 +93,7 @@ async def update_symbol_for_trade_message(callback: CallbackQuery, state: FSMCon
|
||||
Начинает процедуру обновления торговой пары, переводит пользователя в состояние ожидания пары.
|
||||
"""
|
||||
await state.set_state(state_update_symbol.symbol)
|
||||
await callback.answer()
|
||||
|
||||
await callback.message.answer(
|
||||
text='Укажите торговую пару заглавными буквами без пробелов и лишних символов (пример: BTCUSDT): ',
|
||||
@@ -99,7 +107,6 @@ async def update_symbol_for_trade(message: Message, state: FSMContext) -> None:
|
||||
При успешном обновлении сохранит пару и отправит обновлённую информацию.
|
||||
"""
|
||||
user_input = message.text.strip().upper()
|
||||
|
||||
exists = await get_valid_symbols(message.from_user.id, user_input)
|
||||
|
||||
if not exists:
|
||||
@@ -189,18 +196,25 @@ async def start_trading_process(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
tg_id = callback.from_user.id
|
||||
message = callback.message
|
||||
await run_ws_for_user(tg_id, message)
|
||||
await callback.answer()
|
||||
|
||||
data_main_stgs = await rq.get_user_main_settings(tg_id)
|
||||
symbol = await rq.get_symbol(tg_id)
|
||||
margin_mode = data_main_stgs.get('margin_type', 'Isolated')
|
||||
trading_mode = data_main_stgs.get('trading_mode')
|
||||
switch_mode = data_main_stgs.get('switch_mode_enabled')
|
||||
starting_quantity = safe_float(data_main_stgs.get('starting_quantity'))
|
||||
switch_state = data_main_stgs.get("switch_state", "По направлению")
|
||||
|
||||
side = None
|
||||
if switch_mode == 'Включено':
|
||||
switch_state = data_main_stgs.get('switch_state', 'Long')
|
||||
side = 'Buy' if switch_state == 'Long' else 'Sell'
|
||||
if trading_mode == 'Switch':
|
||||
if switch_state == "По направлению":
|
||||
side = data_main_stgs.get("last_side")
|
||||
else:
|
||||
side = data_main_stgs.get("last_side")
|
||||
if side.lower() == "buy":
|
||||
side = "Sell"
|
||||
else:
|
||||
side = "Buy"
|
||||
else:
|
||||
if trading_mode == 'Long':
|
||||
side = 'Buy'
|
||||
@@ -221,9 +235,9 @@ 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 message.answer(f"Торговля начнётся через {timer_minute} мин.")
|
||||
await rq.update_user_timer(tg_id, minutes=0)
|
||||
else:
|
||||
await open_position(tg_id, message, side, margin_mode, symbol=symbol, quantity=starting_quantity)
|
||||
@@ -437,7 +451,7 @@ async def process_close_delay(message: Message, state: FSMContext) -> None:
|
||||
symbol = data.get("symbol")
|
||||
|
||||
delay = delay_minutes * 60
|
||||
await message.answer(f"Закрытие сделки {symbol} запланировано через {delay_minutes} мин.")
|
||||
await message.answer(f"Закрытие сделки {symbol} запланировано через {delay_minutes} мин.", reply_markup=inline_markup.back_to_main)
|
||||
await close_trade_after_delay(message.from_user.id, message, symbol, delay)
|
||||
await state.clear()
|
||||
|
||||
@@ -479,11 +493,11 @@ async def stop_immediately(callback: CallbackQuery):
|
||||
@router_functions_bybit_trade.callback_query(F.data == "stop_with_timer")
|
||||
async def stop_with_timer_start(callback: CallbackQuery, state: FSMContext):
|
||||
"""
|
||||
Запускает диалог с пользователем для задания задержки перед остановкой торговли.
|
||||
Запускает диалог с пользователем для задания задержки до остановки торговли.
|
||||
"""
|
||||
|
||||
await state.set_state(CloseTradeTimerState.waiting_for_trade)
|
||||
await callback.message.answer("Введите задержку в минутах перед остановкой торговли:",
|
||||
await callback.message.answer("Введите задержку в минутах до остановки торговли:",
|
||||
reply_markup=inline_markup.cancel)
|
||||
await callback.answer()
|
||||
|
||||
@@ -505,7 +519,7 @@ async def process_stop_delay(message: Message, state: FSMContext):
|
||||
tg_id = message.from_user.id
|
||||
delay_seconds = delay_minutes * 60
|
||||
|
||||
await message.answer(f"Торговля будет остановлена через {delay_minutes} минут.")
|
||||
await message.answer(f"Торговля будет остановлена через {delay_minutes} минут.", reply_markup=inline_markup.back_to_main)
|
||||
await asyncio.sleep(delay_seconds)
|
||||
await rq.update_trigger(tg_id, "Ручной")
|
||||
await message.answer("Автоматическая торговля остановлена.", reply_markup=inline_markup.back_to_main)
|
||||
|
Reference in New Issue
Block a user