add files project

This commit is contained in:
Kirill Strelnikov
2025-07-10 18:16:29 +07:00
parent 68f273699a
commit 14088503ea
17 changed files with 1141 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
import app.telegram.database.requests as rq
async def reg_new_user_default_additional_settings(id, message):
tg_id = id
await rq.set_new_user_default_additional_settings(tg_id)
async def main_settings_message(message):
text = '''<b>Дополнительные параметры</b>
Сохранить как шаблон стратегии: да / нет
Автозапуск после сохранения: да / нет
Уведомления в Telegram: включено / отключено '''
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.additional_settings_markup)
async def save_pattern_message(message, state):
text = '''<b>Сохранение шаблона</b>
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.buttons_yes_no_markup)
async def auto_start_message(message, state):
text = '''<b>Автозапуск</b>
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.buttons_yes_no_markup)
async def notifications_message(message, state):
text = '''<b>Уведомления</b>
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.buttons_on_off_markup)

View File

@@ -0,0 +1,82 @@
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
import app.telegram.database.requests as rq
async def reg_new_user_default_condition_settings(id, message):
tg_id = id
trigger = await rq.get_for_registration_trigger()
await rq.set_new_user_default_condition_settings(tg_id, trigger)
async def main_settings_message(message):
text = """ <b>Условия запуска</b>
Триггер: Ручной запуск / Сигнал TradingView / Полностью автоматический
Фильтр времени: диапазон по дням недели и времени суток
Фильтр волатильности / объёма: включить/отключить
Интеграции и внешние сигналы:
Использовать сигналы TradingView: да / нет
Использовать AI-аналитику от ChatGPT: да / нет
Webhook URL для сигналов (если используется TradingView).
"""
await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.condition_settings_markup)
async def trigger_message(message, state):
text = '''Триггер
Описание ручного запуска, сигналов, автоматического режима '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.trigger_markup)
async def filter_time_message(message, state):
text = '''Фильтр времени
???
'''
await message.answer(text=text)
async def filter_volatility_message(message, state):
text = '''Фильтр волатильности
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.buttons_on_off_markup)
async def external_cues_message(message, state):
text = '''<b>Внешние сигналы</b>
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=None)
async def trading_cues_message(message, state):
text = '''<b>Использование сигналов</b>
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.buttons_yes_no_markup)
async def webhook_message(message, state):
text = '''Скиньте ссылку на <b>webhook</b> (если есть trading view): '''
await message.answer(text=text, parse_mode='html')
async def ai_analytics_message(message, state):
text = '''<b>ИИ - Аналитика</b>
Описание... '''
await message.answer(text=text, parse_mode='html', reply_markup=reply_markup.buttons_yes_no_markup)

View File

@@ -0,0 +1,34 @@
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
async def start_message(message):
await message.answer(f""" Привет <b>{message.from_user.username}</b>! 👋
Добро пожаловать в бот по трейдингу на Bibyt — вашего надежного помощника для анализа рынка и принятия взвешенных решений. Здесь вы получите:
<b>
📊 Анализ текущих трендов
📈 Инструменты для прогнозирования и оценки рисков
⚡️ Сигналы и рекомендации по сделкам
🔔 Уведомления о важных изменениях и новостях
</b>
Просто отправляйте интересующий вас инструмент или команду, и бот быстро предоставит актуальную информацию и аналитику.
Начнем торговать умно и эффективно вместе! 🚀
""", parse_mode='html', reply_markup=inline_markup.start_markup)
async def profile_message(username, message):
await message.answer(f""" <b>{username}</b>
Баланс:
⭐️ 0
Описание:
Активный трейдер на платформе Bibyt с индивидуальной стратегией и аналитикой в реальном времени. Постоянно улучшает навыки и следит за рыночными тенденциями для максимальной прибыли.
""", parse_mode='html', reply_markup=inline_markup.settings_markup)
async def check_profile_message(message):
await message.answer(f'Добро пожаловать {message.from_user.username}!', reply_markup=reply_markup.base_buttons_markup)
async def settings_message(message):
await message.edit_text("Выберите что настроить", reply_markup=inline_markup.special_settings_markup)

View File

@@ -0,0 +1,211 @@
from aiogram import Router
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
import app.telegram.database.requests as rq
from aiogram.types import Message, CallbackQuery
# FSM - Механизм состояния
from aiogram.fsm.state import State, StatesGroup
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() #
async def reg_new_user_default_main_settings(id, message):
tg_id = id
trading_mode = await rq.get_for_registration_trading_mode()
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>
Режим торговли: <b>{data['trading_mode']}</b>
Тип маржи: <b>{data['margin_type']}</b>
Размер кредитного плеча: <b>х{data['size_leverage']}</b>
Начальная ставка: <b>{data['starting_quantity']}</b>
Коэффициент мартингейла: <b>{data['martingale_factor']}</b>
Максимальное количесиво ставок в серии: <b>{data['maximal_quantity']}</b>
""", 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)
await message.edit_text("""<b>Режим торговли</b>
<b>Лонг</b> — стратегия, ориентированная на покупку актива с целью заработать на повышении его стоимости.
<b>Шорт</b> — метод продажи активов, взятых в кредит, чтобы получить прибыль от снижения цены.
<b>Смарт</b> — автоматизированный режим, который подбирает оптимальную стратегию в зависимости от текущих рыночных условий.
<b>Свитч</b> — динамическое переключение между торговыми режимами для максимизации эффективности.
<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()
id = callback.from_user.id
print(f"sdljfngdjklfg ## {callback.data}")
try:
match callback.data:
case 'trade_mode_long':
await rq.update_trade_mode_user(id, 'Long')
await main_settings_message(id, callback.message, state)
await state.clear()
case 'trade_mode_short':
await rq.update_trade_mode_user(id, 'Short')
await main_settings_message(id, callback.message, state)
await state.clear()
case 'trade_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 rq.update_trade_mode_user(id, 'Smart')
await main_settings_message(id, callback.message, state)
await state.clear()
except Exception as e:
print(f"error: {e}")
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)
@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)
data = await state.get_data()
if data['size_leverage'].isdigit() and int(data['size_leverage']) <= 100:
await rq.update_size_leverange(message.from_user.id, data['size_leverage'])
await main_settings_message(message.from_user.id, message, state)
await state.clear()
else:
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)
@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)
data = await state.get_data()
if data['martingale_factor'].isdigit() and int(data['martingale_factor']) <= 100:
await rq.update_martingale_factor(message.from_user.id, data['martingale_factor'])
await main_settings_message(message.from_user.id, message, state)
await state.clear()
else:
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)
await message.edit_text("""<b>Тип маржи</b>
<b>Изолированная маржа</b>
Этот тип маржи позволяет ограничить риск конкретной позиции.
При использовании изолированной маржи вы выделяете определённую сумму средств только для одной позиции.
Если позиция начинает приносить убытки, ваши потери ограничиваются этой суммой,
и остальные средства на счёте не затрагиваются.
<b>Кросс-маржа</b>
Кросс-маржа объединяет весь маржинальный баланс на счёте и использует все доступные средства для поддержания открытых позиций.
В случае убытков средства с других позиций или баланса автоматически покрывают дефицит,
снижая риск ликвидации, но увеличивая общий риск потери капитала.
<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()
id = callback.from_user.id
print(f"sdljfngdjklfg ## {callback.data}")
try:
match callback.data:
case 'margin_type_isolated':
await rq.update_margin_type(id, 'Изолированный')
await main_settings_message(id, callback.message, state)
await state.clear()
case 'margin_type_cross':
await rq.update_margin_type(id, 'Кросс')
await main_settings_message(id, callback.message, state)
await state.clear()
except Exception as e:
print(f"error: {e}")
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)
@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)
data = await state.get_data()
if data['starting_quantity'].isdigit() and int(data['starting_quantity']) <= 100:
await rq.update_starting_quantity(message.from_user.id, data['starting_quantity'])
await main_settings_message(message.from_user.id, message, state)
await state.clear()
else:
await main_settings_message(message.from_user.id, message, state)
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)
@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)
data = await state.get_data()
if data['maximal_quantity'].isdigit() and int(data['maximal_quantity']) <= 100:
await rq.update_maximal_quantity(message.from_user.id, data['maximal_quantity'])
await main_settings_message(message.from_user.id, message, state)
await state.clear()
else:
await main_settings_message(message.from_user.id, message, state)

View File

@@ -0,0 +1,37 @@
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
import app.telegram.database.requests as rq
async def reg_new_user_default_risk_management_settings(id, message):
tg_id = id
await rq.set_new_user_default_risk_management_settings(tg_id)
async def main_settings_message(message):
text = f"""<b>Риск менеджмент</b>,
Процент изменения цены для фиксации прибыли: 0
Процент изменения цены для фиксации убытков: 0
Максимальный риск на сделку (в % от баланса): 0
"""
await message.edit_text(text=text, parse_mode='html', reply_markup=inline_markup.risk_management_settings_markup)
async def price_profit_message(message, state):
text = 'Введите число изменения цены для фиксации прибыли: '
await message.answer(text=text, parse_mode='html', reply_markup=None)
async def price_loss_message(message, state):
text = 'Введите число изменения цены для фиксации убытков: '
await message.answer(text=text, parse_mode='html', reply_markup=None)
async def max_risk_deal_message(message, state):
text = 'Введите число (процент от баланса) для изменения максимального риска на сделку: '
await message.answer(text=text, parse_mode='html', reply_markup=None)