develop #3
| @@ -280,14 +280,17 @@ async def open_market_order(tg_id, message, api_key, secret_key): | |||||||
|         await contract_long(tg_id, message, margin_mode) |         await contract_long(tg_id, message, margin_mode) | ||||||
|     elif trading_mode == 'Short': |     elif trading_mode == 'Short': | ||||||
|         await contract_short(tg_id, message, margin_mode) |         await contract_short(tg_id, message, margin_mode) | ||||||
|     else: |     elif trading_mode == 'Smart': | ||||||
|         await message.answer("Неизвестный режим торговли: выберите Long или Short.") |         await message.answer("Режим Smart пока недоступен") | ||||||
|  |     elif trading_mode == 'Switch': | ||||||
|  |         await message.answer("Режим Switch пока недоступен") | ||||||
|  |  | ||||||
|  |  | ||||||
| async def open_limit_order(tg_id, message, price, api_key, secret_key): | async def open_limit_order(tg_id, message, price, api_key, secret_key): | ||||||
|     data_main_stgs = await rq.get_user_main_settings(tg_id) |     data_main_stgs = await rq.get_user_main_settings(tg_id) | ||||||
|     trading_mode = data_main_stgs['trading_mode'] |     trading_mode = data_main_stgs['trading_mode'] | ||||||
|     margin_mode = data_main_stgs.get('margin_type') |     margin_mode = data_main_stgs.get('margin_type') | ||||||
|  |     order_type = await rq.get_entry_order_type(tg_id) | ||||||
|  |  | ||||||
|  |  | ||||||
|     client = HTTP( |     client = HTTP( | ||||||
| @@ -297,7 +300,7 @@ async def open_limit_order(tg_id, message, price, api_key, secret_key): | |||||||
|  |  | ||||||
|     symbol = await rq.get_symbol(tg_id) |     symbol = await rq.get_symbol(tg_id) | ||||||
|     qty = float(data_main_stgs['starting_quantity']) |     qty = float(data_main_stgs['starting_quantity']) | ||||||
|     side = 'Buy' if trading_mode == 'Long' else 'Sell' |     side = 'Buy' if trading_mode == 'Long' else 'Short' | ||||||
|  |  | ||||||
|  |  | ||||||
|     try: |     try: | ||||||
| @@ -313,6 +316,8 @@ async def open_limit_order(tg_id, message, price, api_key, secret_key): | |||||||
|         ) |         ) | ||||||
|         if response.get('retCode') == 0: |         if response.get('retCode') == 0: | ||||||
|             await message.answer(f"Limit ордер открыт: {side} {qty} {symbol} по цене {price}") |             await message.answer(f"Limit ордер открыт: {side} {qty} {symbol} по цене {price}") | ||||||
|  |             await rq.update_user_trades(tg_id, symbol=symbol, side=order_type) | ||||||
|  |  | ||||||
|         else: |         else: | ||||||
|             await message.answer(f"Ошибка открытия ордера: {response.get('retMsg')}") |             await message.answer(f"Ошибка открытия ордера: {response.get('retMsg')}") | ||||||
|     except Exception as e: |     except Exception as e: | ||||||
|   | |||||||
| @@ -132,19 +132,27 @@ async def process_limit_price_message(message: Message, state: FSMContext): | |||||||
|  |  | ||||||
| @router_functions_bybit_trade.callback_query(F.data == "clb_open_deal") | @router_functions_bybit_trade.callback_query(F.data == "clb_open_deal") | ||||||
| async def open_deal(callback: CallbackQuery, state: FSMContext): | async def open_deal(callback: CallbackQuery, state: FSMContext): | ||||||
|  |     data_main_stgs = await rq.get_user_main_settings(callback.from_user.id) | ||||||
|     data = await state.get_data() |     data = await state.get_data() | ||||||
|     order_type = await rq.get_entry_order_type(callback.from_user.id) |     order_type = await rq.get_entry_order_type(callback.from_user.id) | ||||||
|     api = await rq.get_bybit_api_key(callback.from_user.id) |     api = await rq.get_bybit_api_key(callback.from_user.id) | ||||||
|     secret = await rq.get_bybit_secret_key(callback.from_user.id) |     secret = await rq.get_bybit_secret_key(callback.from_user.id) | ||||||
|  |     qty = data_main_stgs['starting_quantity'] | ||||||
|  |     qty_min = await func_min_qty.get_min_qty(callback.from_user.id, callback.message) | ||||||
|  |  | ||||||
|  |     if qty < qty_min: | ||||||
|  |         await callback.message.edit_text(f"Количество вашей ставки ({qty}) меньше минимального количества ({qty_min}) для данной торговой пары") | ||||||
|  |         await callback.answer() | ||||||
|  |         return | ||||||
|  |  | ||||||
|     if order_type == 'Market': |     if order_type == 'Market': | ||||||
|         await open_market_order(callback.from_user.id, callback.message, api_key=api, secret_key=secret) |         await open_market_order(callback.from_user.id, callback.message, api_key=api, secret_key=secret) | ||||||
|  |         await rq.update_user_trades(callback.from_user.id, symbol=data.get('symbol'), side=order_type) | ||||||
|     elif order_type == 'Limit': |     elif order_type == 'Limit': | ||||||
|         price = data.get('limit_price') |         price = data.get('limit_price') | ||||||
|         if not price: |         if not price: | ||||||
|             await callback.answer("Цена для лимитного ордера не задана. Введите сначала цену.") |             await callback.answer("Цена для лимитного ордера не задана. Введите сначала цену.") | ||||||
|             return |             return | ||||||
|  |  | ||||||
|         await open_limit_order(callback.from_user.id, callback.message, price, api_key=api, secret_key=secret) |         await open_limit_order(callback.from_user.id, callback.message, price, api_key=api, secret_key=secret) | ||||||
|     else: |     else: | ||||||
|         await callback.answer("Неизвестный тип ордера.") |         await callback.answer("Неизвестный тип ордера.") | ||||||
| @@ -153,6 +161,33 @@ async def open_deal(callback: CallbackQuery, state: FSMContext): | |||||||
|     await state.clear() |     await state.clear() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @router_functions_bybit_trade.callback_query(F.data == "clb_my_deals") | ||||||
|  | async def show_my_trades_callback(callback: CallbackQuery): | ||||||
|  |     tg_id = callback.from_user.id | ||||||
|  |     trades = await rq.get_user_trades(tg_id) | ||||||
|  |  | ||||||
|  |     if not trades: | ||||||
|  |         await callback.message.answer("У вас ещё нет сделок.") | ||||||
|  |         await callback.answer() | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |     grouped = {} | ||||||
|  |     for trade in trades: | ||||||
|  |         symbol = trade['symbol'] if isinstance(trade, dict) else trade.symbol | ||||||
|  |         grouped.setdefault(symbol, []).append(trade) | ||||||
|  |  | ||||||
|  |     text_response = "Ваши сделки по валютным парам:\n\n" | ||||||
|  |     for symbol, trade_list in grouped.items(): | ||||||
|  |         text_response += f"<b>{symbol}</b>\n" | ||||||
|  |         for t in trade_list: | ||||||
|  |             side = t['side'] if isinstance(t, dict) else t.side | ||||||
|  |             text_response += f" - {side}\n" | ||||||
|  |         text_response += "\n" | ||||||
|  |  | ||||||
|  |     await callback.message.answer(text_response, parse_mode='html') | ||||||
|  |     await callback.answer() | ||||||
|  |  | ||||||
|  |  | ||||||
| # @router_functions_bybit_trade.callback_query(F.data == 'clb_open_deal') | # @router_functions_bybit_trade.callback_query(F.data == 'clb_open_deal') | ||||||
| # async def make_deal_bybit (callback: CallbackQuery): | # async def make_deal_bybit (callback: CallbackQuery): | ||||||
| #     data_main_stgs = await rq.get_user_main_settings(callback.from_user.id) | #     data_main_stgs = await rq.get_user_main_settings(callback.from_user.id) | ||||||
| @@ -160,7 +195,7 @@ async def open_deal(callback: CallbackQuery, state: FSMContext): | |||||||
| #     trade_mode = data_main_stgs['trading_mode'] | #     trade_mode = data_main_stgs['trading_mode'] | ||||||
| #     qty = data_main_stgs['starting_quantity'] | #     qty = data_main_stgs['starting_quantity'] | ||||||
| #     margin_mode = data_main_stgs['margin_type'] | #     margin_mode = data_main_stgs['margin_type'] | ||||||
| #     qty_min = await func_min_qty.get_min_qty(callback.from_user.id, callback.message) |     qty_min = await func_min_qty.get_min_qty(callback.from_user.id, callback.message) | ||||||
| # | # | ||||||
| #     if qty < qty_min: | #     if qty < qty_min: | ||||||
| #         await callback.message.edit_text(f"Количество вашей ставки ({qty}) меньше минимального количества ({qty_min}) для данной торговой пары") | #         await callback.message.edit_text(f"Количество вашей ставки ({qty}) меньше минимального количества ({qty_min}) для данной торговой пары") | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ async def main_settings_message(id, message, state): | |||||||
| <b>- Размер кредитного плеча:</b> х{data['size_leverage']} | <b>- Размер кредитного плеча:</b> х{data['size_leverage']} | ||||||
| <b>- Начальная ставка:</b> {data['starting_quantity']} | <b>- Начальная ставка:</b> {data['starting_quantity']} | ||||||
| <b>- Коэффициент мартингейла:</b> {data['martingale_factor']} | <b>- Коэффициент мартингейла:</b> {data['martingale_factor']} | ||||||
| <b>- Максимальное количесиво ставок в серии:</b> {data['maximal_quantity']}     | <b>- Максимальное количество ставок в серии:</b> {data['maximal_quantity']}     | ||||||
| """, parse_mode='html', reply_markup=inline_markup.main_settings_markup) | """, parse_mode='html', reply_markup=inline_markup.main_settings_markup) | ||||||
|  |  | ||||||
| async def trading_mode_message(message, state): | async def trading_mode_message(message, state): | ||||||
| @@ -189,7 +189,7 @@ async def state_margin_type(callback: CallbackQuery, state): | |||||||
| async def starting_quantity_message (message, state): | async def starting_quantity_message (message, state): | ||||||
|     await state.set_state(update_main_settings.starting_quantity) |     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) | @router_main_settings.message(update_main_settings.starting_quantity) | ||||||
| async def state_starting_quantity(message: Message, state): | async def state_starting_quantity(message: Message, state): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user