Added the ability to get a list of open trades and limit orders, as well as their closures (previously it was possible only for the selected pair)
This commit is contained in:
@@ -7,6 +7,7 @@ from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
|
||||
from app.services.Bybit.functions.Futures import (close_user_trade, open_position, 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,
|
||||
)
|
||||
from app.services.Bybit.functions.balance import get_balance
|
||||
import app.telegram.Keyboards.inline_keyboards as inline_markup
|
||||
@@ -264,8 +265,7 @@ async def show_my_trades(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
await callback.answer()
|
||||
try:
|
||||
symbol = await rq.get_symbol(callback.from_user.id)
|
||||
await callback.message.answer(f"Выберите тип сделки для пары {symbol}:",
|
||||
await callback.message.answer(f"Выберите тип сделки:",
|
||||
reply_markup=inline_markup.my_deals_select_markup)
|
||||
except Exception as e:
|
||||
logger.error(f"Произошла ошибка при выборе типа сделки: {e}")
|
||||
@@ -274,16 +274,30 @@ async def show_my_trades(callback: CallbackQuery) -> None:
|
||||
@router_functions_bybit_trade.callback_query(F.data == "clb_open_deals")
|
||||
async def show_my_trades_callback(callback: CallbackQuery):
|
||||
"""
|
||||
Показывает открытые позиции пользователя по символу.
|
||||
Показывает открытые позиции пользователя.
|
||||
"""
|
||||
await callback.answer()
|
||||
|
||||
try:
|
||||
await get_active_positions_by_symbol(callback.from_user.id, message=callback.message)
|
||||
await get_active_positions(callback.from_user.id, message=callback.message)
|
||||
except Exception as e:
|
||||
logger.error(f"Произошла ошибка при выборе сделки: {e}")
|
||||
await callback.message.answer("Произошла ошибка при выборе сделки", reply_markup=inline_markup.back_to_main)
|
||||
|
||||
@router_functions_bybit_trade.callback_query(lambda c: c.data and c.data.startswith("show_deal_"))
|
||||
async def show_deal_callback(callback_query: CallbackQuery) -> None:
|
||||
"""
|
||||
Показывает сделку пользователя по символу.
|
||||
"""
|
||||
await callback_query.answer()
|
||||
try:
|
||||
symbol = callback_query.data[len("show_deal_"):]
|
||||
tg_id = callback_query.from_user.id
|
||||
await get_active_positions_by_symbol(tg_id, symbol, message=callback_query.message)
|
||||
except Exception as e:
|
||||
logger.error(f"Произошла ошибка при выборе сделки: {e}")
|
||||
await callback_query.message.answer("Произошла ошибка при выборе сделки", reply_markup=inline_markup.back_to_main)
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(F.data == "clb_open_orders")
|
||||
async def show_my_orders_callback(callback: CallbackQuery) -> None:
|
||||
@@ -293,16 +307,31 @@ async def show_my_orders_callback(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
|
||||
try:
|
||||
await get_active_orders_by_symbol(callback.from_user.id, message=callback.message)
|
||||
await get_active_orders(callback.from_user.id, message=callback.message)
|
||||
except Exception as e:
|
||||
logger.error(f"Произошла ошибка при выборе ордера: {e}")
|
||||
await callback.message.answer("Произошла ошибка при выборе ордера", reply_markup=inline_markup.back_to_main)
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(lambda c: c.data and c.data.startswith("show_limit_"))
|
||||
async def show_limit_callback(callback_query: CallbackQuery) -> None:
|
||||
"""
|
||||
Показывает сделку пользователя по символу.
|
||||
"""
|
||||
await callback_query.answer()
|
||||
try:
|
||||
symbol = callback_query.data[len("show_limit_"):]
|
||||
tg_id = callback_query.from_user.id
|
||||
await get_active_orders_by_symbol(tg_id, symbol, message=callback_query.message)
|
||||
except Exception as e:
|
||||
logger.error(f"Произошла ошибка при выборе сделки: {e}")
|
||||
await callback_query.message.answer("Произошла ошибка при выборе сделки", reply_markup=inline_markup.back_to_main)
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(F.data == "clb_set_tp_sl")
|
||||
async def set_tp_sl(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
"""
|
||||
Показывает активные ордера пользователя.
|
||||
Запускает процесс установки Take Profit и Stop Loss.
|
||||
"""
|
||||
await callback.answer()
|
||||
await state.set_state(SetTP_SL_State.waiting_for_take_profit)
|
||||
@@ -394,6 +423,25 @@ async def close_trade_callback(callback: CallbackQuery) -> None:
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(lambda c: c.data and c.data.startswith("close_limit:"))
|
||||
async def close_trade_callback(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
Закрывает ордера пользователя по символу.
|
||||
"""
|
||||
symbol = callback.data.split(':')[1]
|
||||
tg_id = callback.from_user.id
|
||||
|
||||
result = await cancel_all_tp_sl_orders(tg_id, symbol)
|
||||
|
||||
if result:
|
||||
await callback.message.answer(f"Ордер {result} успешно закрыт.", reply_markup=inline_markup.back_to_main)
|
||||
logger.info(f"Ордер {result} успешно закрыт.")
|
||||
else:
|
||||
await callback.message.answer(f"Не удалось закрыть ордер {result}.")
|
||||
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(lambda c: c.data and c.data.startswith("close_deal_by_timer:"))
|
||||
async def ask_close_delay(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
"""
|
||||
|
Reference in New Issue
Block a user