Added pnl, tp and sl column
This commit is contained in:
@@ -160,6 +160,9 @@ class UserDeals(Base):
|
|||||||
current_series = Column(Integer, nullable=True)
|
current_series = Column(Integer, nullable=True)
|
||||||
commission_fee = Column(String, nullable=True)
|
commission_fee = Column(String, nullable=True)
|
||||||
commission_place = Column(String, nullable=True)
|
commission_place = Column(String, nullable=True)
|
||||||
|
pnl_series = Column(Float, nullable=True)
|
||||||
|
take_profit = Column(Float, nullable=False, default=0.0)
|
||||||
|
stop_loss = Column(Float, nullable=False, default=0.0)
|
||||||
|
|
||||||
user = relationship("User", back_populates="user_deals")
|
user = relationship("User", back_populates="user_deals")
|
||||||
|
|
||||||
|
|||||||
@@ -200,6 +200,8 @@ async def create_user_additional_settings(tg_id: int) -> None:
|
|||||||
user=user,
|
user=user,
|
||||||
trade_mode="Long", # Default value
|
trade_mode="Long", # Default value
|
||||||
switch_side="По направлению",
|
switch_side="По направлению",
|
||||||
|
side="Buy",
|
||||||
|
trigger_price=0.0,
|
||||||
margin_type="ISOLATED_MARGIN",
|
margin_type="ISOLATED_MARGIN",
|
||||||
leverage="10",
|
leverage="10",
|
||||||
order_quantity=1.0,
|
order_quantity=1.0,
|
||||||
@@ -990,7 +992,8 @@ async def set_user_deal(
|
|||||||
stop_loss_percent: int,
|
stop_loss_percent: int,
|
||||||
base_quantity: float,
|
base_quantity: float,
|
||||||
commission_fee: str,
|
commission_fee: str,
|
||||||
commission_place: str
|
commission_place: str,
|
||||||
|
pnl_series: float
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Set the user deal in the database.
|
Set the user deal in the database.
|
||||||
@@ -1011,6 +1014,7 @@ async def set_user_deal(
|
|||||||
:param base_quantity: Base quantity
|
:param base_quantity: Base quantity
|
||||||
:param commission_fee: Commission fee
|
:param commission_fee: Commission fee
|
||||||
:param commission_place: Commission place
|
:param commission_place: Commission place
|
||||||
|
:param pnl_series: PNL series
|
||||||
:return: bool
|
:return: bool
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
@@ -1043,6 +1047,7 @@ async def set_user_deal(
|
|||||||
deal.base_quantity = base_quantity
|
deal.base_quantity = base_quantity
|
||||||
deal.commission_fee = commission_fee
|
deal.commission_fee = commission_fee
|
||||||
deal.commission_place = commission_place
|
deal.commission_place = commission_place
|
||||||
|
deal.pnl_series = pnl_series
|
||||||
else:
|
else:
|
||||||
# Creating new record
|
# Creating new record
|
||||||
new_deal = UserDeals(
|
new_deal = UserDeals(
|
||||||
@@ -1062,7 +1067,8 @@ async def set_user_deal(
|
|||||||
stop_loss_percent=stop_loss_percent,
|
stop_loss_percent=stop_loss_percent,
|
||||||
base_quantity=base_quantity,
|
base_quantity=base_quantity,
|
||||||
commission_fee=commission_fee,
|
commission_fee=commission_fee,
|
||||||
commission_place=commission_place
|
commission_place=commission_place,
|
||||||
|
pnl_series=pnl_series
|
||||||
)
|
)
|
||||||
session.add(new_deal)
|
session.add(new_deal)
|
||||||
|
|
||||||
@@ -1199,6 +1205,63 @@ async def set_current_series(tg_id: int, symbol: str, current_series: int):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
async def set_tp_sl_by_symbol(tg_id: int, symbol: str, tp: float, sl: float):
|
||||||
|
"""Set tp and sl 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.take_profit = tp
|
||||||
|
record.stop_loss = sl
|
||||||
|
else:
|
||||||
|
logger.error(f"User deal with user_id={user.id} and symbol={symbol} not found")
|
||||||
|
return False
|
||||||
|
await session.commit()
|
||||||
|
logger.info("Set tp and sl for user %s and symbol %s", tg_id, symbol)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Error setting user deal tp and sl for user %s and symbol %s: %s", tg_id, symbol, e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
async def set_pnl_series_by_symbol(tg_id: int, symbol: str, pnl_series: float):
|
||||||
|
"""Set pnl 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.pnl_series = pnl_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 pnl series for user %s and symbol %s", tg_id, symbol)
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Error setting user deal pnl 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