The logic of setting take profit and stop loss has been changed, added data for the end user
This commit is contained in:
		@@ -78,7 +78,8 @@ async def start_trading_cycle(
 | 
			
		||||
            stop_loss_percent=stop_loss_percent,
 | 
			
		||||
            base_quantity=order_quantity,
 | 
			
		||||
            commission_fee=commission_fee,
 | 
			
		||||
            commission_place=commission_place
 | 
			
		||||
            commission_place=commission_place,
 | 
			
		||||
            pnl_series=0
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        res = await open_positions(
 | 
			
		||||
@@ -87,10 +88,7 @@ async def start_trading_cycle(
 | 
			
		||||
            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,
 | 
			
		||||
            leverage=leverage
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if res == "OK":
 | 
			
		||||
@@ -171,7 +169,8 @@ async def trading_cycle_profit(
 | 
			
		||||
            stop_loss_percent=stop_loss_percent,
 | 
			
		||||
            base_quantity=base_quantity,
 | 
			
		||||
            commission_fee=commission_fee,
 | 
			
		||||
            commission_place=commission_place
 | 
			
		||||
            commission_place=commission_place,
 | 
			
		||||
            pnl_series=0
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        res = await open_positions(
 | 
			
		||||
@@ -180,10 +179,7 @@ async def trading_cycle_profit(
 | 
			
		||||
            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,
 | 
			
		||||
            leverage=leverage
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if res == "OK":
 | 
			
		||||
@@ -227,6 +223,7 @@ async def trading_cycle(
 | 
			
		||||
        base_quantity = user_deals_data.base_quantity
 | 
			
		||||
        side_mode = user_deals_data.side_mode
 | 
			
		||||
        current_series = user_deals_data.current_series
 | 
			
		||||
        pnl_series = user_deals_data.pnl_series
 | 
			
		||||
 | 
			
		||||
        next_quantity = safe_float(order_quantity) * (
 | 
			
		||||
            safe_float(martingale_factor)
 | 
			
		||||
@@ -272,7 +269,8 @@ async def trading_cycle(
 | 
			
		||||
            stop_loss_percent=stop_loss_percent,
 | 
			
		||||
            base_quantity=base_quantity,
 | 
			
		||||
            commission_fee=commission_fee,
 | 
			
		||||
            commission_place=commission_place
 | 
			
		||||
            commission_place=commission_place,
 | 
			
		||||
            pnl_series=pnl_series
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        res = await open_positions(
 | 
			
		||||
@@ -281,10 +279,7 @@ async def trading_cycle(
 | 
			
		||||
            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,
 | 
			
		||||
            leverage=leverage
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if res == "OK":
 | 
			
		||||
@@ -313,18 +308,10 @@ async def open_positions(
 | 
			
		||||
        symbol: str,
 | 
			
		||||
        order_quantity: float,
 | 
			
		||||
        trigger_price: float,
 | 
			
		||||
        margin_type: str,
 | 
			
		||||
        leverage: str,
 | 
			
		||||
        take_profit_percent: float,
 | 
			
		||||
        stop_loss_percent: float
 | 
			
		||||
        leverage: str
 | 
			
		||||
) -> str | None:
 | 
			
		||||
    try:
 | 
			
		||||
        client = await get_bybit_client(tg_id=tg_id)
 | 
			
		||||
        user_deals_data = await rq.get_user_deal_by_symbol(tg_id=tg_id, symbol=symbol)
 | 
			
		||||
        commission_fee = user_deals_data.commission_fee
 | 
			
		||||
        commission_place = user_deals_data.commission_place
 | 
			
		||||
        user_auto_trading_data = await rq.get_user_auto_trading(tg_id=tg_id, symbol=symbol)
 | 
			
		||||
        total_fee = user_auto_trading_data.total_fee
 | 
			
		||||
        get_ticker = await get_tickers(tg_id, symbol=symbol)
 | 
			
		||||
        price_symbol = safe_float(get_ticker.get("lastPrice")) or 0
 | 
			
		||||
        instruments_info = await get_instruments_info(tg_id=tg_id, symbol=symbol)
 | 
			
		||||
@@ -342,38 +329,6 @@ async def open_positions(
 | 
			
		||||
            po_trigger_price = None
 | 
			
		||||
            trigger_direction = None
 | 
			
		||||
 | 
			
		||||
        price_for_cals = trigger_price if po_trigger_price is not None else price_symbol
 | 
			
		||||
 | 
			
		||||
        if qty_formatted <= 0:
 | 
			
		||||
            return "Order does not meet minimum order value"
 | 
			
		||||
 | 
			
		||||
        total_commission = 0
 | 
			
		||||
        if commission_fee == "Yes_commission_fee":
 | 
			
		||||
            if commission_place == "Commission_for_tp":
 | 
			
		||||
                total_commission = safe_float(total_fee) / qty_formatted
 | 
			
		||||
 | 
			
		||||
        if margin_type == "ISOLATED_MARGIN":
 | 
			
		||||
            if side == "Buy":
 | 
			
		||||
                take_profit_price = price_for_cals * (
 | 
			
		||||
                        1 + take_profit_percent / 100) + total_commission
 | 
			
		||||
                stop_loss_price = None
 | 
			
		||||
            else:
 | 
			
		||||
                take_profit_price = price_for_cals * (
 | 
			
		||||
                        1 - take_profit_percent / 100) - total_commission
 | 
			
		||||
                stop_loss_price = None
 | 
			
		||||
        else:
 | 
			
		||||
            if side == "Buy":
 | 
			
		||||
                take_profit_price = price_for_cals * (
 | 
			
		||||
                            1 + take_profit_percent / 100) + total_commission
 | 
			
		||||
                stop_loss_price = price_for_cals * (1 - stop_loss_percent / 100)
 | 
			
		||||
            else:
 | 
			
		||||
                take_profit_price = price_for_cals * (
 | 
			
		||||
                            1 - take_profit_percent / 100) - total_commission
 | 
			
		||||
                stop_loss_price = price_for_cals * (1 + stop_loss_percent / 100)
 | 
			
		||||
 | 
			
		||||
            take_profit_price = max(take_profit_price, 0)
 | 
			
		||||
            stop_loss_price = max(stop_loss_price, 0)
 | 
			
		||||
 | 
			
		||||
        # Place order
 | 
			
		||||
        order_params = {
 | 
			
		||||
            "category": "linear",
 | 
			
		||||
@@ -387,8 +342,6 @@ async def open_positions(
 | 
			
		||||
            "timeInForce": "GTC",
 | 
			
		||||
            "positionIdx": 0,
 | 
			
		||||
            "tpslMode": "Full",
 | 
			
		||||
            "takeProfit": str(take_profit_price) if take_profit_price else None,
 | 
			
		||||
            "stopLoss": str(stop_loss_price) if stop_loss_price else None,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        response = client.place_order(**order_params)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user