2
0
forked from kodorvan/stcs
Files
stcs/app/telegram/keyboards/inline.py
algizn97 1508629727 Fixed
2025-10-03 14:19:18 +05:00

467 lines
15 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
connect_the_platform = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Подключить платформу", callback_data="connect_platform"
)
]
]
)
add_bybit_api = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Добавить API", callback_data="add_bybit_api")]
]
)
profile_bybit = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="На главную", callback_data="profile_bybit")]
]
)
cancel = InlineKeyboardMarkup(
inline_keyboard=[[InlineKeyboardButton(text="Отменить", callback_data="cancel")]]
)
main_menu = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Настройки", callback_data="main_settings")],
[
InlineKeyboardButton(
text="Сменить торговую пару", callback_data="change_symbol"
)
],
[InlineKeyboardButton(text="Мои сделки", callback_data="my_deals")],
[InlineKeyboardButton(text="Начать торговлю", callback_data="start_trading")],
[
InlineKeyboardButton(
text="Остановить торговлю", callback_data="trading_stop"
)
],
]
)
# MAIN SETTINGS
main_settings = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Основные настройки", callback_data="additional_settings"
),
InlineKeyboardButton(
text="Риск-менеджмент", callback_data="risk_management"
),
],
[
InlineKeyboardButton(
text="Условия запуска", callback_data="conditional_settings"
)
],
[InlineKeyboardButton(text="Назад", callback_data="profile_bybit")],
]
)
# additional_settings
def get_additional_settings_keyboard(
current_order_type: str, conditional_order: str
) -> InlineKeyboardMarkup:
"""
Create keyboard for additional settings
:param current_order_type: Market, Limit or Conditional
:param conditional_order: Market or Limit
:return: InlineKeyboardMarkup
"""
buttons = [
[
InlineKeyboardButton(text="Режим позиции", callback_data="trade_mode"),
InlineKeyboardButton(text="Тип маржи", callback_data="margin_type"),
],
[
InlineKeyboardButton(
text="Размер кредитного плеча", callback_data="leverage"
),
InlineKeyboardButton(text="Тип ордера", callback_data="order_type"),
],
[
InlineKeyboardButton(
text="Количество ордера", callback_data="order_quantity"
),
InlineKeyboardButton(
text="Коэффициент мартингейла", callback_data="martingale_factor"
),
],
]
if current_order_type == "Conditional":
buttons.append(
[
InlineKeyboardButton(
text="Тип условного ордера", callback_data="conditional_order_type"
)
]
)
buttons.append(
[InlineKeyboardButton(text="Триггер цена", callback_data="trigger_price")]
)
if conditional_order == "Limit":
buttons.append(
[
InlineKeyboardButton(
text="Цена лимитного ордера", callback_data="limit_price"
)
]
)
elif current_order_type == "Limit":
buttons.append(
[
InlineKeyboardButton(
text="Цена лимитного ордера", callback_data="limit_price"
)
]
)
buttons.append(
[
InlineKeyboardButton(
text="Максимальное кол-во ставок в серии",
callback_data="max_bets_in_series",
)
]
)
buttons.append(
[
InlineKeyboardButton(text="Назад", callback_data="main_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
]
)
return InlineKeyboardMarkup(inline_keyboard=buttons)
order_type = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Рыночный", callback_data="Market"),
InlineKeyboardButton(text="Лимитный", callback_data="Limit"),
],
[InlineKeyboardButton(text="Условный", callback_data="Conditional")],
[
InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
conditional_order_type = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Рыночный", callback_data="set_market"),
InlineKeyboardButton(text="Лимитный", callback_data="set_limit"),
],
[
InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
trade_mode = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Односторонний режим", callback_data="Merged_Single"
),
InlineKeyboardButton(text="Хеджирование", callback_data="Both_Sides"),
],
[
InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
margin_type = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Изолированная", callback_data="ISOLATED_MARGIN"),
InlineKeyboardButton(text="Кросс", callback_data="REGULAR_MARGIN"),
],
[
InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
back_to_additional_settings = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
change_limit_price = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Установить цену", callback_data="set_limit_price"
),
InlineKeyboardButton(text="Последняя цена", callback_data="last_price"),
],
[
InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
back_to_change_limit_price = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Назад", callback_data="limit_price"),
InlineKeyboardButton(
text="Основные настройки", callback_data="additional_settings"
),
],
[InlineKeyboardButton(text="На главную", callback_data="profile_bybit")],
]
)
# risk_management
risk_management = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Изм. цены прибыли", callback_data="take_profit_percent"
),
InlineKeyboardButton(
text="Изм. цены убытка", callback_data="stop_loss_percent"
),
],
[
InlineKeyboardButton(
text="Максимальный риск", callback_data="max_risk_percent"
)
],
[InlineKeyboardButton(text="Комиссия биржи", callback_data="commission_fee")],
[
InlineKeyboardButton(text="Назад", callback_data="main_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
back_to_risk_management = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Назад", callback_data="risk_management"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
commission_fee = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Да", callback_data="Yes_commission_fee"),
InlineKeyboardButton(text="Нет", callback_data="No_commission_fee"),
],
[
InlineKeyboardButton(text="Назад", callback_data="risk_management"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
# conditions
conditions = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Таймер для старта", callback_data="start_timer"),
InlineKeyboardButton(
text="Таймер для остановки", callback_data="stop_timer"
),
],
[
InlineKeyboardButton(text="Назад", callback_data="main_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
back_to_conditions = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Назад", callback_data="conditional_settings"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
# SYMBOL
symbol = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Назад", callback_data="profile_bybit"),
],
]
)
# POSITION
change_position = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Позиции", callback_data="change_position"),
InlineKeyboardButton(text="Открытые ордера", callback_data="open_orders"),
],
[InlineKeyboardButton(text="Назад", callback_data="profile_bybit")],
]
)
def create_active_positions_keyboard(symbols: list):
builder = InlineKeyboardBuilder()
for sym, side in symbols:
builder.button(text=f"{sym}:{side}", callback_data=f"get_position_{sym}_{side}")
builder.button(text="Назад", callback_data="my_deals")
builder.button(text="На главную", callback_data="profile_bybit")
builder.adjust(2)
return builder.as_markup()
def make_close_position_keyboard(symbol_pos: str, side: str, position_idx: int, qty: int):
return InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Закрыть позицию", callback_data=f"close_position_{symbol_pos}_{side}_{position_idx}_{qty}"
)
],
[
InlineKeyboardButton(
text="Установить TP/SL", callback_data=f"pos_tp_sl_{symbol_pos}_{position_idx}"
)
],
[
InlineKeyboardButton(text="Назад", callback_data="change_position"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
def create_active_orders_keyboard(orders:list):
builder = InlineKeyboardBuilder()
for order, side in orders:
builder.button(text=f"{order}", callback_data=f"get_order_{order}_{side}")
builder.button(text="Назад", callback_data="my_deals")
builder.button(text="На главную", callback_data="profile_bybit")
builder.adjust(2)
return builder.as_markup()
def make_close_orders_keyboard(symbol_order: str, order_id: str):
return InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(
text="Закрыть ордер", callback_data=f"close_order_{symbol_order}_{order_id}"
)
],
[
InlineKeyboardButton(text="Назад", callback_data="open_orders"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
# START TRADING
merged_start_trading = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Лонг", callback_data="long"),
InlineKeyboardButton(text="Шорт", callback_data="short"),
],
[InlineKeyboardButton(text="Свитч", callback_data="switch")],
[InlineKeyboardButton(text="Назад", callback_data="profile_bybit")],
]
)
both_start_trading = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Лонг", callback_data="long"),
InlineKeyboardButton(text="Шорт", callback_data="short"),
],
[InlineKeyboardButton(text="Назад", callback_data="profile_bybit")],
]
)
switch_side = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Лонг", callback_data="switch_long"),
InlineKeyboardButton(text="Шорт", callback_data="switch_short"),
],
[
InlineKeyboardButton(
text="По направлению", callback_data="switch_direction"
),
InlineKeyboardButton(
text="Противоположно", callback_data="switch_opposite"
),
],
[
InlineKeyboardButton(text="Назад", callback_data="start_trading"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
back_to_start_trading = InlineKeyboardMarkup(
inline_keyboard=[
[
InlineKeyboardButton(text="Назад", callback_data="start_trading"),
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
cancel_timer_merged = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Отменить таймер", callback_data="cancel_timer_merged")],
[
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
cancel_timer_switch = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Отменить таймер", callback_data="cancel_timer_switch")],
[
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)
# STOP TRADING
cancel_timer_stop = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Отменить таймер", callback_data="cancel_timer_stop")],
[
InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
],
]
)