Added trigger function

This commit is contained in:
algizn97
2025-08-29 11:42:55 +05:00
parent f09fe1d70b
commit f4ff128236
2 changed files with 90 additions and 32 deletions

View File

@@ -1,13 +1,10 @@
import asyncio import logging.config
import logging.config
import app.telegram.Keyboards.inline_keyboards as inline_markup import app.telegram.Keyboards.inline_keyboards as inline_markup
from aiogram import Router, F from aiogram import Router, F
from aiogram.types import Message, CallbackQuery from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext from aiogram.fsm.context import FSMContext
import app.telegram.database.requests as rq import app.telegram.database.requests as rq
from aiogram.fsm.state import State, StatesGroup from app.states.States import condition_settings
from app.services.Bybit.functions.Futures import trading_cycle
from logger_helper.logger_helper import LOGGING_CONFIG from logger_helper.logger_helper import LOGGING_CONFIG
@@ -17,27 +14,21 @@ logger = logging.getLogger("condition_settings")
condition_settings_router = Router() condition_settings_router = Router()
class condition_settings(StatesGroup): async def reg_new_user_default_condition_settings(id):
trigger = State()
timer = State()
volatilty = State()
volume = State()
integration = State()
use_tv_signal = State()
async def reg_new_user_default_condition_settings(id, message):
tg_id = 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) await rq.set_new_user_default_condition_settings(tg_id, trigger)
async def main_settings_message(id, message, state): async def main_settings_message(id, message):
text = """ <b>Условия запуска</b>
<b>- Триггер:</b> Ручной запуск / Сигнал TradingView / Полностью автоматический tg_id = id
trigger = await rq.get_for_registration_trigger(tg_id)
text = f""" <b>Условия запуска</b>
<b>- Триггер:</b> {trigger}
<b>- Таймер: </b> установить таймер / остановить таймер <b>- Таймер: </b> установить таймер / остановить таймер
<b>- Фильтр волатильности / объёма: </b> включить/отключить <b>- Фильтр волатильности / объёма: </b> включить/отключить
<b>- Интеграции и внешние сигналы: </b> <b>- Интеграции и внешние сигналы: </b>
@@ -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) await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup)
async def trigger_message(message, state): async def trigger_message(id, message, state: FSMContext):
text = '''Триггер await state.set_state(condition_settings.trigger)
text = '''
Описание ручного запуска, сигналов, автоматического режима ''' <b>- Автоматический:</b> торговля будет продолжаться до условии остановки.
<b>- Ручной:</b> торговля будет происходить только в ручном режиме.
<em>- Выберите тип триггера:</em>'''
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trigger_markup) 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): async def timer_message(id, message: Message, state: FSMContext):
await state.set_state(condition_settings.timer) await state.set_state(condition_settings.timer)

View File

@@ -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.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup import app.telegram.Keyboards.reply_keyboards as reply_markup
@@ -17,7 +17,8 @@ class update_main_settings(StatesGroup):
margin_type = State() margin_type = State()
martingale_factor = State() martingale_factor = State()
starting_quantity = State() starting_quantity = State()
maximal_quantity = State() maximal_quantity = State()
switch_mode_enabled = State()
async def reg_new_user_default_main_settings(id, message): async def reg_new_user_default_main_settings(id, message):
tg_id = id tg_id = id
@@ -34,6 +35,8 @@ async def main_settings_message(id, message, state):
await message.answer(f"""<b>Основные настройки</b> await message.answer(f"""<b>Основные настройки</b>
<b>- Режим торговли:</b> {data['trading_mode']} <b>- Режим торговли:</b> {data['trading_mode']}
<b>- Режим свитч:</b> {data['switch_mode_enabled']}
<b>- Состояние свитча:</b> {data['switch_state']}
<b>- Тип маржи:</b> {data['margin_type']} <b>- Тип маржи:</b> {data['margin_type']}
<b>- Размер кредитного плеча:</b> х{data['size_leverage']} <b>- Размер кредитного плеча:</b> х{data['size_leverage']}
<b>- Начальная ставка:</b> {data['starting_quantity']} <b>- Начальная ставка:</b> {data['starting_quantity']}
@@ -52,8 +55,6 @@ async def trading_mode_message(message, state):
<b>Шорт</b> — метод продажи активов, взятых в кредит, чтобы получить прибыль от снижения цены. <b>Шорт</b> — метод продажи активов, взятых в кредит, чтобы получить прибыль от снижения цены.
<b>Смарт</b> — автоматизированный режим, который подбирает оптимальную стратегию в зависимости от текущих рыночных условий. <b>Смарт</b> — автоматизированный режим, который подбирает оптимальную стратегию в зависимости от текущих рыночных условий.
<b>Свитч</b> — динамическое переключение между торговыми режимами для максимизации эффективности.
<em>Выберите ниже для изменений:</em> <em>Выберите ниже для изменений:</em>
""", parse_mode='html', reply_markup=inline_markup.trading_mode_markup) """, 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 main_settings_message(id, callback.message, state)
await state.clear() 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': case 'trade_mode_smart':
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Smart") await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Smart")
await rq.update_trade_mode_user(id, '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: except Exception as e:
print(f"error: {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(
"""<b>Свитч</b> — динамическое переключение между торговыми режимами для максимизации эффективности.
<em>Выберите ниже для изменений:</em>""", 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): async def size_leverage_message (message, state):
await state.set_state(update_main_settings.size_leverage) await state.set_state(update_main_settings.size_leverage)
await message.edit_text("Введите размер <b>кредитного плеча</b> (от 1 до 100): ", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup) await message.edit_text("Введите размер <b>кредитного плеча</b> (от 1 до 100): ", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
@router_main_settings.message(update_main_settings.size_leverage) @router_main_settings.message(update_main_settings.size_leverage)
async def state_size_leverage(message: Message, state): async def state_size_leverage(message: Message, state):
await state.update_data(size_leverage = message.text) await state.update_data(size_leverage = message.text)