This commit is contained in:
algizn97
2025-08-23 14:34:19 +05:00
parent afe61ea7d6
commit 89ea511072
6 changed files with 238 additions and 111 deletions

View File

@@ -1,13 +1,15 @@
import asyncio
import time
import logging
import logging.config
from pybit import exceptions
from pybit.unified_trading import HTTP
from logger_helper.logger_helper import LOGGING_CONFIG
import app.services.Bybit.functions.price_symbol as price_symbol
import app.services.Bybit.functions.balance as balance_g
import app.telegram.database.requests as rq
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("futures")
async def info_access_open_deal(message, symbol, trade_mode, margin_mode, leverage, qty):
human_margin_mode = 'Isolated' if margin_mode == 'ISOLATED_MARGIN' else 'Cross'
@@ -44,6 +46,10 @@ async def open_position(tg_id, message, side: str, margin_mode: str):
symbol = await rq.get_symbol(tg_id)
data_main_stgs = await rq.get_user_main_settings(tg_id)
order_type = data_main_stgs.get('entry_order_type', 'Market')
limit_price = None
if order_type == 'Limit':
limit_price = await rq.get_limit_price(tg_id)
data_risk_stgs = await rq.get_user_risk_management_settings(tg_id)
bybit_margin_mode = 'ISOLATED_MARGIN' if margin_mode == 'Isolated' else 'REGULAR_MARGIN'
@@ -51,8 +57,8 @@ async def open_position(tg_id, message, side: str, margin_mode: str):
client = HTTP(api_key=api_key, api_secret=secret_key)
try:
balance = await balance_g.get_balance(tg_id)
price = await price_symbol.get_price(tg_id, message)
balance = await balance_g.get_balance(tg_id, message)
price = await price_symbol.get_price(tg_id)
# Установка маржинального режима
client.set_margin_mode(setMarginMode=bybit_margin_mode)
@@ -109,9 +115,10 @@ async def open_position(tg_id, message, side: str, margin_mode: str):
category='linear',
symbol=symbol,
side=side,
orderType="Market",
orderType=order_type,
qty=next_quantity,
leverage=int(data_main_stgs['size_leverage']),
price=limit_price if order_type == 'Limit' else None,
takeProfit=takeProfit,
stopLoss=loss_profit,
orderLinkId=f"deal_{symbol}_{int(time.time())}"
@@ -125,11 +132,11 @@ async def open_position(tg_id, message, side: str, margin_mode: str):
await message.answer(f"Ошибка открытия ордера: {response.get('ret_msg', 'неизвестная ошибка')}")
except exceptions.InvalidRequestError as e:
logging.error(f"InvalidRequestError: {e}")
logger.error(f"InvalidRequestError: {e}")
await message.answer('Ошибка: неверно указана торговая пара или параметры.')
except Exception as e:
logging.error(f"Ошибка при совершении сделки: {e}")
await message.answer('⚠️ Ошибка при совершении сделки')
logger.error(f"Ошибка при совершении сделки: {e}")
async def trading_cycle(tg_id, message):
@@ -179,7 +186,7 @@ async def get_active_positions(message, api_key, secret_key, symbol):
if pos.get('size') and float(pos['size']) > 0:
active_positions.append(pos)
except Exception as e:
logging.error(f"Ошибка при получении позиций: {e}")
logger.error(f"Ошибка при получении позиций: {e}")
await message.answer('⚠️ Ошибка при получении позиций')
for sym in symbols:
@@ -228,7 +235,7 @@ async def close_user_trade(tg_id: int, symbol: str) -> bool:
)
return response['ret_code'] == 0
except Exception as e:
logging.error(f"Ошибка закрытия сделки {symbol} для пользователя {tg_id}: {e}")
logger.error(f"Ошибка закрытия сделки {symbol} для пользователя {tg_id}: {e}")
return False