The entire database has been changed to PostgresSQL. The entire code has been updated.
This commit is contained in:
214
app/telegram/handlers/get_positions_handlers.py
Normal file
214
app/telegram/handlers/get_positions_handlers.py
Normal file
@@ -0,0 +1,214 @@
|
||||
import logging.config
|
||||
|
||||
from aiogram import F, Router
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.types import CallbackQuery
|
||||
|
||||
import app.telegram.keyboards.inline as kbi
|
||||
import database.request as rq
|
||||
from app.bybit.get_functions.get_positions import (
|
||||
get_active_orders,
|
||||
get_active_orders_by_symbol,
|
||||
get_active_positions,
|
||||
get_active_positions_by_symbol,
|
||||
)
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
|
||||
logging.config.dictConfig(LOGGING_CONFIG)
|
||||
logger = logging.getLogger("get_positions_handlers")
|
||||
|
||||
router_get_positions_handlers = Router(name="get_positions_handlers")
|
||||
|
||||
|
||||
@router_get_positions_handlers.callback_query(F.data == "my_deals")
|
||||
async def get_positions_handlers(
|
||||
callback_query: CallbackQuery, state: FSMContext
|
||||
) -> None:
|
||||
"""
|
||||
Gets the user's active positions.
|
||||
:param callback_query: CallbackQuery object.
|
||||
:param state: FSMContext
|
||||
:return: None
|
||||
"""
|
||||
try:
|
||||
await state.clear()
|
||||
await callback_query.message.edit_text(
|
||||
text="Выберите какие сделки вы хотите посмотреть:",
|
||||
reply_markup=kbi.change_position,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error("Error in get_positions_handler: %s", e)
|
||||
await callback_query.answer(text="Произошла ошибка при получении сделок.")
|
||||
|
||||
|
||||
@router_get_positions_handlers.callback_query(F.data == "change_position")
|
||||
async def get_positions_handler(
|
||||
callback_query: CallbackQuery, state: FSMContext
|
||||
) -> None:
|
||||
"""
|
||||
Gets the user's active positions.
|
||||
:param callback_query: CallbackQuery object.
|
||||
:param state: FSMContext
|
||||
:return: None
|
||||
"""
|
||||
try:
|
||||
res = await get_active_positions(tg_id=callback_query.from_user.id)
|
||||
|
||||
if res is None:
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных позиций."
|
||||
)
|
||||
return
|
||||
|
||||
if res == ["No active positions found"]:
|
||||
await callback_query.answer(text="Нет активных позиций.")
|
||||
return
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
text="Ваши активные позиции:",
|
||||
reply_markup=kbi.create_active_positions_keyboard(res),
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error("Error in get_positions_handler: %s", e)
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных позиций."
|
||||
)
|
||||
finally:
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router_get_positions_handlers.callback_query(
|
||||
lambda c: c.data.startswith("get_position_")
|
||||
)
|
||||
async def get_position_handler(callback_query: CallbackQuery, state: FSMContext):
|
||||
try:
|
||||
symbol = callback_query.data.split("_", 2)[2]
|
||||
res = await get_active_positions_by_symbol(
|
||||
tg_id=callback_query.from_user.id, symbol=symbol
|
||||
)
|
||||
|
||||
if res is None:
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных позиций."
|
||||
)
|
||||
return
|
||||
|
||||
symbol = res.get("symbol") or "Нет данных"
|
||||
avg_price = res.get("avgPrice") or "Нет данных"
|
||||
size = res.get("size") or "Нет данных"
|
||||
side = res.get("side") or ""
|
||||
side_rus = (
|
||||
"Покупка"
|
||||
if side == "Buy"
|
||||
else "Продажа" if side == "Sell" else "Нет данных"
|
||||
)
|
||||
take_profit = res.get("takeProfit") or "Нет данных"
|
||||
stop_loss = res.get("stopLoss") or "Нет данных"
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
text=f"Торговая пара: {symbol}\n"
|
||||
f"Цена входа: {avg_price}\n"
|
||||
f"Количество: {size}\n"
|
||||
f"Движение: {side_rus}\n"
|
||||
f"Тейк-профит: {take_profit}\n"
|
||||
f"Стоп-лосс: {stop_loss}\n",
|
||||
reply_markup=kbi.make_close_position_keyboard(symbol_pos=symbol),
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Error in get_position_handler: %s", e)
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных позиций."
|
||||
)
|
||||
finally:
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router_get_positions_handlers.callback_query(F.data == "open_orders")
|
||||
async def get_open_orders_handler(
|
||||
callback_query: CallbackQuery, state: FSMContext
|
||||
) -> None:
|
||||
"""
|
||||
Gets the user's open orders.
|
||||
:param callback_query: CallbackQuery object.
|
||||
:param state: FSMContext
|
||||
:return: None
|
||||
"""
|
||||
try:
|
||||
res = await get_active_orders(tg_id=callback_query.from_user.id)
|
||||
|
||||
if res is None:
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных ордеров."
|
||||
)
|
||||
return
|
||||
|
||||
if res == ["No active orders found"]:
|
||||
await callback_query.answer(text="Нет активных ордеров.")
|
||||
return
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
text="Ваши активные ордера:",
|
||||
reply_markup=kbi.create_active_orders_keyboard(res),
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error("Error in get_open_orders_handler: %s", e)
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных ордеров."
|
||||
)
|
||||
finally:
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router_get_positions_handlers.callback_query(lambda c: c.data.startswith("get_order_"))
|
||||
async def get_order_handler(callback_query: CallbackQuery, state: FSMContext):
|
||||
try:
|
||||
symbol = callback_query.data.split("_", 2)[2]
|
||||
res = await get_active_orders_by_symbol(
|
||||
tg_id=callback_query.from_user.id, symbol=symbol
|
||||
)
|
||||
|
||||
if res is None:
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных ордеров."
|
||||
)
|
||||
return
|
||||
|
||||
symbol = res.get("symbol") or "Нет данных"
|
||||
price = res.get("price") or "Нет данных"
|
||||
qty = res.get("qty") or "Нет данных"
|
||||
side = res.get("side") or ""
|
||||
side_rus = (
|
||||
"Покупка"
|
||||
if side == "Buy"
|
||||
else "Продажа" if side == "Sell" else "Нет данных"
|
||||
)
|
||||
order_type = res.get("orderType") or ""
|
||||
order_type_rus = (
|
||||
"Рыночный"
|
||||
if order_type == "Market"
|
||||
else "Лимитный" if order_type == "Limit" else "Нет данных"
|
||||
)
|
||||
trigger_price = res.get("triggerPrice") or "Нет данных"
|
||||
take_profit = res.get("takeProfit") or "Нет данных"
|
||||
stop_loss = res.get("stopLoss") or "Нет данных"
|
||||
|
||||
await callback_query.message.edit_text(
|
||||
text=f"Торговая пара: {symbol}\n"
|
||||
f"Цена: {price}\n"
|
||||
f"Количество: {qty}\n"
|
||||
f"Движение: {side_rus}\n"
|
||||
f"Тип ордера: {order_type_rus}\n"
|
||||
f"Триггер цена: {trigger_price}\n"
|
||||
f"Тейк-профит: {take_profit}\n"
|
||||
f"Стоп-лосс: {stop_loss}\n",
|
||||
reply_markup=kbi.make_close_orders_keyboard(symbol_order=symbol),
|
||||
)
|
||||
await rq.set_user_symbol(tg_id=callback_query.from_user.id, symbol=symbol)
|
||||
except Exception as e:
|
||||
logger.error("Error in get_order_handler: %s", e)
|
||||
await callback_query.answer(
|
||||
text="Произошла ошибка при получении активных ордеров."
|
||||
)
|
||||
finally:
|
||||
await state.clear()
|
Reference in New Issue
Block a user