2
0
forked from kodorvan/stcs

Fixed the counting of the series, added a request to set the serial number

This commit is contained in:
algizn97
2025-10-26 19:44:16 +05:00
parent a2164853d9
commit a0ef48810a
3 changed files with 95 additions and 68 deletions

View File

@@ -61,19 +61,6 @@ async def start_trading_cycle(
leverage=leverage,
)
res = await open_positions(
tg_id=tg_id,
symbol=symbol,
side=side,
order_quantity=order_quantity,
trigger_price=trigger_price,
margin_type=margin_type,
leverage=leverage,
take_profit_percent=take_profit_percent,
stop_loss_percent=stop_loss_percent,
)
if res == "OK":
await rq.set_user_deal(
tg_id=tg_id,
symbol=symbol,
@@ -93,6 +80,20 @@ async def start_trading_cycle(
commission_fee=commission_fee,
commission_place=commission_place
)
res = await open_positions(
tg_id=tg_id,
symbol=symbol,
side=side,
order_quantity=order_quantity,
trigger_price=trigger_price,
margin_type=margin_type,
leverage=leverage,
take_profit_percent=take_profit_percent,
stop_loss_percent=stop_loss_percent,
)
if res == "OK":
return "OK"
return (
res
@@ -151,26 +152,11 @@ async def trading_cycle_profit(
else:
s_side = side
next_series = current_series + 1
res = await open_positions(
tg_id=tg_id,
symbol=symbol,
side=s_side,
order_quantity=base_quantity,
trigger_price=trigger_price,
margin_type=margin_type,
leverage=leverage,
take_profit_percent=take_profit_percent,
stop_loss_percent=stop_loss_percent,
)
if res == "OK":
await rq.set_user_deal(
tg_id=tg_id,
symbol=symbol,
current_step=1,
current_series=next_series,
current_series=current_series,
trade_mode=trade_mode,
side_mode=side_mode,
margin_type=margin_type,
@@ -185,6 +171,20 @@ async def trading_cycle_profit(
commission_fee=commission_fee,
commission_place=commission_place
)
res = await open_positions(
tg_id=tg_id,
symbol=symbol,
side=s_side,
order_quantity=base_quantity,
trigger_price=trigger_price,
margin_type=margin_type,
leverage=leverage,
take_profit_percent=take_profit_percent,
stop_loss_percent=stop_loss_percent,
)
if res == "OK":
return "OK"
return (
@@ -253,19 +253,6 @@ async def trading_cycle(
else:
r_side = side
res = await open_positions(
tg_id=tg_id,
symbol=symbol,
side=r_side,
order_quantity=total_quantity,
trigger_price=trigger_price,
margin_type=margin_type,
leverage=leverage,
take_profit_percent=take_profit_percent,
stop_loss_percent=stop_loss_percent,
)
if res == "OK":
await rq.set_user_deal(
tg_id=tg_id,
symbol=symbol,
@@ -285,6 +272,20 @@ async def trading_cycle(
commission_fee=commission_fee,
commission_place=commission_place
)
res = await open_positions(
tg_id=tg_id,
symbol=symbol,
side=r_side,
order_quantity=total_quantity,
trigger_price=trigger_price,
margin_type=margin_type,
leverage=leverage,
take_profit_percent=take_profit_percent,
stop_loss_percent=stop_loss_percent,
)
if res == "OK":
return "OK"
return (

View File

@@ -110,14 +110,8 @@ class TelegramMessageHandler:
get_total_fee = user_auto_trading.total_fee
total_fee = safe_float(exec_fee) + safe_float(get_total_fee)
if user_auto_trading is not None and user_auto_trading.fee is not None:
fee = user_auto_trading.fee
else:
fee = 0
exec_pnl = format_value(execution.get("execPnl"))
# total_pnl = safe_float(exec_pnl) - safe_float(exec_fee) - fee
pnl = safe_float(exec_pnl)
header = (
"Сделка закрыта:" if safe_float(closed_size) > 0 else "Сделка открыта:"
@@ -132,6 +126,7 @@ class TelegramMessageHandler:
)
commission_fee = user_deals_data.commission_fee
commission_place = user_deals_data.commission_place
current_series = user_deals_data.current_series
if commission_fee == "Yes_commission_fee":
if commission_place == "Commission_for_qty":
@@ -159,7 +154,7 @@ class TelegramMessageHandler:
if safe_float(closed_size) == 0:
text += f"Движение: {side_rus}\n"
else:
text += f"\nРеализованная прибыль: {exec_pnl:.7f}\n"
text += f"\nПрибыль: {pnl:.7f}\n"
await self.telegram_bot.send_message(
chat_id=tg_id, text=text, reply_markup=kbi.profile_bybit
@@ -172,7 +167,7 @@ class TelegramMessageHandler:
and safe_float(closed_size) > 0
and user_symbols is not None
):
if safe_float(exec_pnl) > 0:
if safe_float(pnl) > 0:
profit_text = "📈 Начинаю новую серию с базовой ставки\n"
await self.telegram_bot.send_message(
chat_id=tg_id, text=profit_text, reply_markup=kbi.profile_bybit
@@ -195,7 +190,10 @@ class TelegramMessageHandler:
res = await trading_cycle_profit(
tg_id=tg_id, symbol=symbol, side=r_side
)
current_series += 1
await rq.set_current_series(
tg_id=tg_id, symbol=symbol, current_series=current_series
)
if res == "OK":
pass
else:

View File

@@ -1171,6 +1171,34 @@ async def set_last_side_by_symbol(tg_id: int, symbol: str, last_side: str):
return False
async def set_current_series(tg_id: int, symbol: str, current_series: int):
"""Set current series for a user deal by symbol in the database."""
try:
async with async_session() as session:
result = await session.execute(select(User).filter_by(tg_id=tg_id))
user = result.scalars().first()
if user is None:
logger.error(f"User with tg_id={tg_id} not found")
return False
result = await session.execute(
select(UserDeals).filter_by(user_id=user.id, symbol=symbol)
)
record = result.scalars().first()
if record:
record.current_series = current_series
else:
logger.error(f"User deal with user_id={user.id} and symbol={symbol} not found")
return False
await session.commit()
logger.info("Set current series for user %s and symbol %s", tg_id, symbol)
return True
except Exception as e:
logger.error("Error setting user deal current series for user %s and symbol %s: %s", tg_id, symbol, e)
return False
# USER AUTO TRADING
async def get_all_user_auto_trading(tg_id: int):