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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user