Deduct round-trip taker fees from estimated perp PnL.
Unify hub/instance TP profit, calc_pnl, and push/accounting to net of 0.05% per side; leave exchange floating PnL unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -143,8 +143,16 @@ def reward_at_tp_usdt(
|
||||
cs = float(contract_size or 1.0)
|
||||
direction = (direction or "long").strip().lower()
|
||||
if direction == "short":
|
||||
return (float(avg) - float(take_profit)) * float(qty) * cs
|
||||
return (float(take_profit) - float(avg)) * float(qty) * cs
|
||||
gross = (float(avg) - float(take_profit)) * float(qty) * cs
|
||||
else:
|
||||
gross = (float(take_profit) - float(avg)) * float(qty) * cs
|
||||
try:
|
||||
from lib.trade.trade_fee_lib import net_pnl_after_fee
|
||||
|
||||
net = net_pnl_after_fee(gross, avg, take_profit, qty, cs)
|
||||
return float(net) if net is not None else gross
|
||||
except Exception:
|
||||
return gross
|
||||
|
||||
|
||||
def roll_fib_trigger_crossed(
|
||||
|
||||
@@ -16,7 +16,7 @@ def reward_at_tp_usdt(
|
||||
*,
|
||||
contract_size: float = 1.0,
|
||||
) -> Optional[float]:
|
||||
"""与 strategy_roll_lib.preview_roll 一致:线性合约 U 本位盈利."""
|
||||
"""与 strategy_roll_lib.preview_roll 一致:线性合约 U 本位净盈利(扣双边 taker 费)."""
|
||||
try:
|
||||
avg = float(avg_entry)
|
||||
tp = float(take_profit)
|
||||
@@ -28,8 +28,16 @@ def reward_at_tp_usdt(
|
||||
return None
|
||||
direction = (direction or "long").strip().lower()
|
||||
if direction == "short":
|
||||
return (avg - tp) * q * cs
|
||||
return (tp - avg) * q * cs
|
||||
gross = (avg - tp) * q * cs
|
||||
else:
|
||||
gross = (tp - avg) * q * cs
|
||||
try:
|
||||
from lib.trade.trade_fee_lib import net_pnl_after_fee
|
||||
|
||||
net = net_pnl_after_fee(gross, avg, tp, q, cs)
|
||||
return net
|
||||
except Exception:
|
||||
return gross
|
||||
|
||||
|
||||
def leg_fill_price(leg: dict) -> Optional[float]:
|
||||
|
||||
@@ -306,13 +306,19 @@ def calc_tp_profit_usdt(
|
||||
contracts: float,
|
||||
contract_size: float = 1.0,
|
||||
) -> Optional[float]:
|
||||
"""到达止盈价时,按累计张数与加仓后均价的盈利 U."""
|
||||
"""到达止盈价时,按累计张数与加仓后均价的净盈利 U(扣双边 taker 费)."""
|
||||
try:
|
||||
from lib.hub.hub_position_metrics import estimate_linear_swap_upnl_usdt
|
||||
from lib.trade.trade_fee_lib import net_pnl_after_fee
|
||||
|
||||
return estimate_linear_swap_upnl_usdt(
|
||||
gross = estimate_linear_swap_upnl_usdt(
|
||||
direction, float(avg_entry), float(take_profit_price), float(contracts), float(contract_size)
|
||||
)
|
||||
if gross is None:
|
||||
return None
|
||||
return net_pnl_after_fee(
|
||||
gross, avg_entry, take_profit_price, contracts, contract_size
|
||||
)
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user