Add explicit trade sizing
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user