The entire database has been changed to PostgresSQL. The entire code has been updated.

This commit is contained in:
algizn97
2025-10-01 15:23:21 +05:00
parent e5a3de4ed8
commit 97662081ce
49 changed files with 7916 additions and 0 deletions

View File

View File

@@ -0,0 +1,96 @@
import logging.config
from pybit import exceptions
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("set_leverage")
async def set_leverage(tg_id: int, symbol: str, leverage: str) -> bool:
"""
Set leverage
:param tg_id: int - User ID
:param symbol: str - Symbol
:param leverage: str - Leverage
:return: bool
"""
try:
client = await get_bybit_client(tg_id=tg_id)
response = client.set_leverage(
category="linear",
symbol=symbol,
buyLeverage=str(leverage),
sellLeverage=str(leverage),
)
if response["retCode"] == 0:
logger.info(
"Leverage set to %s for user: %s",
leverage,
tg_id,
)
return True
else:
logger.error("Error setting leverage: %s", response["retMsg"])
return False
except exceptions.InvalidRequestError as e:
if "110043" in str(e):
logger.debug(
"Leverage set to %s for user: %s",
leverage,
tg_id,
)
return True
else:
raise
except Exception as e:
logger.error("Error connecting to Bybit for user %s: %s", tg_id, e)
return False
async def set_leverage_to_buy_and_sell(
tg_id: int, symbol: str, leverage_to_buy: str, leverage_to_sell: str
) -> bool:
"""
Set leverage to buy and sell
:param tg_id: int - User ID
:param symbol: str - Symbol
:param leverage_to_buy: str - Leverage to buy
:param leverage_to_sell: str - Leverage to sell
:return: bool
"""
try:
client = await get_bybit_client(tg_id=tg_id)
response = client.set_leverage(
category="linear",
symbol=symbol,
buyLeverage=str(leverage_to_buy),
sellLeverage=str(leverage_to_sell),
)
if response["retCode"] == 0:
logger.info(
"Leverage set to %s and %s for user: %s",
leverage_to_buy,
leverage_to_sell,
tg_id,
)
return True
else:
logger.error("Error setting leverage for buy and sell for user: %s", tg_id)
return False
except exceptions.InvalidRequestError as e:
if "110043" in str(e):
logger.debug(
"Leverage set to %s and %s for user: %s",
leverage_to_buy,
leverage_to_sell,
tg_id,
)
return True
else:
raise
except Exception as e:
logger.error("Error connecting to Bybit for user %s: %s", tg_id, e)
return False

View File

@@ -0,0 +1,28 @@
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("set_margin_mode")
async def set_margin_mode(tg_id: int, margin_mode: str) -> bool:
"""
Set margin mode
:param tg_id: int - User ID
:param margin_mode: str - Margin mode
:return: bool
"""
try:
client = await get_bybit_client(tg_id=tg_id)
response = client.set_margin_mode(setMarginMode=margin_mode)
if response["retCode"] == 0:
logger.info("Margin mode set to %s for user: %s", margin_mode, tg_id)
return True
else:
logger.error("Error setting margin mode: %s", tg_id)
return False
except Exception as e:
logger.error("Error connecting to Bybit for user %s: %s", tg_id, e)
return False

View File

@@ -0,0 +1,48 @@
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("set_switch_position_mode")
async def set_switch_position_mode(tg_id: int, symbol: str, mode: int) -> str | bool:
"""
Set switch position mode
:param tg_id: int - User ID
:param symbol: str - Symbol
:param mode: int - Mode
:return: bool
"""
try:
client = await get_bybit_client(tg_id=tg_id)
response = client.switch_position_mode(
category="linear",
symbol=symbol,
mode=mode,
)
if response["retCode"] == 0:
logger.info("Switch position mode set successfully")
return True
else:
logger.error("Error setting switch position mode for user: %s", tg_id)
return False
except Exception as e:
if str(e).startswith("Position mode is not modified"):
logger.debug(
"Position mode is not modified for user: %s",
tg_id,
)
return True
if str(e).startswith(
"You have an existing position, so position mode cannot be switched"
):
logger.debug(
"You have an existing position, so position mode cannot be switched for user: %s",
tg_id,
)
return "You have an existing position, so position mode cannot be switched"
else:
logger.error("Error connecting to Bybit for user %s: %s", tg_id, e)
return False

View File

@@ -0,0 +1,48 @@
import logging.config
from app.bybit import get_bybit_client
from app.bybit.get_functions.get_positions import get_active_positions_by_symbol
from app.bybit.logger_bybit.logger_bybit import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("set_tp_sl")
async def set_tp_sl_for_position(
tg_id: int,
symbol: str,
take_profit_price: float,
stop_loss_price: float,
) -> bool:
"""
Set take profit and stop loss for a symbol.
:param tg_id: Telegram user ID
:param symbol: Symbol to set take profit and stop loss for
:param take_profit_price: Take profit price
:param stop_loss_price: Stop loss price
:return: bool
"""
try:
client = await get_bybit_client(tg_id)
user_positions = await get_active_positions_by_symbol(
tg_id=tg_id, symbol=symbol
)
position_idx = user_positions.get("positionIdx")
resp = client.set_trading_stop(
category="linear",
symbol=symbol,
takeProfit=str(round(take_profit_price, 5)),
stopLoss=str(round(stop_loss_price, 5)),
positionIdx=position_idx,
tpslMode="Full",
)
if resp.get("retCode") == 0:
logger.info("TP/SL for %s has been set", symbol)
return True
else:
logger.error("Error setting TP/SL for %s: %s", symbol, resp.get("retMsg"))
return False
except Exception as e:
logger.error("Error setting TP/SL for %s: %s", symbol, e)
return False