Add dual exit modes: fixed USDT or premium multiple.

Net PnL (after estimated close fees) drives auto close; Plan/Settings expose the choice.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-25 09:17:50 +08:00
parent 9fd2a842af
commit cce26e87b5
13 changed files with 282 additions and 72 deletions
+37 -9
View File
@@ -28,19 +28,47 @@ def test_signal_equal() -> None:
assert decide(10.0, 10.0) is None
def test_exit_premium_and_move_pct() -> None:
def test_exit_fixed_and_premium_multiple() -> None:
fixed = check_exits(
net_pnl=15.0,
exit_mode="fixed_usdt",
net_profit_target=15,
premium_exit_multiple=1,
initial_premium=40,
)
assert fixed.reason == "fixed_usdt"
assert fixed.target == 15
assert (
check_exits(
perp_upl=50, initial_premium=40, move_pct=0.1, exit_move_pct=2
).reason
== "premium_cover"
net_pnl=14.9,
exit_mode="fixed_usdt",
net_profit_target=15,
premium_exit_multiple=1,
initial_premium=40,
).should_close
is False
)
assert (
check_exits(
perp_upl=1, initial_premium=40, move_pct=2.0, exit_move_pct=2
).reason
== "move_pct"
prem = check_exits(
net_pnl=40.0,
exit_mode="premium_multiple",
net_profit_target=15,
premium_exit_multiple=1,
initial_premium=40,
)
assert prem.reason == "premium_multiple"
assert prem.target == 40
half = check_exits(
net_pnl=20.0,
exit_mode="premium_multiple",
net_profit_target=15,
premium_exit_multiple=0.5,
initial_premium=40,
)
assert half.should_close is True
assert half.target == 20
def test_perp_pricing() -> None: