diff --git a/app/telegram/functions/condition_settings/settings.py b/app/telegram/functions/condition_settings/settings.py
index 0f3116d..bfc9eec 100644
--- a/app/telegram/functions/condition_settings/settings.py
+++ b/app/telegram/functions/condition_settings/settings.py
@@ -5,7 +5,7 @@ from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext
import app.telegram.database.requests as rq
from app.states.States import condition_settings
-
+from app.states.States import state_limit_price, state_update_entry_type, state_trigger_price
from logger_helper.logger_helper import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG)
@@ -23,8 +23,24 @@ async def reg_new_user_default_condition_settings(id):
async def main_settings_message(id, message):
+ data = await rq.get_user_main_settings(id)
+ entry_order_type = data['entry_order_type']
+
+ if entry_order_type == "Market":
+ entry_order_type_rus = "Маркет"
+ elif entry_order_type == "Limit":
+ entry_order_type_rus = "Лимит"
+ else:
+ entry_order_type_rus = "Условный"
+
+ trigger_price = data['trigger_price'] or 0.0
+ limit_price = data['limit_order_price'] or 0.0
+
text = f""" Условия запуска
- Таймер: установить таймер / удалить таймер
+- Тип позиции: {entry_order_type_rus}
+- Триггер цена: {trigger_price:,.4f}
+- Лимит цена: {limit_price:,.4f}
"""
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup)
@@ -75,6 +91,85 @@ async def delete_timer_callback(callback: CallbackQuery, state: FSMContext):
await callback.answer()
+@condition_settings_router.callback_query(F.data == 'clb_update_entry_type')
+async def update_entry_type_message(callback: CallbackQuery, state: FSMContext) -> None:
+ """
+ Запрашивает у пользователя тип входа в позицию (Market или Limit).
+ """
+ await state.set_state(state_update_entry_type.entry_type)
+ await callback.message.answer("Выберите тип входа в позицию:", reply_markup=inline_markup.entry_order_type_markup)
+ await callback.answer()
+
+
+@condition_settings_router.callback_query(lambda c: c.data and c.data.startswith('entry_order_type:'))
+async def entry_order_type_callback(callback: CallbackQuery, state: FSMContext) -> None:
+ """
+ Обработка выбора типа входа в позицию.
+ Если Limit, запрашивает цену лимитного ордера.
+ Если Market — обновляет настройки.
+ """
+ order_type = callback.data.split(':')[1]
+
+ if order_type not in ['Market', 'Limit']:
+ await callback.answer("Ошибка выбора", show_alert=True)
+ return
+
+ if order_type == 'Limit':
+ order_type_rus = 'Лимит'
+ else:
+ order_type_rus = 'Маркет'
+ try:
+ await state.update_data(entry_order_type=order_type)
+ await rq.update_entry_order_type(callback.from_user.id, order_type)
+ await callback.message.answer(f"Выбран тип входа {order_type_rus}",
+ reply_markup=inline_markup.back_to_condition_settings)
+ await callback.answer()
+ except Exception as e:
+ logger.error("Произошла ошибка при обновлении типа входа в позицию: %s", e)
+ await callback.message.answer("Произошла ошибка при обновлении типа входа в позицию",
+ reply_markup=inline_markup.back_to_condition_settings)
+ await state.clear()
+
+
+@condition_settings_router.callback_query(F.data == 'clb_change_limit_price')
+async def set_limit_price_callback(callback: CallbackQuery, state: FSMContext) -> None:
+ await state.set_state(state_limit_price.price)
+ await callback.message.answer("Введите цену лимитного ордера:", reply_markup=inline_markup.cancel)
+ await callback.answer()
+
+
+@condition_settings_router.message(state_limit_price.price)
+async def process_limit_price_input(message: Message, state: FSMContext) -> None:
+ try:
+ price = float(message.text)
+ await state.update_data(price=price)
+ await rq.update_limit_price(tg_id=message.from_user.id, price=price)
+ await message.answer(f"Цена лимитного ордера установлена: {price}", reply_markup=inline_markup.back_to_condition_settings)
+ await state.clear()
+ except ValueError:
+ await message.reply("Пожалуйста, введите корректную цену.")
+
+
+@condition_settings_router.callback_query(F.data == 'clb_change_trigger_price')
+async def change_trigger_price_callback(callback: CallbackQuery, state: FSMContext) -> None:
+ await state.set_state(state_trigger_price.price)
+ await callback.message.answer("Введите цену триггера:", reply_markup=inline_markup.cancel)
+ await callback.answer()
+
+
+@condition_settings_router.message(state_trigger_price.price)
+async def process_trigger_price_input(message: Message, state: FSMContext) -> None:
+ try:
+ price = float(message.text)
+ await state.update_data(price=price)
+ await rq.update_trigger_price(tg_id=message.from_user.id, price=price)
+ await message.answer(f"Цена триггера установлена: {price}", reply_markup=inline_markup.back_to_condition_settings)
+ await state.clear()
+ except ValueError:
+ await message.reply("Пожалуйста, введите корректную цену.")
+
+
+
async def filter_volatility_message(message, state):
text = '''Фильтр волатильности