{"record":{"id":"40f3058c84fd43ef","repo":"nautechsystems/nautilus_trader","slug":"order-in-list-denied-invalid-status-for-expec","errorCode":null,"errorMessage":"Order in list denied: invalid status for {}, expected INITIALIZED","messagePattern":"Order in list denied: invalid status for (.+?), expected INITIALIZED","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/trading/src/strategy/mod.rs","lineNumber":211,"sourceCode":"    /// or order list submission fails.\n    fn submit_order_list(\n        &mut self,\n        mut orders: Vec<OrderAny>,\n        position_id: Option<PositionId>,\n        client_id: Option<ClientId>,\n        params: Option<Params>,\n    ) -> anyhow::Result<()>\n    where\n        Self: StrategyNative,\n    {\n        if orders.is_empty() {\n            log::error!(\"OrderList denied: no orders to submit\");\n            anyhow::bail!(\"OrderList denied: no orders to submit\");\n        }\n\n        for order in &orders {\n            if order.status() != OrderStatus::Initialized {\n                anyhow::bail!(\n                    \"Order in list denied: invalid status for {}, expected INITIALIZED\",\n                    order.client_order_id()\n                );\n            }\n        }\n\n        let first_venue = orders[0].instrument_id().venue;\n        for order in &orders {\n            if order.instrument_id().venue != first_venue {\n                anyhow::bail!(\n                    \"OrderList denied: orders must share the same venue; \\\n                     expected {first_venue}, found {} on {}\",\n                    order.instrument_id().venue,\n                    order.client_order_id(),\n                );\n            }\n        }\n","sourceCodeStart":193,"sourceCodeEnd":229,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/trading/src/strategy/mod.rs#L193-L229","documentation":"Every order in a submitted list must be in OrderStatus::Initialized. If any order in the list has already transitioned (submitted, accepted, modified, etc.), submit_order_list bails naming the offending client_order_id, since a list submit would resend a live/stale order.","triggerScenarios":"Passing an order that was already submitted (or whose submit failed midway and is being retried) inside the orders vector; mixing freshly created orders with previously submitted ones in one list.","commonSituations":"Retry logic that resubmits the same order objects after a transient error; caching order objects across on_start invocations; replaying a batch that includes live orders.","solutions":["Filter the list to orders with status INITIALIZED before submitting.","Create fresh orders via the order factory for retries instead of reusing submitted objects.","Track which orders were already submitted and exclude them from subsequent lists."],"exampleFix":"// before\nself.submit_order_list(OrderList(orders))\n\n// after\nfresh = [o for o in orders if o.status == OrderStatus.INITIALIZED]\nif fresh:\n    self.submit_order_list(OrderList(fresh))","handlingStrategy":"validation","validationCode":"fresh = [o for o in orders if o.status == OrderStatus.INITIALIZED]\nif len(fresh) != len(orders):\n    self.log.warning(f\"dropping {len(orders) - len(fresh)} non-INITIALIZED orders from list\")","typeGuard":"def all_initialized(orders) -> bool:\n    return all(o.status == OrderStatus.INITIALIZED for o in orders)","tryCatchPattern":"try:\n    self.submit_order_list(order_list)\nexcept RuntimeError as e:\n    if \"invalid status\" in str(e):\n        self.log.error(f\"order list contained submitted orders: {e}\")\n    else:\n        raise","preventionTips":["Never reuse order objects after submission; create new ones via the order factory for retries","Filter batches by status == INITIALIZED immediately before submitting","Do not cache order objects across strategy restarts or on_start invocations"],"tags":["rust","strategy","order-lifecycle","order-status"],"backgroundTag":"invalid-state-transition","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}