forked from kodorvan/stcs
Fixed
This commit is contained in:
@@ -25,6 +25,7 @@ special_settings_markup = InlineKeyboardMarkup(inline_keyboard=[
|
||||
InlineKeyboardButton(text="Дополнительные параметры", callback_data='clb_change_additional_settings')],
|
||||
|
||||
[InlineKeyboardButton(text="Подключить Bybit", callback_data='clb_new_user_connect_bybit_api_message')],
|
||||
back_btn_to_main
|
||||
])
|
||||
|
||||
connect_bybit_api_markup = InlineKeyboardMarkup(inline_keyboard=[
|
||||
@@ -93,7 +94,7 @@ risk_management_settings_markup = InlineKeyboardMarkup(inline_keyboard=[
|
||||
])
|
||||
|
||||
condition_settings_markup = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[InlineKeyboardButton(text='Триггер', callback_data='clb_change_trigger'),
|
||||
[InlineKeyboardButton(text='Режим торговли', callback_data='clb_change_mode'),
|
||||
InlineKeyboardButton(text='Таймер', callback_data='clb_change_timer')],
|
||||
|
||||
[InlineKeyboardButton(text='Фильтр волатильности', callback_data='clb_change_filter_volatility'),
|
||||
|
@@ -1,6 +1,6 @@
|
||||
from datetime import datetime
|
||||
import logging.config
|
||||
from sqlalchemy.sql.sqltypes import DateTime
|
||||
from sqlalchemy.sql.sqltypes import DateTime, Numeric
|
||||
|
||||
from sqlalchemy import BigInteger, Boolean, Integer, String, ForeignKey
|
||||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||||
@@ -120,17 +120,16 @@ class Margin_type(Base):
|
||||
|
||||
class Trigger(Base):
|
||||
"""
|
||||
Справочник видов триггеров для сделок.
|
||||
Справочник триггеров для сделок.
|
||||
|
||||
Атрибуты:
|
||||
id (int): Первичный ключ.
|
||||
trigger (str): Название триггера (например, 'Ручной', 'Автоматический').
|
||||
id (int): Первичный ключ..
|
||||
"""
|
||||
__tablename__ = 'triggers'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
|
||||
trigger = mapped_column(String(15), unique=True)
|
||||
trigger_price = mapped_column(Integer(), default=0)
|
||||
|
||||
|
||||
class User_Main_Settings(Base):
|
||||
@@ -163,10 +162,10 @@ class User_Main_Settings(Base):
|
||||
size_leverage = mapped_column(Integer(), default=1)
|
||||
starting_quantity = mapped_column(Integer(), default=1)
|
||||
martingale_factor = mapped_column(Integer(), default=1)
|
||||
martingale_step = mapped_column(Integer(), default=1)
|
||||
martingale_step = mapped_column(Integer(), default=0)
|
||||
maximal_quantity = mapped_column(Integer(), default=10)
|
||||
entry_order_type = mapped_column(String(10), default='Market')
|
||||
limit_order_price = mapped_column(String(20), nullable=True)
|
||||
limit_order_price = mapped_column(Numeric(18, 15), nullable=True)
|
||||
|
||||
|
||||
class User_Risk_Management_Settings(Base):
|
||||
@@ -297,7 +296,7 @@ async def async_main():
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
# Заполнение таблиц
|
||||
modes = ['Long', 'Short', 'Switch', 'Smart']
|
||||
modes = ['Long', 'Short', 'Smart']
|
||||
for mode in modes:
|
||||
result = await conn.execute(select(Trading_Mode).where(Trading_Mode.mode == mode))
|
||||
if not result.first():
|
||||
@@ -310,10 +309,3 @@ async def async_main():
|
||||
if not result.first():
|
||||
logger.info("Заполение таблицы типов маржи")
|
||||
await conn.execute(Margin_type.__table__.insert().values(type=type))
|
||||
|
||||
triggers = ['Ручной', 'Автоматический']
|
||||
for trigger in triggers:
|
||||
result = await conn.execute(select(Trigger).where(Trigger.trigger == trigger))
|
||||
if not result.first():
|
||||
logger.info("Заполение таблицы триггеров")
|
||||
await conn.execute(Trigger.__table__.insert().values(trigger=trigger))
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import logging.config
|
||||
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any
|
||||
|
@@ -7,7 +7,7 @@ async def reg_new_user_default_additional_settings(id, message):
|
||||
|
||||
await rq.set_new_user_default_additional_settings(tg_id)
|
||||
|
||||
async def main_settings_message(id, message, state):
|
||||
async def main_settings_message(id, message):
|
||||
text = '''<b>Дополнительные параметры</b>
|
||||
|
||||
<b>- Сохранить как шаблон стратегии:</b> да / нет
|
||||
|
@@ -28,7 +28,7 @@ async def main_settings_message(id, message):
|
||||
trigger = await rq.get_for_registration_trigger(tg_id)
|
||||
text = f""" <b>Условия запуска</b>
|
||||
|
||||
<b>- Триггер:</b> {trigger}
|
||||
<b>- Режим торговли:</b> {trigger}
|
||||
<b>- Таймер: </b> установить таймер / остановить таймер
|
||||
<b>- Фильтр волатильности / объёма: </b> включить/отключить
|
||||
<b>- Интеграции и внешние сигналы: </b>
|
||||
@@ -53,7 +53,6 @@ async def trigger_message(id, message, state: FSMContext):
|
||||
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()
|
||||
|
||||
@@ -62,7 +61,6 @@ async def trigger_manual_callback(callback: CallbackQuery, state: FSMContext):
|
||||
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()
|
||||
|
||||
|
@@ -10,7 +10,7 @@ async def start_message(message):
|
||||
username = message.from_user.first_name
|
||||
else:
|
||||
username = f'{message.from_user.first_name} {message.from_user.last_name}'
|
||||
await message.answer(f""" Привет <b>{username}</b>! 👋""", parse_mode='html')
|
||||
await message.answer(f""" Привет <b>{username}</b>! 👋""", parse_mode='html', reply_markup=reply_markup.base_buttons_markup)
|
||||
await message.answer("Добро пожаловать в чат-робот для автоматизации трейдинга — вашего надежного помощника для анализа рынка и принятия взвешенных решений.",
|
||||
parse_mode='html', reply_markup=inline_markup.start_markup)
|
||||
|
||||
|
@@ -1,24 +1,18 @@
|
||||
from aiogram import Router, F
|
||||
|
||||
from aiogram import Router
|
||||
import logging.config
|
||||
import app.telegram.Keyboards.inline_keyboards as inline_markup
|
||||
import app.telegram.Keyboards.reply_keyboards as reply_markup
|
||||
|
||||
from pybit.unified_trading import HTTP
|
||||
import app.telegram.database.requests as rq
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
from app.states.States import update_main_settings
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
|
||||
# FSM - Механизм состояния
|
||||
from aiogram.fsm.state import State, StatesGroup
|
||||
logging.config.dictConfig(LOGGING_CONFIG)
|
||||
logger = logging.getLogger("main_settings")
|
||||
|
||||
router_main_settings = Router()
|
||||
|
||||
class update_main_settings(StatesGroup):
|
||||
trading_mode = State()
|
||||
size_leverage = State()
|
||||
margin_type = State()
|
||||
martingale_factor = State()
|
||||
starting_quantity = State()
|
||||
maximal_quantity = State()
|
||||
switch_mode_enabled = State()
|
||||
|
||||
async def reg_new_user_default_main_settings(id, message):
|
||||
tg_id = id
|
||||
@@ -27,12 +21,12 @@ async def reg_new_user_default_main_settings(id, message):
|
||||
margin_type = await rq.get_for_registration_margin_type()
|
||||
|
||||
await rq.set_new_user_default_main_settings(tg_id, trading_mode, margin_type)
|
||||
|
||||
|
||||
async def main_settings_message(id, message, state):
|
||||
data = await rq.get_user_main_settings(id)
|
||||
|
||||
await message.answer(f"""<b>Основные настройки</b>
|
||||
async def main_settings_message(id, message):
|
||||
data = await rq.get_user_main_settings(id)
|
||||
|
||||
await message.answer(f"""<b>Основные настройки</b>
|
||||
|
||||
<b>- Режим торговли:</b> {data['trading_mode']}
|
||||
<b>- Режим свитч:</b> {data['switch_mode_enabled']}
|
||||
@@ -45,6 +39,7 @@ async def main_settings_message(id, message, state):
|
||||
<b>- Максимальное количество ставок в серии:</b> {data['maximal_quantity']}
|
||||
""", parse_mode='html', reply_markup=inline_markup.main_settings_markup)
|
||||
|
||||
|
||||
async def trading_mode_message(message, state):
|
||||
await state.set_state(update_main_settings.trading_mode)
|
||||
|
||||
@@ -59,36 +54,37 @@ async def trading_mode_message(message, state):
|
||||
<em>Выберите ниже для изменений:</em>
|
||||
""", parse_mode='html', reply_markup=inline_markup.trading_mode_markup)
|
||||
|
||||
|
||||
@router_main_settings.callback_query(update_main_settings.trading_mode)
|
||||
async def state_trading_mode(callback: CallbackQuery, state):
|
||||
await callback.answer()
|
||||
await callback.answer()
|
||||
|
||||
id = callback.from_user.id
|
||||
data_settings = await rq.get_user_main_settings(id)
|
||||
id = callback.from_user.id
|
||||
data_settings = await rq.get_user_main_settings(id)
|
||||
|
||||
try:
|
||||
match callback.data:
|
||||
case 'trade_mode_long':
|
||||
try:
|
||||
match callback.data:
|
||||
case 'trade_mode_long':
|
||||
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Long")
|
||||
await rq.update_trade_mode_user(id, 'Long')
|
||||
await main_settings_message(id, callback.message, state)
|
||||
await main_settings_message(id, callback.message)
|
||||
|
||||
await state.clear()
|
||||
case 'trade_mode_short':
|
||||
case 'trade_mode_short':
|
||||
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Short")
|
||||
await rq.update_trade_mode_user(id, 'Short')
|
||||
await main_settings_message(id, callback.message, state)
|
||||
await main_settings_message(id, callback.message)
|
||||
|
||||
await state.clear()
|
||||
|
||||
case 'trade_mode_smart':
|
||||
case 'trade_mode_smart':
|
||||
await callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Smart")
|
||||
await rq.update_trade_mode_user(id, 'Smart')
|
||||
await main_settings_message(id, callback.message, state)
|
||||
await main_settings_message(id, callback.message)
|
||||
|
||||
await state.clear()
|
||||
except Exception as e:
|
||||
print(f"error: {e}")
|
||||
await state.clear()
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
|
||||
async def switch_mode_enabled_message(message, state):
|
||||
@@ -97,9 +93,8 @@ async def switch_mode_enabled_message(message, state):
|
||||
await message.edit_text(
|
||||
"""<b>Свитч</b> — динамическое переключение между торговыми режимами для максимизации эффективности.
|
||||
|
||||
<em>Выберите ниже для изменений:</em>""", parse_mode='html', reply_markup=inline_markup.buttons_on_off_markup_for_switch)
|
||||
|
||||
|
||||
<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"])
|
||||
@@ -109,12 +104,12 @@ async def state_switch_mode_enabled(callback: CallbackQuery, state):
|
||||
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)
|
||||
await callback.answer(f"Включено")
|
||||
await main_settings_message(tg_id, callback.message)
|
||||
else:
|
||||
await rq.update_switch_mode_enabled(tg_id, "Выключено")
|
||||
await callback.message.answer(f"Выключено")
|
||||
await main_settings_message(tg_id, callback.message, state)
|
||||
await callback.answer(f"Выключено")
|
||||
await main_settings_message(tg_id, callback.message)
|
||||
await state.clear()
|
||||
|
||||
|
||||
@@ -132,24 +127,24 @@ async def state_switch_mode_enabled(callback: CallbackQuery, state):
|
||||
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)
|
||||
await main_settings_message(tg_id, callback.message)
|
||||
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 main_settings_message(tg_id, callback.message)
|
||||
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 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)
|
||||
async def state_size_leverage(message: Message, state):
|
||||
await state.update_data(size_leverage = message.text)
|
||||
await state.update_data(size_leverage=message.text)
|
||||
|
||||
data = await state.get_data()
|
||||
data_settings = await rq.get_user_main_settings(message.from_user.id)
|
||||
@@ -158,22 +153,26 @@ async def state_size_leverage(message: Message, state):
|
||||
await message.answer(f"✅ Изменено: {data_settings['size_leverage']} → {data['size_leverage']}")
|
||||
|
||||
await rq.update_size_leverange(message.from_user.id, data['size_leverage'])
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
await state.clear()
|
||||
else:
|
||||
await message.answer(f'⛔️ Ошибка: ваше значение ({data['size_leverage']}) или выше лимита (100) или вы вводите неверные символы')
|
||||
await message.answer(
|
||||
f'⛔️ Ошибка: ваше значение ({data['size_leverage']}) или выше лимита (100) или вы вводите неверные символы')
|
||||
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
|
||||
async def martingale_factor_message(message, state):
|
||||
await state.set_state(update_main_settings.martingale_factor)
|
||||
|
||||
await message.edit_text("Введите <b>коэффициент Мартингейла:</b>", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
|
||||
|
||||
await message.edit_text("Введите <b>коэффициент Мартингейла:</b>", parse_mode='html',
|
||||
reply_markup=inline_markup.back_btn_list_settings_markup)
|
||||
|
||||
|
||||
@router_main_settings.message(update_main_settings.martingale_factor)
|
||||
async def state_martingale_factor(message: Message, state):
|
||||
await state.update_data(martingale_factor = message.text)
|
||||
await state.update_data(martingale_factor=message.text)
|
||||
|
||||
data = await state.get_data()
|
||||
data_settings = await rq.get_user_main_settings(message.from_user.id)
|
||||
@@ -182,14 +181,16 @@ async def state_martingale_factor(message: Message, state):
|
||||
await message.answer(f"✅ Изменено: {data_settings['martingale_factor']} → {data['martingale_factor']}")
|
||||
|
||||
await rq.update_martingale_factor(message.from_user.id, data['martingale_factor'])
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
await state.clear()
|
||||
else:
|
||||
await message.answer(f'⛔️ Ошибка: ваше значение ({data['martingale_factor']}) или выше лимита (100) или вы вводите неверные символы')
|
||||
await message.answer(
|
||||
f'⛔️ Ошибка: ваше значение ({data['martingale_factor']}) или выше лимита (100) или вы вводите неверные символы')
|
||||
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
|
||||
async def margin_type_message(message, state):
|
||||
await state.set_state(update_main_settings.margin_type)
|
||||
|
||||
@@ -209,40 +210,60 @@ async def margin_type_message(message, state):
|
||||
<em>Выберите ниже для изменений:</em>
|
||||
""", parse_mode='html', reply_markup=inline_markup.margin_type_markup)
|
||||
|
||||
|
||||
@router_main_settings.callback_query(update_main_settings.margin_type)
|
||||
async def state_margin_type(callback: CallbackQuery, state):
|
||||
await callback.answer()
|
||||
tg_id = callback.from_user.id
|
||||
api_key = await rq.get_bybit_api_key(tg_id)
|
||||
secret_key = await rq.get_bybit_secret_key(tg_id)
|
||||
data_settings = await rq.get_user_main_settings(tg_id)
|
||||
client = HTTP(api_key=api_key, api_secret=secret_key)
|
||||
try:
|
||||
active_positions = client.get_positions(category='linear', settleCoin='USDT')
|
||||
|
||||
id = callback.from_user.id
|
||||
data_settings = await rq.get_user_main_settings(id)
|
||||
positions = active_positions.get('result', {}).get('list', [])
|
||||
except Exception as e:
|
||||
logger.error(f"error: {e}")
|
||||
positions = []
|
||||
|
||||
try:
|
||||
match callback.data:
|
||||
case 'margin_type_isolated':
|
||||
for pos in positions:
|
||||
size = pos.get('size')
|
||||
if float(size) > 0:
|
||||
await callback.answer(
|
||||
"⚠️ Маржинальный режим нельзя менять при открытой позиции",
|
||||
show_alert=True
|
||||
)
|
||||
return
|
||||
try:
|
||||
match callback.data:
|
||||
case 'margin_type_isolated':
|
||||
await callback.message.answer(f"✅ Изменено: {data_settings['margin_type']} → Isolated")
|
||||
|
||||
await rq.update_margin_type(id, 'Isolated')
|
||||
await main_settings_message(id, callback.message, state)
|
||||
await rq.update_margin_type(tg_id, 'Isolated')
|
||||
await main_settings_message(tg_id, callback.message)
|
||||
|
||||
await state.clear()
|
||||
case 'margin_type_cross':
|
||||
case 'margin_type_cross':
|
||||
await callback.message.answer(f"✅ Изменено: {data_settings['margin_type']} → Cross")
|
||||
|
||||
await rq.update_margin_type(id, 'Cross')
|
||||
await main_settings_message(id, callback.message, state)
|
||||
await rq.update_margin_type(tg_id, 'Cross')
|
||||
await main_settings_message(tg_id, callback.message)
|
||||
|
||||
await state.clear()
|
||||
except Exception as e:
|
||||
print(f"error: {e}")
|
||||
except Exception as e:
|
||||
logger.error(f"error: {e}")
|
||||
|
||||
async def starting_quantity_message (message, state):
|
||||
|
||||
async def starting_quantity_message(message, state):
|
||||
await state.set_state(update_main_settings.starting_quantity)
|
||||
|
||||
await message.edit_text("Введите <b>начальную ставку:</b>", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
|
||||
await message.edit_text("Введите <b>начальную ставку:</b>", parse_mode='html',
|
||||
reply_markup=inline_markup.back_btn_list_settings_markup)
|
||||
|
||||
|
||||
@router_main_settings.message(update_main_settings.starting_quantity)
|
||||
async def state_starting_quantity(message: Message, state):
|
||||
await state.update_data(starting_quantity = message.text)
|
||||
await state.update_data(starting_quantity=message.text)
|
||||
|
||||
data = await state.get_data()
|
||||
data_settings = await rq.get_user_main_settings(message.from_user.id)
|
||||
@@ -251,22 +272,25 @@ async def state_starting_quantity(message: Message, state):
|
||||
await message.answer(f"✅ Изменено: {data_settings['starting_quantity']} → {data['starting_quantity']}")
|
||||
|
||||
await rq.update_starting_quantity(message.from_user.id, data['starting_quantity'])
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
await state.clear()
|
||||
else:
|
||||
await message.answer(f'⛔️ Ошибка: вы вводите неверные символы')
|
||||
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
|
||||
async def maximum_quantity_message(message, state):
|
||||
await state.set_state(update_main_settings.maximal_quantity)
|
||||
|
||||
await message.edit_text("Введите <b>максимальное количество серии ставок:</b>", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
|
||||
await message.edit_text("Введите <b>максимальное количество серии ставок:</b>", parse_mode='html',
|
||||
reply_markup=inline_markup.back_btn_list_settings_markup)
|
||||
|
||||
|
||||
@router_main_settings.message(update_main_settings.maximal_quantity)
|
||||
async def state_maximal_quantity(message: Message, state):
|
||||
await state.update_data(maximal_quantity = message.text)
|
||||
await state.update_data(maximal_quantity=message.text)
|
||||
|
||||
data = await state.get_data()
|
||||
data_settings = await rq.get_user_main_settings(message.from_user.id)
|
||||
@@ -275,10 +299,11 @@ async def state_maximal_quantity(message: Message, state):
|
||||
await message.answer(f"✅ Изменено: {data_settings['maximal_quantity']} → {data['maximal_quantity']}")
|
||||
|
||||
await rq.update_maximal_quantity(message.from_user.id, data['maximal_quantity'])
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
||||
await state.clear()
|
||||
else:
|
||||
await message.answer(f'⛔️ Ошибка: ваше значение ({data['maximal_quantity']}) или выше лимита (100) или вы вводите неверные символы')
|
||||
|
||||
await main_settings_message(message.from_user.id, message, state)
|
||||
await message.answer(
|
||||
f'⛔️ Ошибка: ваше значение ({data['maximal_quantity']}) или выше лимита (100) или вы вводите неверные символы')
|
||||
|
||||
await main_settings_message(message.from_user.id, message)
|
||||
|
@@ -1,11 +1,16 @@
|
||||
from aiogram import Router
|
||||
import app.telegram.Keyboards.inline_keyboards as inline_markup
|
||||
|
||||
import logging.config
|
||||
import app.telegram.database.requests as rq
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
|
||||
from app.states.States import update_risk_management_settings
|
||||
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
|
||||
logging.config.dictConfig(LOGGING_CONFIG)
|
||||
logger = logging.getLogger("risk_management_settings")
|
||||
|
||||
router_risk_management_settings = Router()
|
||||
|
||||
|
||||
@@ -80,7 +85,8 @@ async def state_price_loss(message: Message, state):
|
||||
# Пробуем перевести price_profit в число, если это возможно
|
||||
try:
|
||||
current_price_profit_num = int(current_price_profit)
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
current_price_profit_num = 0
|
||||
|
||||
# Флаг, если price_profit изначально равен 0 или совпадает со старым стоп-лоссом
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import logging.config
|
||||
import asyncio
|
||||
|
||||
from aiogram import F, Router
|
||||
from aiogram.filters import CommandStart
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
@@ -50,8 +50,7 @@ async def profile_message(message: Message) -> None:
|
||||
tg_id = message.from_user.id
|
||||
balance = await get_balance(message.from_user.id, message)
|
||||
if user and balance:
|
||||
asyncio.create_task(run_ws_for_user(tg_id, message))
|
||||
logger.info(f"Получение event loop")
|
||||
await run_ws_for_user(tg_id, message)
|
||||
await func.profile_message(message.from_user.username, message)
|
||||
|
||||
|
||||
@@ -112,15 +111,14 @@ async def clb_back_to_settings_msg(callback: CallbackQuery) -> None:
|
||||
|
||||
|
||||
@router.callback_query(F.data == "clb_change_main_settings")
|
||||
async def clb_change_main_settings_message(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
async def clb_change_main_settings_message(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
Открыть меню изменения главных настроек.
|
||||
|
||||
Args:
|
||||
callback (CallbackQuery): полученный колбэк.
|
||||
state (FSMContext): текущее состояние FSM.
|
||||
"""
|
||||
await func_main_settings.main_settings_message(callback.from_user.id, callback.message, state)
|
||||
await func_main_settings.main_settings_message(callback.from_user.id, callback.message)
|
||||
|
||||
await callback.answer()
|
||||
|
||||
@@ -139,13 +137,12 @@ async def clb_change_risk_management_message(callback: CallbackQuery) -> None:
|
||||
|
||||
|
||||
@router.callback_query(F.data == "clb_change_condition_settings")
|
||||
async def clb_change_condition_message(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
async def clb_change_condition_message(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
Открыть меню изменения настроек условий.
|
||||
|
||||
Args:
|
||||
callback (CallbackQuery): полученный колбэк.
|
||||
state (FSMContext): текущее состояние FSM.
|
||||
"""
|
||||
await func_condition_settings.main_settings_message(callback.from_user.id, callback.message)
|
||||
|
||||
@@ -153,15 +150,14 @@ async def clb_change_condition_message(callback: CallbackQuery, state: FSMContex
|
||||
|
||||
|
||||
@router.callback_query(F.data == "clb_change_additional_settings")
|
||||
async def clb_change_additional_message(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
async def clb_change_additional_message(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
Открыть меню изменения дополнительных настроек.
|
||||
|
||||
Args:
|
||||
callback (CallbackQuery): полученный колбэк.
|
||||
state (FSMContext): текущее состояние FSM.
|
||||
"""
|
||||
await func_additional_settings.main_settings_message(callback.from_user.id, callback.message, state)
|
||||
await func_additional_settings.main_settings_message(callback.from_user.id, callback.message)
|
||||
|
||||
await callback.answer()
|
||||
|
||||
@@ -240,7 +236,7 @@ async def clb_risk_management_settings_msg(callback: CallbackQuery, state: FSMCo
|
||||
logger.error(f"Error callback in risk_management match-case: {e}")
|
||||
|
||||
|
||||
list_condition_settings = ['clb_change_trigger',
|
||||
list_condition_settings = ['clb_change_mode',
|
||||
'clb_change_timer',
|
||||
'clb_change_filter_volatility',
|
||||
'clb_change_external_cues',
|
||||
@@ -263,7 +259,7 @@ async def clb_condition_settings_msg(callback: CallbackQuery, state: FSMContext)
|
||||
|
||||
try:
|
||||
match callback.data:
|
||||
case 'clb_change_trigger':
|
||||
case 'clb_change_mode':
|
||||
await func_condition_settings.trigger_message(callback.from_user.id, callback.message, state)
|
||||
case 'clb_change_timer':
|
||||
await func_condition_settings.timer_message(callback.from_user.id, callback.message, state)
|
||||
|
Reference in New Issue
Block a user