forked from kodorvan/stcs
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