The message receipt has been sorted
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
import logging.config
|
import logging.config
|
||||||
import math
|
import math
|
||||||
|
import json
|
||||||
import app.telegram.keyboards.inline as kbi
|
import app.telegram.keyboards.inline as kbi
|
||||||
import database.request as rq
|
import database.request as rq
|
||||||
from app.bybit.get_functions.get_instruments_info import get_instruments_info
|
from app.bybit.get_functions.get_instruments_info import get_instruments_info
|
||||||
|
from app.bybit.get_functions.get_positions import get_active_positions_by_symbol
|
||||||
from app.bybit.logger_bybit.logger_bybit import LOGGING_CONFIG
|
from app.bybit.logger_bybit.logger_bybit import LOGGING_CONFIG
|
||||||
from app.bybit.open_positions import trading_cycle, trading_cycle_profit
|
from app.bybit.open_positions import trading_cycle, trading_cycle_profit
|
||||||
from app.bybit.set_functions.set_tp_sl import set_tp_sl_for_position
|
from app.bybit.set_functions.set_tp_sl import set_tp_sl_for_position
|
||||||
@@ -56,7 +57,10 @@ class TelegramMessageHandler:
|
|||||||
|
|
||||||
async def format_execution_update(self, message, tg_id):
|
async def format_execution_update(self, message, tg_id):
|
||||||
try:
|
try:
|
||||||
|
logger.info("Execution update: %s", json.dumps(message))
|
||||||
execution = message.get("data", [{}])[0]
|
execution = message.get("data", [{}])[0]
|
||||||
|
exec_type = format_value(execution.get("execType"))
|
||||||
|
if exec_type == "Trade" or exec_type == "BustTrade":
|
||||||
closed_size = format_value(execution.get("closedSize"))
|
closed_size = format_value(execution.get("closedSize"))
|
||||||
symbol = format_value(execution.get("symbol"))
|
symbol = format_value(execution.get("symbol"))
|
||||||
exec_price = format_value(execution.get("execPrice"))
|
exec_price = format_value(execution.get("execPrice"))
|
||||||
@@ -89,7 +93,11 @@ class TelegramMessageHandler:
|
|||||||
tg_id=tg_id, symbol=symbol, fee=safe_float(exec_fee)
|
tg_id=tg_id, symbol=symbol, fee=safe_float(exec_fee)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
get_total_fee = 0
|
||||||
|
|
||||||
|
if user_auto_trading is not None:
|
||||||
get_total_fee = user_auto_trading.total_fee
|
get_total_fee = user_auto_trading.total_fee
|
||||||
|
|
||||||
total_fee = safe_float(exec_fee) + safe_float(get_total_fee)
|
total_fee = safe_float(exec_fee) + safe_float(get_total_fee)
|
||||||
|
|
||||||
exec_pnl = format_value(execution.get("execPnl"))
|
exec_pnl = format_value(execution.get("execPnl"))
|
||||||
@@ -103,8 +111,14 @@ class TelegramMessageHandler:
|
|||||||
user_deals_data = await rq.get_user_deal_by_symbol(
|
user_deals_data = await rq.get_user_deal_by_symbol(
|
||||||
tg_id=tg_id, symbol=symbol
|
tg_id=tg_id, symbol=symbol
|
||||||
)
|
)
|
||||||
|
if user_deals_data is None:
|
||||||
|
commission_fee = "Yes_commission_fee"
|
||||||
|
commission_place = "Commission_for_qty"
|
||||||
|
|
||||||
|
else:
|
||||||
commission_fee = user_deals_data.commission_fee or "Yes_commission_fee"
|
commission_fee = user_deals_data.commission_fee or "Yes_commission_fee"
|
||||||
commission_place = user_deals_data.commission_place or "Commission_for_qty"
|
commission_place = user_deals_data.commission_place or "Commission_for_qty"
|
||||||
|
|
||||||
current_series = user_deals_data.current_series
|
current_series = user_deals_data.current_series
|
||||||
current_step = user_deals_data.current_step
|
current_step = user_deals_data.current_step
|
||||||
order_quantity = user_deals_data.order_quantity
|
order_quantity = user_deals_data.order_quantity
|
||||||
@@ -182,12 +196,27 @@ class TelegramMessageHandler:
|
|||||||
position_idx=0)
|
position_idx=0)
|
||||||
if ress:
|
if ress:
|
||||||
take_profit_truncated = await truncate_float(take_profit_price, 6)
|
take_profit_truncated = await truncate_float(take_profit_price, 6)
|
||||||
stop_loss_truncated = await truncate_float(stop_loss_price, 6)
|
|
||||||
|
|
||||||
text += (f"Движение: {side_rus}\n"
|
text += (f"Движение: {side_rus}\n"
|
||||||
f"Тейк-профит: {take_profit_truncated}\n"
|
f"Тейк-профит: {take_profit_truncated}\n"
|
||||||
f"Стоп-лосс: {stop_loss_truncated}\n"
|
|
||||||
)
|
)
|
||||||
|
if stop_loss_price is not None:
|
||||||
|
stop_loss_truncated = await truncate_float(stop_loss_price, 6)
|
||||||
|
else:
|
||||||
|
stop_loss_truncated = None
|
||||||
|
|
||||||
|
if stop_loss_truncated is not None:
|
||||||
|
text += f"Стоп-лосс: {stop_loss_truncated}\n"
|
||||||
|
else:
|
||||||
|
deals = await get_active_positions_by_symbol(
|
||||||
|
tg_id=tg_id, symbol=symbol
|
||||||
|
)
|
||||||
|
position = next((d for d in deals if d.get("symbol") == symbol), None)
|
||||||
|
|
||||||
|
if position:
|
||||||
|
liq_price = position.get("liqPrice", 0)
|
||||||
|
text += f"Цена ликвидации: {liq_price}\n"
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
text += (f"Движение: {side_rus}\n"
|
text += (f"Движение: {side_rus}\n"
|
||||||
"Не удалось установить ТП и СЛ\n")
|
"Не удалось установить ТП и СЛ\n")
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ class WebSocketBot:
|
|||||||
self.user_keys = {}
|
self.user_keys = {}
|
||||||
self.loop = None
|
self.loop = None
|
||||||
self.message_handler = TelegramMessageHandler(telegram_bot)
|
self.message_handler = TelegramMessageHandler(telegram_bot)
|
||||||
self.last_execution_seq = {}
|
|
||||||
|
|
||||||
async def run_user_check_loop(self):
|
async def run_user_check_loop(self):
|
||||||
"""Run a loop to check for users and connect them to the WebSocket."""
|
"""Run a loop to check for users and connect them to the WebSocket."""
|
||||||
@@ -106,17 +105,7 @@ class WebSocketBot:
|
|||||||
await self.message_handler.format_order_update(message, tg_id)
|
await self.message_handler.format_order_update(message, tg_id)
|
||||||
|
|
||||||
async def handle_execution_update(self, message, tg_id):
|
async def handle_execution_update(self, message, tg_id):
|
||||||
"""Handle execution updates."""
|
"""Handle execution updates without duplicate processing."""
|
||||||
data_items = message.get('data', [])
|
|
||||||
if not data_items:
|
|
||||||
return
|
|
||||||
for exec_data in data_items:
|
|
||||||
seq = exec_data.get('seq')
|
|
||||||
if tg_id not in self.last_execution_seq:
|
|
||||||
self.last_execution_seq[tg_id] = -1
|
|
||||||
if seq <= self.last_execution_seq[tg_id]:
|
|
||||||
continue
|
|
||||||
self.last_execution_seq[tg_id] = seq
|
|
||||||
await self.message_handler.format_execution_update(message, tg_id)
|
await self.message_handler.format_execution_update(message, tg_id)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
Reference in New Issue
Block a user