diff --git a/BibytBot_API.pyproj b/BibytBot_API.pyproj index 5d12a4f..595308b 100644 --- a/BibytBot_API.pyproj +++ b/BibytBot_API.pyproj @@ -21,7 +21,6 @@ false - diff --git a/app/services/Bybit/functions/Futures.py b/app/services/Bybit/functions/Futures.py index 25e60a2..1f68dc0 100644 --- a/app/services/Bybit/functions/Futures.py +++ b/app/services/Bybit/functions/Futures.py @@ -71,7 +71,7 @@ async def contract_long(tg_id, message, margin_mode): setMarginMode=margin_mode # margin_type ) - martingale_factor = float(data_main_stgs['martingale_factor']) + martingale_factor = float(data_main_stgs['martingale_factor']) # Исправлено: было maximal_quantity max_martingale_steps = int(data_main_stgs['maximal_quantity']) starting_quantity = float(data_main_stgs['starting_quantity']) max_risk_percent = float(data_risk_management_stgs['max_risk_deal']) @@ -98,21 +98,6 @@ async def contract_long(tg_id, message, margin_mode): realised_pnl = float(position['unrealisedPnl']) if realised_pnl > 0: - print(f''' - ===================== - =====Сделка========= - ===уСПЕШНЕАЯ================ - =================== - ================= - - {realised_pnl} - - =============== - =============== - ============= - =============== - ============== - ''') starting_quantity = next_quantity current_martingale_step = 0 elif not realised_pnl: @@ -122,22 +107,6 @@ async def contract_long(tg_id, message, margin_mode): current_martingale_step += 1 next_quantity = last_quantity * martingale_factor starting_quantity = next_quantity - - print(f''' - ======СДЕЛКА=============== - =====УБЫТОЧНАЯ============== - =================== - =================== - ================= - - {realised_pnl} - - =============== - =============== - ============= - =============== - ============== - ''') except Exception as e: print("Не получены позиции") next_quantity = starting_quantity @@ -209,7 +178,7 @@ async def contract_short(tg_id, message, margin_mode): setMarginMode=margin_mode # margin_type ) - martingale_factor = float(data_main_stgs['martingale_factor']) + martingale_factor = float(data_main_stgs['martingale_factor']) # Исправлено: было maximal_quantity max_martingale_steps = int(data_main_stgs['maximal_quantity']) starting_quantity = float(data_main_stgs['starting_quantity']) max_risk_percent = float(data_risk_management_stgs['max_risk_deal']) @@ -235,17 +204,16 @@ async def contract_short(tg_id, message, margin_mode): realised_pnl = float(position['unrealisedPnl']) - if realised_pnl > 0: # Прибыльная сделка + if realised_pnl > 0: starting_quantity = next_quantity current_martingale_step = 0 elif not realised_pnl: next_quantity = starting_quantity current_martingale_step += 1 - else: # Убыточная сделка + else: current_martingale_step += 1 next_quantity = last_quantity * martingale_factor starting_quantity = next_quantity - except Exception as e: print("Не получены позиции") next_quantity = starting_quantity diff --git a/app/services/Bybit/functions/balance.py b/app/services/Bybit/functions/balance.py index f0518f1..db3d74d 100644 --- a/app/services/Bybit/functions/balance.py +++ b/app/services/Bybit/functions/balance.py @@ -13,10 +13,21 @@ async def get_balance(tg_id, message): api_secret=secret_key ) - try: - balance = client.get_wallet_balance(accountType='UNIFIED', coin='USDT')['result']['list'][0]['coin'][0]['walletBalance'] + if api_key == 'None' or secret_key == 'None': + await message.answer('⚠️ Подключите платформу для торговли') + return 0 - return balance + try: + check_user = client.get_wallet_balance() + + if check_user: + try: + balance = client.get_wallet_balance(accountType='UNIFIED', coin='USDT')['result']['list'][0]['coin'][0]['walletBalance'] + + return balance + except Exception as e: + await message.answer('⚠️ Ошибка при получении баланса пользователя') + return 0 except Exception as e: - await message.answer('Баланс не был получен, подключите платформу') + await message.answer('⚠️ Неверные данные API, перепроверьте их') return 0 \ No newline at end of file diff --git a/app/services/Bybit/functions/functions.py b/app/services/Bybit/functions/functions.py index 87aca78..86ff692 100644 --- a/app/services/Bybit/functions/functions.py +++ b/app/services/Bybit/functions/functions.py @@ -20,9 +20,9 @@ class state_update_symbol(StatesGroup): async def clb_start_bybit_trade_message(callback: CallbackQuery, state: FSMContext): api = await rq.get_bybit_api_key(callback.from_user.id) secret = await rq.get_bybit_secret_key(callback.from_user.id) + balance = await get_balance(callback.from_user.id, callback.message) - if api and secret: - balance = await get_balance(callback.from_user.id, callback.message) + if balance: symbol = await rq.get_symbol(callback.from_user.id) text = f'''💎 Торговля на Bybit @@ -30,38 +30,33 @@ async def clb_start_bybit_trade_message(callback: CallbackQuery, state: FSMConte ⚖️ Ваш баланс (USDT): {balance} 📊 Текущая торговая пара: {symbol} ---- - Как начать торговлю? 1️⃣ Проверьте и тщательно настройте все параметры в вашем профиле. 2️⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT). ''' await callback.message.edit_text(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup) - else: - callback.message.answer('Перед началом работы, в настройках подключите bybit') async def start_bybit_trade_message(message, state): api = await rq.get_bybit_api_key(message.from_user.id) secret = await rq.get_bybit_secret_key(message.from_user.id) + balance = await get_balance(message.from_user.id, message) - if api and secret: - balance = await get_balance(message.from_user.id, message) + if balance: symbol = await rq.get_symbol(message.from_user.id) - text = f'''Торговля на Bybit + text = f'''💎 Торговля на Bybit + +⚖️ Ваш баланс (USDT): {balance} +📊 Текущая торговая пара: {symbol} -ваш баланс (USDT): {balance} -Текущая торговая пара: {symbol} - Как начать торговлю? -1. Внимательно проверьте и настройте все параметры в вашем профиле -2. Ниже нажмите 'Указать торговую пару' и отправьте торговую пару заглавными буквами, указав два актива без всяких лишних символов! (Пример: BTCUSDT) + +1️⃣ Проверьте и тщательно настройте все параметры в вашем профиле. +2️⃣ Нажмите ниже кнопку 'Указать торговую пару' и введите торговую пару заглавными буквами, без лишних символов (например: BTCUSDT). ''' await message.answer(text=text, parse_mode='html', reply_markup=inline_markup.trading_markup) - else: - await message.answer('Перед началом работы, в настройках подключите bybit') @router_functions_bybit_trade.callback_query(F.data == 'clb_update_trading_pair') async def update_symbol_for_trade_message(callback: CallbackQuery, state: FSMContext): @@ -75,6 +70,7 @@ async def update_symbol_for_trade(message: Message, state: FSMContext): data = await state.get_data() + await message.answer('Пара была успешно обновлена') await rq.update_symbol(message.from_user.id, data['symbol']) await start_bybit_trade_message(message, state) diff --git a/app/telegram/functions/main_settings/settings.py b/app/telegram/functions/main_settings/settings.py index 2829b09..632c234 100644 --- a/app/telegram/functions/main_settings/settings.py +++ b/app/telegram/functions/main_settings/settings.py @@ -62,29 +62,34 @@ async def state_trading_mode(callback: CallbackQuery, state): await callback.answer() id = callback.from_user.id + data_settings = await rq.get_user_main_settings(id) try: match callback.data: case 'trade_mode_long': + await callback.message.answer(f"✅ Изменено: {data_settings['trading_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 callback.message.answer(f"✅ Изменено: {data_settings['trading_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 callback.message.answer(f"✅ Изменено: {data_settings['trading_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 callback.message.answer(f"✅ Изменено: {data_settings['trading_mode']} → Smart") + await rq.update_trade_mode_user(id, 'Smart') + await main_settings_message(id, callback.message, state) - await state.clear() + await state.clear() except Exception as e: print(f"error: {e}") @@ -98,13 +103,18 @@ async def state_size_leverage(message: Message, state): await state.update_data(size_leverage = message.text) data = await state.get_data() + data_settings = await rq.get_user_main_settings(message.from_user.id) if data['size_leverage'].isdigit() and int(data['size_leverage']) <= 100: + await message.answer(f"✅ Изменено: {data_settings['size_leverage']} → {data['size_leverage']}") + 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 message.answer(f'⛔️ Ошибка: ваше значение ({data['size_leverage']}) или выше лимита (100) или вы вводите неверные символы') + await main_settings_message(message.from_user.id, message, state) async def martingale_factor_message(message, state): @@ -117,13 +127,18 @@ async def state_martingale_factor(message: Message, state): await state.update_data(martingale_factor = message.text) data = await state.get_data() + data_settings = await rq.get_user_main_settings(message.from_user.id) if data['martingale_factor'].isdigit() and int(data['martingale_factor']) <= 100: + await message.answer(f"✅ Изменено: {data_settings['martingale_factor']} → {data['martingale_factor']}") + 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 message.answer(f'⛔️ Ошибка: ваше значение ({data['martingale_factor']}) или выше лимита (100) или вы вводите неверные символы') + await main_settings_message(message.from_user.id, message, state) async def margin_type_message(message, state): @@ -150,16 +165,20 @@ async def state_margin_type(callback: CallbackQuery, state): await callback.answer() id = callback.from_user.id - print(f"sdljfngdjklfg ## {callback.data}") + data_settings = await rq.get_user_main_settings(id) try: match callback.data: case 'margin_type_isolated': + await callback.message.answer(f"✅ Изменено: {data_settings['margin_type']} → Isolated") + await rq.update_margin_type(id, 'Isolated') await main_settings_message(id, callback.message, state) await state.clear() case 'margin_type_cross': + await callback.message.answer(f"✅ Изменено: {data_settings['margin_type']} → Cross") + await rq.update_margin_type(id, 'Cross') await main_settings_message(id, callback.message, state) @@ -177,30 +196,40 @@ async def state_starting_quantity(message: Message, state): await state.update_data(starting_quantity = message.text) data = await state.get_data() + data_settings = await rq.get_user_main_settings(message.from_user.id) if data['starting_quantity'].isdigit(): + await message.answer(f"✅ Изменено: {data_settings['starting_quantity']} → {data['starting_quantity']}") + 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 message.answer(f'⛔️ Ошибка: вы вводите неверные символы') + 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("Введите максимальное количество ставок:", 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.maximal_quantity) async def state_maximal_quantity(message: Message, state): await state.update_data(maximal_quantity = message.text) data = await state.get_data() + data_settings = await rq.get_user_main_settings(message.from_user.id) if data['maximal_quantity'].isdigit() and int(data['maximal_quantity']) <= 100: + await message.answer(f"✅ Изменено: {data_settings['maximal_quantity']} → {data['maximal_quantity']}") + 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 message.answer(f'⛔️ Ошибка: ваше значение ({data['maximal_quantity']}) или выше лимита (100) или вы вводите неверные символы') + await main_settings_message(message.from_user.id, message, state) \ No newline at end of file diff --git a/app/telegram/functions/risk_management_settings/settings.py b/app/telegram/functions/risk_management_settings/settings.py index 40b533c..859451e 100644 --- a/app/telegram/functions/risk_management_settings/settings.py +++ b/app/telegram/functions/risk_management_settings/settings.py @@ -43,13 +43,18 @@ async def state_price_profit(message: Message, state): await state.update_data(price_profit = message.text) data = await state.get_data() + data_settings = await rq.get_user_risk_management_settings(message.from_user.id) if data['price_profit'].isdigit() and int(data['price_profit']) <= 100: + await message.answer(f"✅ Изменено: {data_settings['price_profit']}% → {data['price_profit']}%") + await rq.update_price_profit(message.from_user.id, data['price_profit']) await main_settings_message(message.from_user.id, message, state) await state.clear() else: + await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_profit']}%) или выше лимита (100) или вы вводите неверные символы') + await main_settings_message(message.from_user.id, message, state) async def price_loss_message(message, state): @@ -64,13 +69,18 @@ async def state_price_loss(message: Message, state): await state.update_data(price_loss = message.text) data = await state.get_data() + data_settings = await rq.get_user_risk_management_settings(message.from_user.id) if data['price_loss'].isdigit() and int(data['price_loss']) <= 100: + await message.answer(f"✅ Изменено: {data_settings['price_loss']}% → {data['price_loss']}%") + await rq.update_price_loss(message.from_user.id, data['price_loss']) await main_settings_message(message.from_user.id, message, state) await state.clear() else: + await message.answer(f'⛔️ Ошибка: ваше значение ({data['price_loss']}%) или выше лимита (100) или вы вводите неверные символы') + await main_settings_message(message.from_user.id, message, state) async def max_risk_deal_message(message, state): @@ -85,11 +95,16 @@ async def state_max_risk_deal(message: Message, state): await state.update_data(max_risk_deal = message.text) data = await state.get_data() + data_settings = await rq.get_user_risk_management_settings(message.from_user.id) if data['max_risk_deal'].isdigit() and int(data['max_risk_deal']) <= 100: + await message.answer(f"✅ Изменено: {data_settings['max_risk_deal']}% → {data['max_risk_deal']}%") + await rq.update_max_risk_deal(message.from_user.id, data['max_risk_deal']) await main_settings_message(message.from_user.id, message, state) await state.clear() else: + await message.answer(f'⛔️ Ошибка: ваше значение ({data['max_risk_deal']}%) или выше лимита (100) или вы вводите неверные символы') + await main_settings_message(message.from_user.id, message, state) \ No newline at end of file