forked from kodorvan/stcs
Added the ability to open a deal at a trigger price
This commit is contained in:
@@ -10,7 +10,6 @@ from app.services.Bybit.functions.Futures import (close_user_trade, set_take_pro
|
||||
get_active_positions_by_symbol, get_active_orders_by_symbol,
|
||||
get_active_positions, get_active_orders, cancel_all_tp_sl_orders,
|
||||
open_position, close_trade_after_delay, safe_float,
|
||||
calculate_total_budget, get_bybit_client,
|
||||
)
|
||||
from app.services.Bybit.functions.balance import get_balance
|
||||
import app.telegram.Keyboards.inline_keyboards as inline_markup
|
||||
@@ -18,9 +17,9 @@ import app.telegram.Keyboards.inline_keyboards as inline_markup
|
||||
import app.telegram.database.requests as rq
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
from app.services.Bybit.functions.price_symbol import get_price
|
||||
import app.services.Bybit.functions.balance as balance_g
|
||||
# import app.services.Bybit.functions.balance as balance_g
|
||||
|
||||
from app.states.States import (state_update_entry_type, state_update_symbol, state_limit_price,
|
||||
from app.states.States import (state_update_symbol,
|
||||
SetTP_SL_State, CloseTradeTimerState)
|
||||
from aiogram.fsm.context import FSMContext
|
||||
|
||||
@@ -121,72 +120,6 @@ async def update_symbol_for_trade(message: Message, state: FSMContext) -> None:
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(F.data == 'clb_update_entry_type')
|
||||
async def update_entry_type_message(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
"""
|
||||
Запрашивает у пользователя тип входа в позицию (Market или Limit).
|
||||
"""
|
||||
await state.set_state(state_update_entry_type.entry_type)
|
||||
await callback.message.answer("Выберите тип входа в позицию:", reply_markup=inline_markup.entry_order_type_markup)
|
||||
await callback.answer()
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(lambda c: c.data and c.data.startswith('entry_order_type:'))
|
||||
async def entry_order_type_callback(callback: CallbackQuery, state: FSMContext) -> None:
|
||||
"""
|
||||
Обработка выбора типа входа в позицию.
|
||||
Если Limit, запрашивает цену лимитного ордера.
|
||||
Если Market — обновляет настройки.
|
||||
"""
|
||||
order_type = callback.data.split(':')[1]
|
||||
|
||||
if order_type not in ['Market', 'Limit']:
|
||||
await callback.answer("Ошибка выбора", show_alert=True)
|
||||
return
|
||||
|
||||
if order_type == 'Limit':
|
||||
await state.set_state(state_limit_price.price)
|
||||
await callback.message.answer("Введите цену:", reply_markup=inline_markup.cancel)
|
||||
await callback.answer()
|
||||
return
|
||||
|
||||
try:
|
||||
await state.update_data(entry_order_type=order_type)
|
||||
await rq.update_entry_order_type(callback.from_user.id, order_type)
|
||||
await callback.message.answer("Выбран тип входа в позицию по текущей цене:",
|
||||
reply_markup=inline_markup.start_trading_markup)
|
||||
await callback.answer()
|
||||
except Exception as e:
|
||||
logger.error("Произошла ошибка при обновлении типа входа в позицию: %s", e)
|
||||
await callback.message.answer("Произошла ошибка при обновлении типа входа в позицию",
|
||||
reply_markup=inline_markup.back_to_main)
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router_functions_bybit_trade.message(state_limit_price.price)
|
||||
async def set_limit_price(message: Message, state: FSMContext) -> None:
|
||||
"""
|
||||
Обрабатывает ввод цены лимитного ордера, проверяет формат и сохраняет настройки.
|
||||
"""
|
||||
try:
|
||||
price = float(message.text)
|
||||
if price <= 0:
|
||||
await message.answer("Цена должна быть положительным числом. Попробуйте снова.",
|
||||
reply_markup=inline_markup.cancel)
|
||||
return
|
||||
except ValueError:
|
||||
await message.answer("Некорректный формат цены. Введите число.", reply_markup=inline_markup.cancel)
|
||||
return
|
||||
|
||||
await state.update_data(entry_order_type='Limit', limit_price=price)
|
||||
|
||||
await rq.update_entry_order_type(message.from_user.id, 'Limit')
|
||||
await rq.update_limit_price(message.from_user.id, price)
|
||||
|
||||
await message.answer(f"Триггер цена установлена: {price}", reply_markup=inline_markup.start_trading_markup)
|
||||
await state.clear()
|
||||
|
||||
|
||||
@router_functions_bybit_trade.callback_query(F.data == "clb_start_chatbot_trading")
|
||||
async def start_trading_process(callback: CallbackQuery) -> None:
|
||||
"""
|
||||
|
Reference in New Issue
Block a user