diff --git a/app/services/Bybit/functions/Futures.py b/app/services/Bybit/functions/Futures.py
index f8ac8bb..afd28a0 100644
--- a/app/services/Bybit/functions/Futures.py
+++ b/app/services/Bybit/functions/Futures.py
@@ -280,14 +280,17 @@ async def open_market_order(tg_id, message, api_key, secret_key):
await contract_long(tg_id, message, margin_mode)
elif trading_mode == 'Short':
await contract_short(tg_id, message, margin_mode)
- else:
- await message.answer("Неизвестный режим торговли: выберите Long или Short.")
+ elif trading_mode == 'Smart':
+ 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):
data_main_stgs = await rq.get_user_main_settings(tg_id)
trading_mode = data_main_stgs['trading_mode']
margin_mode = data_main_stgs.get('margin_type')
+ order_type = await rq.get_entry_order_type(tg_id)
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)
qty = float(data_main_stgs['starting_quantity'])
- side = 'Buy' if trading_mode == 'Long' else 'Sell'
+ side = 'Buy' if trading_mode == 'Long' else 'Short'
try:
@@ -313,6 +316,8 @@ async def open_limit_order(tg_id, message, price, api_key, secret_key):
)
if response.get('retCode') == 0:
await message.answer(f"Limit ордер открыт: {side} {qty} {symbol} по цене {price}")
+ await rq.update_user_trades(tg_id, symbol=symbol, side=order_type)
+
else:
await message.answer(f"Ошибка открытия ордера: {response.get('retMsg')}")
except Exception as e:
diff --git a/app/services/Bybit/functions/functions.py b/app/services/Bybit/functions/functions.py
index a2ca431..ac8b186 100644
--- a/app/services/Bybit/functions/functions.py
+++ b/app/services/Bybit/functions/functions.py
@@ -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")
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()
order_type = await rq.get_entry_order_type(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)
+ 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':
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':
price = data.get('limit_price')
if not price:
await callback.answer("Цена для лимитного ордера не задана. Введите сначала цену.")
return
-
await open_limit_order(callback.from_user.id, callback.message, price, api_key=api, secret_key=secret)
else:
await callback.answer("Неизвестный тип ордера.")
@@ -153,6 +161,33 @@ async def open_deal(callback: CallbackQuery, state: FSMContext):
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"{symbol}\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')
# async def make_deal_bybit (callback: CallbackQuery):
# 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']
# qty = data_main_stgs['starting_quantity']
# 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:
# await callback.message.edit_text(f"Количество вашей ставки ({qty}) меньше минимального количества ({qty_min}) для данной торговой пары")
diff --git a/app/telegram/functions/main_settings/settings.py b/app/telegram/functions/main_settings/settings.py
index 632c234..8ab3c03 100644
--- a/app/telegram/functions/main_settings/settings.py
+++ b/app/telegram/functions/main_settings/settings.py
@@ -38,7 +38,7 @@ async def main_settings_message(id, message, state):
- Размер кредитного плеча: х{data['size_leverage']}
- Начальная ставка: {data['starting_quantity']}
- Коэффициент мартингейла: {data['martingale_factor']}
-- Максимальное количесиво ставок в серии: {data['maximal_quantity']}
+- Максимальное количество ставок в серии: {data['maximal_quantity']}
""", parse_mode='html', reply_markup=inline_markup.main_settings_markup)
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):
await state.set_state(update_main_settings.starting_quantity)
- await message.edit_text("Введите началаьную ставку:", parse_mode='html', reply_markup=inline_markup.back_btn_list_settings_markup)
+ await message.edit_text("Введите начальную ставку:", 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):