Add explicit trade sizing

This commit is contained in:
Azimkin
2026-09-22 14:15:00 +02:00
parent 7b632c9640
commit c9d197031e
8 changed files with 213 additions and 20 deletions

View File

@@ -59,6 +59,42 @@ def test_existing_exposure_does_not_cap_position(engine, rules):
assert result.notional == Decimal(30000)
def test_explicit_quote_notional_sizes_order(engine, account, rules):
result = engine.validate_open(request(), account, rules, quote_notional=Decimal("5000"))
assert result.quantity == Decimal(50)
assert result.notional == Decimal(5000)
def test_available_balance_percent_sizes_margin_before_leverage(engine, account, rules):
result = engine.validate_open(
request(), account, rules, available_balance_percent=Decimal("25")
)
assert result.quantity == Decimal(75)
assert result.notional == Decimal(7500)
@pytest.mark.parametrize(
"quote_notional, available_balance_percent, message",
[
(Decimal("1"), Decimal("50"), "either"),
(Decimal("0"), None, "quote_notional"),
(None, Decimal("101"), "available_balance_percent"),
(Decimal("30001"), None, "exceeds available buying power"),
],
)
def test_rejects_invalid_explicit_sizing(
engine, account, rules, quote_notional, available_balance_percent, message
):
with pytest.raises(OrderRejected, match=message):
engine.validate_open(
request(),
account,
rules,
quote_notional=quote_notional,
available_balance_percent=available_balance_percent,
)
def test_minimum_quantity_error_reports_sizing_inputs(engine, rules):
empty_account = AccountSnapshot(Decimal(10000), Decimal(0), Decimal(0), 0)