From 49d4bb26bfc33cd3aa84b003d4b29997eb80e564 Mon Sep 17 00:00:00 2001 From: algizn97 Date: Fri, 19 Sep 2025 14:45:34 +0500 Subject: [PATCH] Added trigger price --- app/services/Bybit/functions/Futures.py | 5 +---- app/telegram/database/models.py | 10 +++++++++- app/telegram/database/requests.py | 26 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/services/Bybit/functions/Futures.py b/app/services/Bybit/functions/Futures.py index 4f82c68..553b10f 100644 --- a/app/services/Bybit/functions/Futures.py +++ b/app/services/Bybit/functions/Futures.py @@ -1,7 +1,6 @@ import asyncio import logging.config import time -import json import app.services.Bybit.functions.balance as balance_g import app.services.Bybit.functions.price_symbol as price_symbol import app.telegram.database.requests as rq @@ -224,7 +223,6 @@ async def handle_execution_message(message, msg): """ tg_id = message.from_user.id data = msg.get("data", [{}])[0] - logger.info("исполнео:", json.dumps(msg, indent=4)) data_main_risk_stgs = await rq.get_user_risk_management_settings(tg_id) commission_fee = data_main_risk_stgs.get("commission_fee", "ДА") pnl = parse_pnl_from_msg(msg) @@ -300,7 +298,7 @@ async def handle_order_message(message, msg: dict) -> None: Обработчик сообщений об исполнении ордера. Логирует событие и проверяет условия для мартингейла и TP. """ - logger.info(f"Исполнен ордер:\n{json.dumps(msg, indent=4, ensure_ascii=False)}") + # logger.info(f"Исполнен ордер:\n{json.dumps(msg, indent=4, ensure_ascii=False)}") trade_info = format_order_details_position(msg) @@ -796,7 +794,6 @@ async def get_active_orders_by_symbol(tg_id, symbol, message): order for order in active_orders.get("result", {}).get("list", []) ] - logger.info(limit_orders) if not limit_orders: await message.answer( diff --git a/app/telegram/database/models.py b/app/telegram/database/models.py index d20ad8c..73c56cd 100644 --- a/app/telegram/database/models.py +++ b/app/telegram/database/models.py @@ -153,7 +153,8 @@ class User_Main_Settings(Base): martingale_step = mapped_column(Integer(), default=1) maximal_quantity = mapped_column(Integer(), default=10) entry_order_type = mapped_column(String(10), default='Market') - limit_order_price = mapped_column(Numeric(18, 15), nullable=True) + limit_order_price = mapped_column(Numeric(18, 15), nullable=True, default=0) + trigger_price = mapped_column(Numeric(18, 15), nullable=True, default=0) last_side = mapped_column(String(10), default='Buy') trading_start_stop = mapped_column(Integer(), default=0) @@ -306,3 +307,10 @@ async def async_main(): if not result.first(): logger.info("Заполение таблицы последнего направления") await conn.execute(User_Main_Settings.__table__.insert().values(last_side=side)) + + order_type = ['Limit', 'Market'] + for typ in order_type: + result = await conn.execute(select(User_Main_Settings).where(User_Main_Settings.entry_order_type == typ)) + if not result.first(): + logger.info("Заполение таблицы типов ордеров") + await conn.execute(User_Main_Settings.__table__.insert().values(entry_order_type=typ)) diff --git a/app/telegram/database/requests.py b/app/telegram/database/requests.py index fb41694..f796e1a 100644 --- a/app/telegram/database/requests.py +++ b/app/telegram/database/requests.py @@ -318,6 +318,7 @@ async def get_user_main_settings(tg_id): 'maximal_quantity': user.maximal_quantity, 'entry_order_type': user.entry_order_type, 'limit_order_price': user.limit_order_price, + 'trigger_price': user.trigger_price, 'martingale_step': user.martingale_step, 'last_side': user.last_side, 'trading_start_stop': user.trading_start_stop, @@ -438,6 +439,31 @@ async def update_entry_order_type(tg_id, order_type): await session.commit() +async def update_trigger_price(tg_id, price): + """Обновить условную цену пользователя.""" + async with async_session() as session: + await session.execute( + update(UMS) + .where(UMS.tg_id == tg_id) + .values(trigger_price=str(price)) + ) + await session.commit() + +async def get_trigger_price(tg_id): + """Получить условную цену пользователя как float, либо None.""" + async with async_session() as session: + result = await session.execute( + select(UMS.trigger_price) + .where(UMS.tg_id == tg_id) + ) + price = result.scalar_one_or_none() + if price: + try: + return float(price) + except ValueError: + return None + return None + async def get_limit_price(tg_id): """Получить лимитную цену пользователя как float, либо None.""" async with async_session() as session: