414 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			414 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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="start_trading")],
 | ||
|         [InlineKeyboardButton(text="Остановить торговлю", callback_data="stop_trading")],
 | ||
|     ]
 | ||
| )
 | ||
| 
 | ||
| # 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(mode: str
 | ||
| ) -> InlineKeyboardMarkup:
 | ||
|     """
 | ||
|     Create keyboard for additional settings
 | ||
|     :param mode: Trade mode
 | ||
|     :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_quantity"),
 | ||
|         ],
 | ||
| 
 | ||
|         [
 | ||
|             InlineKeyboardButton(
 | ||
|                 text="Коэффициент мартингейла", callback_data="martingale_factor"
 | ||
|             ),
 | ||
|             InlineKeyboardButton(text="Триггер цена", callback_data="trigger_price"
 | ||
| 
 | ||
|             ),
 | ||
|         ],
 | ||
|     ]
 | ||
| 
 | ||
|     if mode == "Switch":
 | ||
|         buttons.append(
 | ||
|             [InlineKeyboardButton(text="Направление первой сделки первой серии", callback_data="switch_side_start")]
 | ||
|         )
 | ||
|         buttons.append(
 | ||
|             [InlineKeyboardButton(text="Направление первой сделки последующих серии", callback_data="switch_side_second")]
 | ||
|         )
 | ||
| 
 | ||
|     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)
 | ||
| 
 | ||
| 
 | ||
| trade_mode = InlineKeyboardMarkup(
 | ||
|     inline_keyboard=[
 | ||
|         [
 | ||
|             InlineKeyboardButton(
 | ||
|                 text="Лонг", callback_data="Long"
 | ||
|             ),
 | ||
|             InlineKeyboardButton(text="Шорт", callback_data="Short"),
 | ||
|             InlineKeyboardButton(text="Свитч", callback_data="Switch"),
 | ||
|         ],
 | ||
|         [
 | ||
|             InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
 | ||
|             InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
 | ||
|         ],
 | ||
|     ]
 | ||
| )
 | ||
| 
 | ||
| switch_side = InlineKeyboardMarkup(
 | ||
|     inline_keyboard=[
 | ||
|         [
 | ||
|             InlineKeyboardButton(
 | ||
|                 text="По направлению", callback_data="switch_direction"
 | ||
|             ),
 | ||
|             InlineKeyboardButton(
 | ||
|                 text="Противоположно", callback_data="switch_opposite"
 | ||
|             ),
 | ||
|         ],
 | ||
|         [
 | ||
|             InlineKeyboardButton(text="Назад", callback_data="additional_settings"),
 | ||
|             InlineKeyboardButton(text="На главную", callback_data="profile_bybit"),
 | ||
|         ],
 | ||
|     ]
 | ||
| )
 | ||
| 
 | ||
| side_for_switch = InlineKeyboardMarkup(
 | ||
|     inline_keyboard=[
 | ||
|         [
 | ||
|             InlineKeyboardButton(text="Лонг", callback_data="buy_switch"),
 | ||
|             InlineKeyboardButton(text="Шорт", callback_data="sell_switch"),
 | ||
|         ],
 | ||
|         [
 | ||
|             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"),
 | ||
|         ],
 | ||
|     ]
 | ||
| )
 | ||
| 
 | ||
| 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="commission_fee")],
 | ||
|         [InlineKeyboardButton(text="Компенсация комиссии", callback_data="compensation_commission")],
 | ||
|         [
 | ||
|             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"),
 | ||
|         ],
 | ||
|     ]
 | ||
| )
 | ||
| 
 | ||
| 
 | ||
| commission_place = InlineKeyboardMarkup(
 | ||
|     inline_keyboard=[
 | ||
|         [
 | ||
|             InlineKeyboardButton(text="По ставке", callback_data="Commission_for_qty"),
 | ||
|             InlineKeyboardButton(text="По тейк-профиту", callback_data="Commission_for_tp"),
 | ||
|         ],
 | ||
|         [
 | ||
|             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="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
 | ||
| 
 | ||
| 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"),
 | ||
|         ],
 | ||
|     ]
 | ||
| )
 | 
