Fix breakeven badge still showing after roll lowers stop loss.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -93,6 +93,25 @@ def tpsl_update_passes_rr_gate(
|
||||
return False, f"计划盈亏比 {rr_txt}:1 低于最低要求 {min_rr}:1(盈利侧保本止损不受此限)"
|
||||
|
||||
|
||||
def resolve_breakeven_entry_price(entry_price: Any, avg_entry_price: Any = None) -> Optional[float]:
|
||||
"""保本判断基准价:有持仓加权均价时优先(滚仓后),否则用首仓成交价."""
|
||||
avg = _positive_float(avg_entry_price)
|
||||
if avg is not None:
|
||||
return avg
|
||||
return _positive_float(entry_price)
|
||||
|
||||
|
||||
def stale_breakeven_armed(direction: str, entry_price: Any, stop_loss: Any, breakeven_armed: Any) -> bool:
|
||||
"""止损已回到亏损侧时 breakeven_armed 视为过期(如滚仓下移止损)."""
|
||||
try:
|
||||
armed = int(breakeven_armed or 0) != 0
|
||||
except (TypeError, ValueError):
|
||||
return False
|
||||
if not armed:
|
||||
return False
|
||||
return not stop_is_profit_protecting(direction, entry_price, stop_loss)
|
||||
|
||||
|
||||
def is_sl_breakeven_secured(direction: str, entry_price: Any, exchange_sl_price: Any) -> bool:
|
||||
"""
|
||||
交易所当前止损相对开仓成交价是否已保本.
|
||||
@@ -290,8 +309,10 @@ def apply_order_price_display_fields(
|
||||
stop_loss,
|
||||
take_profit,
|
||||
)
|
||||
risk_entry = resolve_breakeven_entry_price(entry_price, avg_entry_price)
|
||||
payload["avg_entry_price"] = risk_entry
|
||||
payload["sl_breakeven_secured"] = sl_breakeven_from_exchange_tpsl(
|
||||
direction, entry_price, exchange_tpsl
|
||||
direction, risk_entry, exchange_tpsl
|
||||
)
|
||||
payload["stop_loss"] = disp_sl
|
||||
payload["take_profit"] = disp_tp
|
||||
@@ -310,7 +331,6 @@ def apply_order_price_display_fields(
|
||||
payload["contracts"] = c
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
risk_entry = _positive_float(avg_entry_price) or _positive_float(entry_price)
|
||||
payload["latest_risk_amount"] = calc_latest_risk_amount(
|
||||
direction,
|
||||
risk_entry,
|
||||
|
||||
Reference in New Issue
Block a user