feat: 持仓快照盈亏比与交易所止损已保本标识

盈亏比固定用开仓 initial_stop_loss 计算,人工改委托后不变化;轮询交易所止损触发价相对成交价判定已保本,四所实例与中控统一显示绿色标识。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-03 16:31:03 +08:00
parent e265c1b31a
commit cf3e2ee1c9
13 changed files with 486 additions and 52 deletions
+50
View File
@@ -0,0 +1,50 @@
from order_monitor_display_lib import (
is_sl_breakeven_secured,
sl_breakeven_from_exchange_tpsl,
snapshot_rr,
snapshot_stop_loss,
)
def _calc_rr(direction, entry, sl, tp):
if direction == "long":
risk = entry - sl
reward = tp - entry
else:
risk = sl - entry
reward = entry - tp
if risk <= 0 or reward <= 0:
return None
return round(reward / risk, 4)
def test_snapshot_stop_loss_prefers_initial():
assert snapshot_stop_loss(2.45, 2.6) == 2.45
assert snapshot_stop_loss(None, 2.6) == 2.6
def test_snapshot_rr_ignores_current_stop_after_manual_move():
rr = snapshot_rr(_calc_rr, "long", 2.726, 2.45, 2.65, 3.3)
assert rr is not None
assert rr > 2.0
def test_breakeven_long():
assert is_sl_breakeven_secured("long", 2.726, 2.726) is True
assert is_sl_breakeven_secured("long", 2.726, 2.75) is True
assert is_sl_breakeven_secured("long", 2.726, 2.45) is False
def test_breakeven_short():
assert is_sl_breakeven_secured("short", 72.73, 72.73) is True
assert is_sl_breakeven_secured("short", 72.73, 72.0) is True
assert is_sl_breakeven_secured("short", 72.73, 74.0) is False
def test_sl_breakeven_from_exchange_tpsl():
ok = sl_breakeven_from_exchange_tpsl(
"long",
2.726,
{"sl": {"trigger_price": 2.735}, "tp": {"trigger_price": 3.3}},
)
assert ok is True