Fix breakeven badge still showing after roll lowers stop loss.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-10 16:52:29 +08:00
parent edfe935fb4
commit 02472f19cb
10 changed files with 161 additions and 17 deletions
+30 -1
View File
@@ -5,10 +5,12 @@ from lib.trade.order_monitor_display_lib import (
is_sl_breakeven_secured,
monitor_open_stop_loss,
order_monitor_tpsl_needs_sync,
resolve_breakeven_entry_price,
resolve_live_tpsl_prices,
sl_breakeven_from_exchange_tpsl,
snapshot_rr,
snapshot_stop_loss,
stale_breakeven_armed,
)
@@ -106,7 +108,7 @@ def test_apply_order_price_display_fields_live_sl():
)
assert payload["stop_loss"] == 1661
assert payload["stop_loss_display"] == "1661.00"
assert payload["sl_breakeven_secured"] is True
assert payload["sl_breakeven_secured"] is False
assert payload["rr_ratio"] is not None
assert payload["latest_risk_amount"] is not None
assert payload["latest_risk_amount"] >= 0
@@ -149,3 +151,30 @@ def test_calc_latest_risk_amount_long():
def test_calc_latest_risk_amount_profit_side_stop():
risk = calc_latest_risk_amount("long", 100, 101, exchange_notional=1000)
assert risk == 0.0
def test_resolve_breakeven_entry_price_prefers_avg():
assert resolve_breakeven_entry_price(1777.39, 1777.2) == 1777.2
assert resolve_breakeven_entry_price(1777.39, None) == 1777.39
def test_roll_long_not_breakeven_with_avg_entry():
payload = {}
apply_order_price_display_fields(
payload,
direction="long",
entry_price=1777.39,
initial_stop_loss=1750,
stop_loss=1767,
take_profit=1833,
calc_rr_ratio_fn=_calc_rr,
exchange_tpsl={"sl": {"trigger_price": 1767}, "tp": {"trigger_price": 1833}},
avg_entry_price=1777.2,
)
assert payload["sl_breakeven_secured"] is False
def test_stale_breakeven_armed_after_roll_down():
assert stale_breakeven_armed("long", 1777.39, 1767, 1) is True
assert stale_breakeven_armed("long", 1777.39, 1778, 1) is False
assert stale_breakeven_armed("long", 1777.39, 1767, 0) is False