forked from kodorvan/stcs
Fixed the place for commission compensation
This commit is contained in:
@@ -39,7 +39,8 @@ async def start_trading_cycle(
|
|||||||
max_bets_in_series = additional_data.max_bets_in_series
|
max_bets_in_series = additional_data.max_bets_in_series
|
||||||
take_profit_percent = risk_management_data.take_profit_percent
|
take_profit_percent = risk_management_data.take_profit_percent
|
||||||
stop_loss_percent = risk_management_data.stop_loss_percent
|
stop_loss_percent = risk_management_data.stop_loss_percent
|
||||||
total_commission = 0
|
commission_fee = risk_management_data.commission_fee
|
||||||
|
commission_place = risk_management_data.commission_place
|
||||||
|
|
||||||
if trade_mode == "Switch":
|
if trade_mode == "Switch":
|
||||||
side = side
|
side = side
|
||||||
@@ -70,7 +71,6 @@ async def start_trading_cycle(
|
|||||||
leverage=leverage,
|
leverage=leverage,
|
||||||
take_profit_percent=take_profit_percent,
|
take_profit_percent=take_profit_percent,
|
||||||
stop_loss_percent=stop_loss_percent,
|
stop_loss_percent=stop_loss_percent,
|
||||||
commission_fee_percent=total_commission
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if res == "OK":
|
if res == "OK":
|
||||||
@@ -78,6 +78,7 @@ async def start_trading_cycle(
|
|||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
current_step=1,
|
current_step=1,
|
||||||
|
current_series=1,
|
||||||
trade_mode=trade_mode,
|
trade_mode=trade_mode,
|
||||||
side_mode=switch_side,
|
side_mode=switch_side,
|
||||||
margin_type=margin_type,
|
margin_type=margin_type,
|
||||||
@@ -88,7 +89,9 @@ async def start_trading_cycle(
|
|||||||
max_bets_in_series=max_bets_in_series,
|
max_bets_in_series=max_bets_in_series,
|
||||||
take_profit_percent=take_profit_percent,
|
take_profit_percent=take_profit_percent,
|
||||||
stop_loss_percent=stop_loss_percent,
|
stop_loss_percent=stop_loss_percent,
|
||||||
base_quantity=order_quantity
|
base_quantity=order_quantity,
|
||||||
|
commission_fee=commission_fee,
|
||||||
|
commission_place=commission_place
|
||||||
)
|
)
|
||||||
return "OK"
|
return "OK"
|
||||||
return (
|
return (
|
||||||
@@ -119,8 +122,6 @@ async def trading_cycle_profit(
|
|||||||
tg_id: int, symbol: str, side: str) -> str | None:
|
tg_id: int, symbol: str, side: str) -> str | None:
|
||||||
try:
|
try:
|
||||||
user_deals_data = await rq.get_user_deal_by_symbol(tg_id=tg_id, symbol=symbol)
|
user_deals_data = await rq.get_user_deal_by_symbol(tg_id=tg_id, symbol=symbol)
|
||||||
user_auto_trading_data = await rq.get_user_auto_trading(tg_id=tg_id, symbol=symbol)
|
|
||||||
total_fee = user_auto_trading_data.total_fee
|
|
||||||
trade_mode = user_deals_data.trade_mode
|
trade_mode = user_deals_data.trade_mode
|
||||||
margin_type = user_deals_data.margin_type
|
margin_type = user_deals_data.margin_type
|
||||||
leverage = user_deals_data.leverage
|
leverage = user_deals_data.leverage
|
||||||
@@ -131,6 +132,9 @@ async def trading_cycle_profit(
|
|||||||
martingale_factor = user_deals_data.martingale_factor
|
martingale_factor = user_deals_data.martingale_factor
|
||||||
side_mode = user_deals_data.side_mode
|
side_mode = user_deals_data.side_mode
|
||||||
base_quantity = user_deals_data.base_quantity
|
base_quantity = user_deals_data.base_quantity
|
||||||
|
current_series = user_deals_data.current_series
|
||||||
|
commission_fee = user_deals_data.commission_fee
|
||||||
|
commission_place = user_deals_data.commission_place
|
||||||
|
|
||||||
await set_margin_mode(tg_id=tg_id, margin_mode=margin_type)
|
await set_margin_mode(tg_id=tg_id, margin_mode=margin_type)
|
||||||
await set_leverage(
|
await set_leverage(
|
||||||
@@ -139,7 +143,6 @@ async def trading_cycle_profit(
|
|||||||
leverage=leverage,
|
leverage=leverage,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if trade_mode == "Switch":
|
if trade_mode == "Switch":
|
||||||
if side_mode == "Противоположно":
|
if side_mode == "Противоположно":
|
||||||
s_side = "Sell" if side == "Buy" else "Buy"
|
s_side = "Sell" if side == "Buy" else "Buy"
|
||||||
@@ -148,6 +151,8 @@ async def trading_cycle_profit(
|
|||||||
else:
|
else:
|
||||||
s_side = side
|
s_side = side
|
||||||
|
|
||||||
|
next_series = current_series + 1
|
||||||
|
|
||||||
res = await open_positions(
|
res = await open_positions(
|
||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
@@ -158,7 +163,6 @@ async def trading_cycle_profit(
|
|||||||
leverage=leverage,
|
leverage=leverage,
|
||||||
take_profit_percent=take_profit_percent,
|
take_profit_percent=take_profit_percent,
|
||||||
stop_loss_percent=stop_loss_percent,
|
stop_loss_percent=stop_loss_percent,
|
||||||
commission_fee_percent=total_fee
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if res == "OK":
|
if res == "OK":
|
||||||
@@ -166,6 +170,7 @@ async def trading_cycle_profit(
|
|||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
current_step=1,
|
current_step=1,
|
||||||
|
current_series=next_series,
|
||||||
trade_mode=trade_mode,
|
trade_mode=trade_mode,
|
||||||
side_mode=side_mode,
|
side_mode=side_mode,
|
||||||
margin_type=margin_type,
|
margin_type=margin_type,
|
||||||
@@ -176,7 +181,9 @@ async def trading_cycle_profit(
|
|||||||
max_bets_in_series=max_bets_in_series,
|
max_bets_in_series=max_bets_in_series,
|
||||||
take_profit_percent=take_profit_percent,
|
take_profit_percent=take_profit_percent,
|
||||||
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_place=commission_place
|
||||||
)
|
)
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|
||||||
@@ -202,8 +209,8 @@ async def trading_cycle(
|
|||||||
try:
|
try:
|
||||||
user_deals_data = await rq.get_user_deal_by_symbol(tg_id=tg_id, symbol=symbol)
|
user_deals_data = await rq.get_user_deal_by_symbol(tg_id=tg_id, symbol=symbol)
|
||||||
user_auto_trading_data = await rq.get_user_auto_trading(tg_id=tg_id, symbol=symbol)
|
user_auto_trading_data = await rq.get_user_auto_trading(tg_id=tg_id, symbol=symbol)
|
||||||
user_risk_management_data = await rq.get_user_risk_management(tg_id=tg_id)
|
commission_fee = user_deals_data.commission_fee
|
||||||
commission_fee = user_risk_management_data.commission_fee
|
commission_place = user_deals_data.commission_place
|
||||||
total_fee = user_auto_trading_data.total_fee
|
total_fee = user_auto_trading_data.total_fee
|
||||||
trade_mode = user_deals_data.trade_mode
|
trade_mode = user_deals_data.trade_mode
|
||||||
margin_type = user_deals_data.margin_type
|
margin_type = user_deals_data.margin_type
|
||||||
@@ -217,6 +224,7 @@ async def trading_cycle(
|
|||||||
order_quantity = user_deals_data.order_quantity
|
order_quantity = user_deals_data.order_quantity
|
||||||
base_quantity = user_deals_data.base_quantity
|
base_quantity = user_deals_data.base_quantity
|
||||||
side_mode = user_deals_data.side_mode
|
side_mode = user_deals_data.side_mode
|
||||||
|
current_series = user_deals_data.current_series
|
||||||
|
|
||||||
next_quantity = safe_float(order_quantity) * (
|
next_quantity = safe_float(order_quantity) * (
|
||||||
safe_float(martingale_factor)
|
safe_float(martingale_factor)
|
||||||
@@ -232,10 +240,10 @@ async def trading_cycle(
|
|||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
leverage=leverage,
|
leverage=leverage,
|
||||||
)
|
)
|
||||||
|
total_quantity = next_quantity
|
||||||
if commission_fee == "Yes_commission_fee":
|
if commission_fee == "Yes_commission_fee":
|
||||||
total_fee = total_fee
|
if commission_place == "Commission_for_qty":
|
||||||
else:
|
total_quantity = next_quantity + total_fee
|
||||||
total_fee = 0
|
|
||||||
|
|
||||||
if trade_mode == "Switch":
|
if trade_mode == "Switch":
|
||||||
if side == "Buy":
|
if side == "Buy":
|
||||||
@@ -249,13 +257,12 @@ async def trading_cycle(
|
|||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
side=r_side,
|
side=r_side,
|
||||||
order_quantity=next_quantity,
|
order_quantity=total_quantity,
|
||||||
trigger_price=trigger_price,
|
trigger_price=trigger_price,
|
||||||
margin_type=margin_type,
|
margin_type=margin_type,
|
||||||
leverage=leverage,
|
leverage=leverage,
|
||||||
take_profit_percent=take_profit_percent,
|
take_profit_percent=take_profit_percent,
|
||||||
stop_loss_percent=stop_loss_percent,
|
stop_loss_percent=stop_loss_percent,
|
||||||
commission_fee_percent=total_fee
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if res == "OK":
|
if res == "OK":
|
||||||
@@ -263,6 +270,7 @@ async def trading_cycle(
|
|||||||
tg_id=tg_id,
|
tg_id=tg_id,
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
current_step=current_step,
|
current_step=current_step,
|
||||||
|
current_series=current_series,
|
||||||
trade_mode=trade_mode,
|
trade_mode=trade_mode,
|
||||||
side_mode=side_mode,
|
side_mode=side_mode,
|
||||||
margin_type=margin_type,
|
margin_type=margin_type,
|
||||||
@@ -273,7 +281,9 @@ async def trading_cycle(
|
|||||||
max_bets_in_series=max_bets_in_series,
|
max_bets_in_series=max_bets_in_series,
|
||||||
take_profit_percent=take_profit_percent,
|
take_profit_percent=take_profit_percent,
|
||||||
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_place=commission_place
|
||||||
)
|
)
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|
||||||
@@ -303,11 +313,15 @@ async def open_positions(
|
|||||||
margin_type: str,
|
margin_type: str,
|
||||||
leverage: str,
|
leverage: str,
|
||||||
take_profit_percent: float,
|
take_profit_percent: float,
|
||||||
stop_loss_percent: float,
|
stop_loss_percent: float
|
||||||
commission_fee_percent: float
|
|
||||||
) -> str | None:
|
) -> str | None:
|
||||||
try:
|
try:
|
||||||
client = await get_bybit_client(tg_id=tg_id)
|
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)
|
get_ticker = await get_tickers(tg_id, symbol=symbol)
|
||||||
price_symbol = safe_float(get_ticker.get("lastPrice")) or 0
|
price_symbol = safe_float(get_ticker.get("lastPrice")) or 0
|
||||||
instruments_info = await get_instruments_info(tg_id=tg_id, symbol=symbol)
|
instruments_info = await get_instruments_info(tg_id=tg_id, symbol=symbol)
|
||||||
@@ -315,8 +329,8 @@ async def open_positions(
|
|||||||
qty_step = safe_float(qty_step_str)
|
qty_step = safe_float(qty_step_str)
|
||||||
qty = (safe_float(order_quantity) * safe_float(leverage)) / safe_float(price_symbol)
|
qty = (safe_float(order_quantity) * safe_float(leverage)) / safe_float(price_symbol)
|
||||||
decimals = abs(int(round(math.log10(qty_step))))
|
decimals = abs(int(round(math.log10(qty_step))))
|
||||||
qty_formatted = math.floor(qty / qty_step) * qty_step
|
qty_format = math.floor(qty / qty_step) * qty_step
|
||||||
qty_formatted = round(qty_formatted, decimals)
|
qty_formatted = round(qty_format, decimals)
|
||||||
|
|
||||||
if trigger_price > 0:
|
if trigger_price > 0:
|
||||||
po_trigger_price = str(trigger_price)
|
po_trigger_price = str(trigger_price)
|
||||||
@@ -330,23 +344,28 @@ async def open_positions(
|
|||||||
if qty_formatted <= 0:
|
if qty_formatted <= 0:
|
||||||
return "Order does not meet minimum order value"
|
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 margin_type == "ISOLATED_MARGIN":
|
||||||
if side == "Buy":
|
if side == "Buy":
|
||||||
take_profit_price = price_for_cals * (
|
take_profit_price = price_for_cals * (
|
||||||
1 + take_profit_percent / 100) + commission_fee_percent / qty_formatted
|
1 + take_profit_percent / 100) + total_commission
|
||||||
stop_loss_price = None
|
stop_loss_price = None
|
||||||
else:
|
else:
|
||||||
take_profit_price = price_for_cals * (
|
take_profit_price = price_for_cals * (
|
||||||
1 - take_profit_percent / 100) - commission_fee_percent / qty_formatted
|
1 - take_profit_percent / 100) - total_commission
|
||||||
stop_loss_price = None
|
stop_loss_price = None
|
||||||
else:
|
else:
|
||||||
if side == "Buy":
|
if side == "Buy":
|
||||||
take_profit_price = price_for_cals * (
|
take_profit_price = price_for_cals * (
|
||||||
1 + take_profit_percent / 100) + commission_fee_percent / qty_formatted
|
1 + take_profit_percent / 100) + total_commission
|
||||||
stop_loss_price = price_for_cals * (1 - stop_loss_percent / 100)
|
stop_loss_price = price_for_cals * (1 - stop_loss_percent / 100)
|
||||||
else:
|
else:
|
||||||
take_profit_price = price_for_cals * (
|
take_profit_price = price_for_cals * (
|
||||||
1 - take_profit_percent / 100) - commission_fee_percent / qty_formatted
|
1 - take_profit_percent / 100) - total_commission
|
||||||
stop_loss_price = price_for_cals * (1 + stop_loss_percent / 100)
|
stop_loss_price = price_for_cals * (1 + stop_loss_percent / 100)
|
||||||
|
|
||||||
take_profit_price = max(take_profit_price, 0)
|
take_profit_price = max(take_profit_price, 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user