develop #3

Open
Alex wants to merge 77 commits from Alex/stcs:develop into stable
2 changed files with 104 additions and 14 deletions
Showing only changes of commit 2dc639d59a - Show all commits

View File

@@ -76,7 +76,13 @@ async def contract_long(tg_id, message, margin_mode):
starting_quantity = float(data_main_stgs['starting_quantity'])
max_risk_percent = float(data_risk_management_stgs['max_risk_deal'])
loss_profit = float(data_risk_management_stgs['price_loss'])
takeProfit= float(data_risk_management_stgs['price_profit'])
takeprofit= float(data_risk_management_stgs['price_profit'])
commission_fee = float(data_risk_management_stgs.get('commission_fee', 0))
takeProfit_raw = takeprofit
takeProfit = takeProfit_raw - commission_fee # уменьшаем TP на комиссию
if takeProfit < 0:
takeProfit = 0
# Инициализация переменных
next_quantity = starting_quantity
@@ -144,9 +150,11 @@ async def contract_long(tg_id, message, margin_mode):
await info_access_open_deal(message, SYMBOL, data_main_stgs['trading_mode'], margin_mode, data_main_stgs['size_leverage'], next_quantity)
except exceptions.InvalidRequestError as e:
logging.error(f"Неверно указана торговая пара: {e}")
await message.answer('Недостаточно баланса')
except Exception as e:
await message.answer('Непредвиденная оишбка')
logging.error(f"Ошибка при совершении сделки: {e}")
await message.answer('⚠️ Ошибка при совершении сделки')
async def contract_short(tg_id, message, margin_mode):
api_key = await rq.get_bybit_api_key(tg_id)
@@ -183,7 +191,13 @@ async def contract_short(tg_id, message, margin_mode):
starting_quantity = float(data_main_stgs['starting_quantity'])
max_risk_percent = float(data_risk_management_stgs['max_risk_deal'])
loss_profit = float(data_risk_management_stgs['price_loss'])
takeProfit = float(data_risk_management_stgs['price_profit'])
takeprofit = float(data_risk_management_stgs['price_profit'])
commission_fee = float(data_risk_management_stgs.get('commission_fee', 0))
takeProfit_raw = takeprofit
takeProfit = takeProfit_raw - commission_fee # уменьшаем TP на комиссию
if takeProfit < 0:
takeProfit = 0
# Инициализация переменных
next_quantity = starting_quantity
@@ -249,6 +263,58 @@ async def contract_short(tg_id, message, margin_mode):
await info_access_open_deal(message, SYMBOL, data_main_stgs['trading_mode'], margin_mode, data_main_stgs['size_leverage'], next_quantity)
except exceptions.InvalidRequestError as e:
logging.error(f"Error in open_deal: {e}")
await message.answer('Недостаточно баланса')
except Exception as e:
await message.answer('Непредвиденная оишбка')
logging.error(f"Error in open_deal: {e}")
await message.answer('⚠️ Ошибка при совершении сделки')
async def open_market_order(tg_id, message, 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')
if trading_mode == 'Long':
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.")
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')
client = HTTP(
api_key=api_key,
api_secret=secret_key
)
symbol = await rq.get_symbol(tg_id)
qty = float(data_main_stgs['starting_quantity'])
side = 'Buy' if trading_mode == 'Long' else 'Sell'
try:
response = client.place_order(
category='linear',
symbol=symbol,
side=side,
orderType='Limit',
qty=qty,
price=price,
timeInForce='GTC',
orderLinkId=f"order_{int(time.time())}"
)
if response.get('retCode') == 0:
await message.answer(f"Limit ордер открыт: {side} {qty} {symbol} по цене {price}")
else:
await message.answer(f"Ошибка открытия ордера: {response.get('retMsg')}")
except Exception as e:
logging.error(f"Ошибка при открытии лимитного ордера: {e}")
await message.answer("Ошибка при открытии ордера")