forked from kodorvan/stcs
Fixed the counting of the series, added a request to set the serial number
This commit is contained in:
@@ -61,6 +61,26 @@ async def start_trading_cycle(
|
|||||||
leverage=leverage,
|
leverage=leverage,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
await rq.set_user_deal(
|
||||||
|
tg_id=tg_id,
|
||||||
|
symbol=symbol,
|
||||||
|
current_step=1,
|
||||||
|
current_series=1,
|
||||||
|
trade_mode=trade_mode,
|
||||||
|
side_mode=switch_side,
|
||||||
|
margin_type=margin_type,
|
||||||
|
leverage=leverage,
|
||||||
|
order_quantity=order_quantity,
|
||||||
|
trigger_price=trigger_price,
|
||||||
|
martingale_factor=martingale_factor,
|
||||||
|
max_bets_in_series=max_bets_in_series,
|
||||||
|
take_profit_percent=take_profit_percent,
|
||||||
|
stop_loss_percent=stop_loss_percent,
|
||||||
|
base_quantity=order_quantity,
|
||||||
|
commission_fee=commission_fee,
|
||||||
|
commission_place=commission_place
|
||||||
|
)
|
||||||
|
|
||||||
res = await open_positions(
|
res = await open_positions(
|
||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
@@ -74,25 +94,6 @@ async def start_trading_cycle(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if res == "OK":
|
if res == "OK":
|
||||||
await rq.set_user_deal(
|
|
||||||
tg_id=tg_id,
|
|
||||||
symbol=symbol,
|
|
||||||
current_step=1,
|
|
||||||
current_series=1,
|
|
||||||
trade_mode=trade_mode,
|
|
||||||
side_mode=switch_side,
|
|
||||||
margin_type=margin_type,
|
|
||||||
leverage=leverage,
|
|
||||||
order_quantity=order_quantity,
|
|
||||||
trigger_price=trigger_price,
|
|
||||||
martingale_factor=martingale_factor,
|
|
||||||
max_bets_in_series=max_bets_in_series,
|
|
||||||
take_profit_percent=take_profit_percent,
|
|
||||||
stop_loss_percent=stop_loss_percent,
|
|
||||||
base_quantity=order_quantity,
|
|
||||||
commission_fee=commission_fee,
|
|
||||||
commission_place=commission_place
|
|
||||||
)
|
|
||||||
return "OK"
|
return "OK"
|
||||||
return (
|
return (
|
||||||
res
|
res
|
||||||
@@ -151,7 +152,25 @@ async def trading_cycle_profit(
|
|||||||
else:
|
else:
|
||||||
s_side = side
|
s_side = side
|
||||||
|
|
||||||
next_series = current_series + 1
|
await rq.set_user_deal(
|
||||||
|
tg_id=tg_id,
|
||||||
|
symbol=symbol,
|
||||||
|
current_step=1,
|
||||||
|
current_series=current_series,
|
||||||
|
trade_mode=trade_mode,
|
||||||
|
side_mode=side_mode,
|
||||||
|
margin_type=margin_type,
|
||||||
|
leverage=leverage,
|
||||||
|
order_quantity=base_quantity,
|
||||||
|
trigger_price=trigger_price,
|
||||||
|
martingale_factor=martingale_factor,
|
||||||
|
max_bets_in_series=max_bets_in_series,
|
||||||
|
take_profit_percent=take_profit_percent,
|
||||||
|
stop_loss_percent=stop_loss_percent,
|
||||||
|
base_quantity=base_quantity,
|
||||||
|
commission_fee=commission_fee,
|
||||||
|
commission_place=commission_place
|
||||||
|
)
|
||||||
|
|
||||||
res = await open_positions(
|
res = await open_positions(
|
||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
@@ -166,25 +185,6 @@ async def trading_cycle_profit(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if res == "OK":
|
if res == "OK":
|
||||||
await rq.set_user_deal(
|
|
||||||
tg_id=tg_id,
|
|
||||||
symbol=symbol,
|
|
||||||
current_step=1,
|
|
||||||
current_series=next_series,
|
|
||||||
trade_mode=trade_mode,
|
|
||||||
side_mode=side_mode,
|
|
||||||
margin_type=margin_type,
|
|
||||||
leverage=leverage,
|
|
||||||
order_quantity=base_quantity,
|
|
||||||
trigger_price=trigger_price,
|
|
||||||
martingale_factor=martingale_factor,
|
|
||||||
max_bets_in_series=max_bets_in_series,
|
|
||||||
take_profit_percent=take_profit_percent,
|
|
||||||
stop_loss_percent=stop_loss_percent,
|
|
||||||
base_quantity=base_quantity,
|
|
||||||
commission_fee=commission_fee,
|
|
||||||
commission_place=commission_place
|
|
||||||
)
|
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -253,6 +253,26 @@ async def trading_cycle(
|
|||||||
else:
|
else:
|
||||||
r_side = side
|
r_side = side
|
||||||
|
|
||||||
|
await rq.set_user_deal(
|
||||||
|
tg_id=tg_id,
|
||||||
|
symbol=symbol,
|
||||||
|
current_step=current_step,
|
||||||
|
current_series=current_series,
|
||||||
|
trade_mode=trade_mode,
|
||||||
|
side_mode=side_mode,
|
||||||
|
margin_type=margin_type,
|
||||||
|
leverage=leverage,
|
||||||
|
order_quantity=next_quantity,
|
||||||
|
trigger_price=trigger_price,
|
||||||
|
martingale_factor=martingale_factor,
|
||||||
|
max_bets_in_series=max_bets_in_series,
|
||||||
|
take_profit_percent=take_profit_percent,
|
||||||
|
stop_loss_percent=stop_loss_percent,
|
||||||
|
base_quantity=base_quantity,
|
||||||
|
commission_fee=commission_fee,
|
||||||
|
commission_place=commission_place
|
||||||
|
)
|
||||||
|
|
||||||
res = await open_positions(
|
res = await open_positions(
|
||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
@@ -266,25 +286,6 @@ async def trading_cycle(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if res == "OK":
|
if res == "OK":
|
||||||
await rq.set_user_deal(
|
|
||||||
tg_id=tg_id,
|
|
||||||
symbol=symbol,
|
|
||||||
current_step=current_step,
|
|
||||||
current_series=current_series,
|
|
||||||
trade_mode=trade_mode,
|
|
||||||
side_mode=side_mode,
|
|
||||||
margin_type=margin_type,
|
|
||||||
leverage=leverage,
|
|
||||||
order_quantity=next_quantity,
|
|
||||||
trigger_price=trigger_price,
|
|
||||||
martingale_factor=martingale_factor,
|
|
||||||
max_bets_in_series=max_bets_in_series,
|
|
||||||
take_profit_percent=take_profit_percent,
|
|
||||||
stop_loss_percent=stop_loss_percent,
|
|
||||||
base_quantity=base_quantity,
|
|
||||||
commission_fee=commission_fee,
|
|
||||||
commission_place=commission_place
|
|
||||||
)
|
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -110,14 +110,8 @@ class TelegramMessageHandler:
|
|||||||
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)
|
||||||
|
|
||||||
|
|
||||||
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"))
|
exec_pnl = format_value(execution.get("execPnl"))
|
||||||
# total_pnl = safe_float(exec_pnl) - safe_float(exec_fee) - fee
|
pnl = safe_float(exec_pnl)
|
||||||
|
|
||||||
header = (
|
header = (
|
||||||
"Сделка закрыта:" if safe_float(closed_size) > 0 else "Сделка открыта:"
|
"Сделка закрыта:" if safe_float(closed_size) > 0 else "Сделка открыта:"
|
||||||
@@ -132,6 +126,7 @@ class TelegramMessageHandler:
|
|||||||
)
|
)
|
||||||
commission_fee = user_deals_data.commission_fee
|
commission_fee = user_deals_data.commission_fee
|
||||||
commission_place = user_deals_data.commission_place
|
commission_place = user_deals_data.commission_place
|
||||||
|
current_series = user_deals_data.current_series
|
||||||
|
|
||||||
if commission_fee == "Yes_commission_fee":
|
if commission_fee == "Yes_commission_fee":
|
||||||
if commission_place == "Commission_for_qty":
|
if commission_place == "Commission_for_qty":
|
||||||
@@ -159,7 +154,7 @@ class TelegramMessageHandler:
|
|||||||
if safe_float(closed_size) == 0:
|
if safe_float(closed_size) == 0:
|
||||||
text += f"Движение: {side_rus}\n"
|
text += f"Движение: {side_rus}\n"
|
||||||
else:
|
else:
|
||||||
text += f"\nРеализованная прибыль: {exec_pnl:.7f}\n"
|
text += f"\nПрибыль: {pnl:.7f}\n"
|
||||||
|
|
||||||
await self.telegram_bot.send_message(
|
await self.telegram_bot.send_message(
|
||||||
chat_id=tg_id, text=text, reply_markup=kbi.profile_bybit
|
chat_id=tg_id, text=text, reply_markup=kbi.profile_bybit
|
||||||
@@ -172,7 +167,7 @@ class TelegramMessageHandler:
|
|||||||
and safe_float(closed_size) > 0
|
and safe_float(closed_size) > 0
|
||||||
and user_symbols is not None
|
and user_symbols is not None
|
||||||
):
|
):
|
||||||
if safe_float(exec_pnl) > 0:
|
if safe_float(pnl) > 0:
|
||||||
profit_text = "📈 Начинаю новую серию с базовой ставки\n"
|
profit_text = "📈 Начинаю новую серию с базовой ставки\n"
|
||||||
await self.telegram_bot.send_message(
|
await self.telegram_bot.send_message(
|
||||||
chat_id=tg_id, text=profit_text, reply_markup=kbi.profile_bybit
|
chat_id=tg_id, text=profit_text, reply_markup=kbi.profile_bybit
|
||||||
@@ -195,7 +190,10 @@ class TelegramMessageHandler:
|
|||||||
res = await trading_cycle_profit(
|
res = await trading_cycle_profit(
|
||||||
tg_id=tg_id, symbol=symbol, side=r_side
|
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":
|
if res == "OK":
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -1171,6 +1171,34 @@ async def set_last_side_by_symbol(tg_id: int, symbol: str, last_side: str):
|
|||||||
return False
|
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
|
# USER AUTO TRADING
|
||||||
|
|
||||||
async def get_all_user_auto_trading(tg_id: int):
|
async def get_all_user_auto_trading(tg_id: int):
|
||||||
|
|||||||
Reference in New Issue
Block a user