Skip to content

Commit c3ae952

Browse files
committed
Treat pending paper liquidation orders as submitted
1 parent d262da9 commit c3ae952

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

application/paper_liquidation_service.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66
from typing import Any
77

88

9+
ACCEPTED_ORDER_STATUSES = {
10+
"PendingSubmit",
11+
"ApiPending",
12+
"ApiPendingSubmit",
13+
"Submitted",
14+
"PreSubmitted",
15+
"Filled",
16+
"PartiallyFilled",
17+
"Partial",
18+
}
19+
20+
921
def _position_symbol(position: Any, *, fallback: str | None = None) -> str:
1022
if isinstance(position, dict):
1123
return str(position.get("symbol") or fallback or "").strip().upper()
@@ -88,7 +100,7 @@ def execute_paper_liquidation(
88100
report = submit_order_intent(ib, intent)
89101
payload = _report_to_dict(report)
90102
status = str(payload.get("status") or "")
91-
if status in {"Submitted", "PreSubmitted", "Filled", "PartiallyFilled", "Partial"}:
103+
if status in ACCEPTED_ORDER_STATUSES:
92104
summary["orders_submitted"].append(payload)
93105
else:
94106
summary["orders_skipped"].append({**payload, "reason": status or "submit_failed"})

tests/test_paper_liquidation_service.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,26 @@ def submit(_ib, intent):
9090
assert [(intent.symbol, intent.side, intent.quantity) for intent in submitted] == [("AAPL", "sell", 3)]
9191
assert summary["execution_status"] == "submitted"
9292
assert summary["orders_submitted"][0]["symbol"] == "AAPL"
93+
94+
95+
def test_execute_paper_liquidation_treats_pending_submit_as_submitted():
96+
def submit(_ib, intent):
97+
return SimpleNamespace(
98+
symbol=intent.symbol,
99+
side=intent.side,
100+
quantity=intent.quantity,
101+
status="PendingSubmit",
102+
broker_order_id="1",
103+
)
104+
105+
summary = execute_paper_liquidation(
106+
object(),
107+
{"AAPL": {"symbol": "AAPL", "quantity": 3}},
108+
submit_order_intent=submit,
109+
order_intent_cls=OrderIntent,
110+
dry_run_only=False,
111+
)
112+
113+
assert summary["execution_status"] == "submitted"
114+
assert summary["orders_submitted"][0]["status"] == "PendingSubmit"
115+
assert summary["orders_skipped"] == []

0 commit comments

Comments
 (0)