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