{"record":{"id":"ac05f88e551870fc","repo":"nautechsystems/nautilus_trader","slug":"market-orders-on-betfair-are-only-supported-with-a","errorCode":null,"errorMessage":"Market orders on Betfair are only supported with AtTheClose time in force (BSP MarketOnClose)","messagePattern":"Market orders on Betfair are only supported with AtTheClose time in force \\(BSP MarketOnClose\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/betfair/src/execution.rs","lineNumber":1835,"sourceCode":"                        side,\n                        limit_order: Some(LimitOrder {\n                            size,\n                            price,\n                            persistence_type,\n                            time_in_force,\n                            min_fill_size,\n                            bet_target_type: None,\n                            bet_target_size: None,\n                        }),\n                        limit_on_close_order: None,\n                        market_on_close_order: None,\n                        customer_order_ref,\n                    }\n                }\n            }\n            OrderType::Market => {\n                if order.time_in_force() != TimeInForce::AtTheClose {\n                    anyhow::bail!(\n                        \"Market orders on Betfair are only supported with AtTheClose \\\n                         time in force (BSP MarketOnClose)\"\n                    );\n                }\n                PlaceInstruction {\n                    order_type: BetfairOrderType::MarketOnClose,\n                    selection_id,\n                    handicap: handicap_opt,\n                    side,\n                    limit_order: None,\n                    limit_on_close_order: None,\n                    market_on_close_order: Some(MarketOnCloseOrder { liability: size }),\n                    customer_order_ref,\n                }\n            }\n            other => {\n                anyhow::bail!(\"Unsupported order type for Betfair: {other:?}\");\n            }","sourceCodeStart":1817,"sourceCodeEnd":1853,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/a4b06ed870971b5671d12754ea138a3ab99b1dec/crates/adapters/betfair/src/execution.rs#L1817-L1853","documentation":"Betfair has no immediate market order that sweeps the book; the only market-style bet is the BSP (Betfair Starting Price) MarketOnClose bet accepted before the market closes. The adapter therefore accepts OrderType::Market only when time_in_force is AtTheClose, mapping it to a MarketOnCloseOrder whose liability equals the order quantity. Any other TIF on a market order is rejected locally before the request reaches Betfair.","triggerScenarios":"Submitting a Market order with the default GTC (or Day/IOC/FOK) time in force via submit_order; the check at execution.rs:1835 fails and the instruction is never built.","commonSituations":"Strategies reused from crypto/equity adapters where plain market orders work and backtests pass; forgetting Betfair's only 'market' semantics is BSP; submitting after the market has gone in-play where BSP is unavailable.","solutions":["Set .time_in_force(TimeInForce::AtTheClose) on the market order and treat its quantity as BSP liability.","For immediate execution, place a Limit order priced through the current best available level instead of a market order.","Gate market-order logic in shared strategy code when instrument_id.venue is BETFAIR."],"exampleFix":"// before\nlet order = factory.market(\n    instrument_id,\n    side,\n    qty,\n).build()?; // default TIF = GTC -> rejected\n\n// after\nlet order = factory.market(\n    instrument_id,\n    side,\n    qty,\n).time_in_force(TimeInForce::AtTheClose)\n    .build()?;","handlingStrategy":"validation","validationCode":"fn market_order_tif_ok(order: &OrderAny) -> bool {\n    order.order_type() != OrderType::Market\n        || order.time_in_force() == TimeInForce::AtTheClose\n}\n\nif !market_order_tif_ok(&order) {\n    log::error!(\"Market order {} needs AtTheClose TIF for Betfair BSP\", order.client_order_id());\n    return;\n}","typeGuard":"fn is_bsp_market_order(order: &OrderAny) -> bool {\n    order.order_type() == OrderType::Market\n        && order.time_in_force() == TimeInForce::AtTheClose\n}","tryCatchPattern":null,"preventionTips":["Wrap Betfair market-order creation in one helper that always sets AtTheClose.","Remember quantity on BSP orders is liability, not stake — size accordingly.","Keep venue-specific order builders instead of sharing one generic builder across venues."],"tags":["betfair","market-order","time-in-force","bsp"],"backgroundTag":"unsupported-order-type","analyzedSha":"a4b06ed870971b5671d12754ea138a3ab99b1dec","analyzedAt":"2026-08-16T22:54:50.089Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}