Files
stcs/app/bybit/get_functions/get_positions.py
algizn97 1508629727 Fixed
2025-10-03 14:19:18 +05:00

130 lines
4.2 KiB
Python

import logging.config
from app.bybit import get_bybit_client
from app.bybit.logger_bybit.logger_bybit import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("get_positions")
async def get_active_positions(tg_id: int) -> list | None:
"""
Get active positions for a user
"""
try:
client = await get_bybit_client(tg_id)
response = client.get_positions(category="linear", settleCoin="USDT")
if response["retCode"] == 0:
positions = response.get("result", {}).get("list", [])
active_symbols = [
pos.get("symbol") for pos in positions if float(pos.get("size", 0)) > 0
]
if active_symbols:
logger.info("Active positions for user: %s", tg_id)
return positions
else:
logger.warning("No active positions found for user: %s", tg_id)
return ["No active positions found"]
else:
logger.error(
"Error getting active positions for user %s: %s",
tg_id,
response["retMsg"],
)
return None
except Exception as e:
logger.error("Error getting active positions for user %s: %s", tg_id, e)
return None
async def get_active_positions_by_symbol(tg_id: int, symbol: str) -> dict | None:
"""
Get active positions for a user by symbol
"""
try:
client = await get_bybit_client(tg_id)
response = client.get_positions(category="linear", symbol=symbol)
if response["retCode"] == 0:
positions = response.get("result", {}).get("list", [])
if positions:
logger.info("Active positions for user: %s", tg_id)
return positions
else:
logger.warning("No active positions found for user: %s", tg_id)
return None
else:
logger.error(
"Error getting active positions for user %s: %s",
tg_id,
response["retMsg"],
)
return None
except Exception as e:
logger.error("Error getting active positions for user %s: %s", tg_id, e)
return None
async def get_active_orders(tg_id: int) -> list | None:
"""
Get active orders
"""
try:
client = await get_bybit_client(tg_id)
response = client.get_open_orders(
category="linear",
settleCoin="USDT",
limit=50,
)
if response["retCode"] == 0:
orders = response.get("result", {}).get("list", [])
active_orders = [
pos.get("symbol") for pos in orders if float(pos.get("qty", 0)) > 0
]
if active_orders:
logger.info("Active orders for user: %s", tg_id)
return orders
else:
logger.warning("No active orders found for user: %s", tg_id)
return ["No active orders found"]
else:
logger.error(
"Error getting active orders for user %s: %s", tg_id, response["retMsg"]
)
return None
except Exception as e:
logger.error("Error getting active orders for user %s: %s", tg_id, e)
return None
async def get_active_orders_by_symbol(tg_id: int, symbol: str) -> dict | None:
"""
Get active orders by symbol
"""
try:
client = await get_bybit_client(tg_id)
response = client.get_open_orders(
category="linear",
symbol=symbol,
limit=50,
)
if response["retCode"] == 0:
orders = response.get("result", {}).get("list", [])
if orders:
logger.info("Active orders for user: %s", tg_id)
return orders
else:
logger.warning("No active orders found for user: %s", tg_id)
return None
else:
logger.error(
"Error getting active orders for user %s: %s", tg_id, response["retMsg"]
)
return None
except Exception as e:
logger.error("Error getting active orders for user %s: %s", tg_id, e)
return None