diff --git a/app/telegram/functions/condition_settings/settings.py b/app/telegram/functions/condition_settings/settings.py
index 6b385d1..32932eb 100644
--- a/app/telegram/functions/condition_settings/settings.py
+++ b/app/telegram/functions/condition_settings/settings.py
@@ -1,13 +1,10 @@
-import asyncio
-import logging.config
+import logging.config
import app.telegram.Keyboards.inline_keyboards as inline_markup
from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext
import app.telegram.database.requests as rq
-from aiogram.fsm.state import State, StatesGroup
-
-from app.services.Bybit.functions.Futures import trading_cycle
+from app.states.States import condition_settings
from logger_helper.logger_helper import LOGGING_CONFIG
@@ -17,27 +14,21 @@ logger = logging.getLogger("condition_settings")
condition_settings_router = Router()
-class condition_settings(StatesGroup):
- trigger = State()
- timer = State()
- volatilty = State()
- volume = State()
- integration = State()
- use_tv_signal = State()
-
-
-async def reg_new_user_default_condition_settings(id, message):
+async def reg_new_user_default_condition_settings(id):
tg_id = id
- trigger = await rq.get_for_registration_trigger()
+ trigger = await rq.get_for_registration_trigger(tg_id)
await rq.set_new_user_default_condition_settings(tg_id, trigger)
-async def main_settings_message(id, message, state):
- text = """ Условия запуска
+async def main_settings_message(id, message):
-- Триггер: Ручной запуск / Сигнал TradingView / Полностью автоматический
+ tg_id = id
+ trigger = await rq.get_for_registration_trigger(tg_id)
+ text = f""" Условия запуска
+
+- Триггер: {trigger}
- Таймер: установить таймер / остановить таймер
- Фильтр волатильности / объёма: включить/отключить
- Интеграции и внешние сигналы:
@@ -48,14 +39,33 @@ async def main_settings_message(id, message, state):
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup)
-async def trigger_message(message, state):
- text = '''Триггер
-
- Описание ручного запуска, сигналов, автоматического режима '''
+async def trigger_message(id, message, state: FSMContext):
+ await state.set_state(condition_settings.trigger)
+ text = '''
+- Автоматический: торговля будет продолжаться до условии остановки.
+- Ручной: торговля будет происходить только в ручном режиме.
+- Выберите тип триггера:'''
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trigger_markup)
+@condition_settings_router.callback_query(F.data == "clb_trigger_manual")
+async def trigger_manual_callback(callback: CallbackQuery, state: FSMContext):
+ await state.set_state(condition_settings.trigger)
+ await rq.update_trigger(tg_id=callback.from_user.id, trigger="Ручной")
+ await callback.message.answer("Триггер установлен в ручной режим.")
+ await main_settings_message(callback.from_user.id, callback.message)
+ await callback.answer()
+
+
+@condition_settings_router.callback_query(F.data == "clb_trigger_auto")
+async def trigger_manual_callback(callback: CallbackQuery, state: FSMContext):
+ await state.set_state(condition_settings.trigger)
+ await rq.update_trigger(tg_id=callback.from_user.id, trigger="Автоматический")
+ await callback.message.answer("Триггер установлен в автоматический режим.")
+ await main_settings_message(callback.from_user.id, callback.message)
+ await callback.answer()
+
async def timer_message(id, message: Message, state: FSMContext):
await state.set_state(condition_settings.timer)
diff --git a/app/telegram/functions/main_settings/settings.py b/app/telegram/functions/main_settings/settings.py
index 2365967..90f1050 100644
--- a/app/telegram/functions/main_settings/settings.py
+++ b/app/telegram/functions/main_settings/settings.py
@@ -1,4 +1,4 @@
-from aiogram import Router
+from aiogram import Router, F
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
@@ -17,7 +17,8 @@ class update_main_settings(StatesGroup):
margin_type = State()
martingale_factor = State()
starting_quantity = State()
- maximal_quantity = State()
+ maximal_quantity = State()
+ switch_mode_enabled = State()
async def reg_new_user_default_main_settings(id, message):
tg_id = id
@@ -34,6 +35,8 @@ async def main_settings_message(id, message, state):
await message.answer(f"""Основные настройки
- Режим торговли: {data['trading_mode']}
+- Режим свитч: {data['switch_mode_enabled']}
+- Состояние свитча: {data['switch_state']}
- Тип маржи: {data['margin_type']}
- Размер кредитного плеча: х{data['size_leverage']}
- Начальная ставка: {data['starting_quantity']}
@@ -52,8 +55,6 @@ async def trading_mode_message(message, state):
Шорт — метод продажи активов, взятых в кредит, чтобы получить прибыль от снижения цены.
Смарт — автоматизированный режим, который подбирает оптимальную стратегию в зависимости от текущих рыночных условий.
-
-Свитч — динамическое переключение между торговыми режимами для максимизации эффективности.
Выберите ниже для изменений:
""", parse_mode='html', reply_markup=inline_markup.trading_mode_markup)
@@ -79,12 +80,7 @@ async def state_trading_mode(callback: CallbackQuery, state):
await main_settings_message(id, callback.message, state)
await state.clear()
- case 'trade_mode_switch':
- await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Switch")
- await rq.update_trade_mode_user(id, 'Switch')
- await main_settings_message(id, callback.message, state)
- await state.clear()
case 'trade_mode_smart':
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Smart")
await rq.update_trade_mode_user(id, 'Smart')
@@ -94,11 +90,63 @@ async def state_trading_mode(callback: CallbackQuery, state):
except Exception as e:
print(f"error: {e}")
+
+async def switch_mode_enabled_message(message, state):
+ await state.set_state(update_main_settings.switch_mode_enabled)
+
+ await message.edit_text(
+ """Свитч — динамическое переключение между торговыми режимами для максимизации эффективности.
+
+ Выберите ниже для изменений:""", parse_mode='html', reply_markup=inline_markup.buttons_on_off_markup_for_switch)
+
+
+
+
+@router_main_settings.callback_query(lambda c: c.data in ["clb_on_switch", "clb_off_switch"])
+async def state_switch_mode_enabled(callback: CallbackQuery, state):
+ await callback.answer()
+ tg_id = callback.from_user.id
+ val = "Включить" if callback.data == "clb_on_switch" else "Выключить"
+ if val == "Включить":
+ await rq.update_switch_mode_enabled(tg_id, "Включено")
+ await callback.message.answer(f"Включено")
+ await main_settings_message(tg_id, callback.message, state)
+ else:
+ await rq.update_switch_mode_enabled(tg_id, "Выключено")
+ await callback.message.answer(f"Выключено")
+ await main_settings_message(tg_id, callback.message, state)
+ await state.clear()
+
+
+@router_main_settings.callback_query(lambda c: c.data in ["clb_switch_state"])
+async def state_switch_mode_enabled(callback: CallbackQuery):
+ await callback.answer()
+ await callback.message.answer("Выберите состояние свитча:", reply_markup=inline_markup.switch_state_markup)
+
+
+@router_main_settings.callback_query(lambda c: c.data in ["clb_long_switch", "clb_short_switch"])
+async def state_switch_mode_enabled(callback: CallbackQuery, state):
+ await callback.answer()
+ tg_id = callback.from_user.id
+ val = "Long" if callback.data == "clb_long_switch" else "Short"
+ if val == "Long":
+ await rq.update_switch_state(tg_id, "Long")
+ await callback.message.answer(f"Состояние свитча: {val}")
+ await main_settings_message(tg_id, callback.message, state)
+ else:
+ await rq.update_switch_state(tg_id, "Short")
+ await callback.message.answer(f"Состояние свитча: {val}")
+ await main_settings_message(tg_id, callback.message, state)
+ await state.clear()
+
+
+
async def size_leverage_message (message, state):
await state.set_state(update_main_settings.size_leverage)
await message.edit_text("Введите размер кредитного плеча (от 1 до 100): ", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
+
@router_main_settings.message(update_main_settings.size_leverage)
async def state_size_leverage(message: Message, state):
await state.update_data(size_leverage = message.text)