feat: 持仓快照盈亏比与交易所止损已保本标识
盈亏比固定用开仓 initial_stop_loss 计算,人工改委托后不变化;轮询交易所止损触发价相对成交价判定已保本,四所实例与中控统一显示绿色标识。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user