{"record":{"id":"384eda120dbea00a","repo":"nautechsystems/nautilus_trader","slug":"unsupported-order-type-order-type-384eda","errorCode":null,"errorMessage":"Unsupported order type: {order_type:?}","messagePattern":"Unsupported order type: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/kraken/src/http/spot/client.rs","lineNumber":3029,"sourceCode":"\n        let raw_symbol = instrument.raw_symbol().inner();\n        let asset_class = Self::asset_class_for(&instrument);\n\n        let kraken_side = match order_side {\n            OrderSide::Buy => KrakenOrderSide::Buy,\n            OrderSide::Sell => KrakenOrderSide::Sell,\n        };\n\n        let kraken_order_type = match order_type {\n            OrderType::Market => KrakenOrderType::Market,\n            OrderType::Limit => KrakenOrderType::Limit,\n            OrderType::StopMarket => KrakenOrderType::StopLoss,\n            OrderType::StopLimit => KrakenOrderType::StopLossLimit,\n            OrderType::MarketIfTouched => KrakenOrderType::TakeProfit,\n            OrderType::LimitIfTouched => KrakenOrderType::TakeProfitLimit,\n            OrderType::TrailingStopMarket => KrakenOrderType::TrailingStop,\n            OrderType::TrailingStopLimit => KrakenOrderType::TrailingStopLimit,\n            _ => anyhow::bail!(\"Unsupported order type: {order_type:?}\"),\n        };\n\n        let mut oflags = Vec::new();\n        let is_limit_order = matches!(\n            order_type,\n            OrderType::Limit\n                | OrderType::StopLimit\n                | OrderType::LimitIfTouched\n                | OrderType::TrailingStopLimit\n        );\n\n        if time_in_force == TimeInForce::Fok && order_type != OrderType::Limit {\n            anyhow::bail!(\"FOK time in force only supported for LIMIT orders on Kraken Spot\");\n        }\n\n        let (timeinforce, expiretm) =\n            compute_time_in_force(is_limit_order, time_in_force, expire_time)?;\n","sourceCodeStart":3011,"sourceCodeEnd":3047,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/kraken/src/http/spot/client.rs#L3011-L3047","documentation":"Kraken Spot supports a limited set of order types (Limit, Market, StopLoss, StopLossLimit, TakeProfit, TakeProfitLimit, TrailingStop, TrailingStopLimit). The catch-all arm of the OrderType mapping bails for any other type (e.g. LimitOnClose, MarketToLimit) since there is no Kraken equivalent.","triggerScenarios":"Submitting an order with OrderType variants outside the explicitly mapped set — e.g. OrderType::LimitIfTouched, MarketToLimit, or LimitOnClose — via the spot submit path.","commonSituations":"Strategies ported from venues that support those order types; generic order factories emitting LOC/MIT types; missing feature gating so unsupported order types reach the Kraken adapter.","solutions":["Use a supported OrderType: Limit, Market, StopMarket, StopLimit, MarketIfTouched, LimitIfTouched, TrailingStopMarket, or TrailingStopLimit.","Emulate unsupported semantics with supported types (e.g. use StopMarket with triggers instead of LOC orders).","Gate strategy configuration to exclude Kraken Spot unsupported order types via supported_order_types on the venue/execution client."],"exampleFix":"// before\nlet order = order_factory.limit_on_close(instrument_id, side, qty, price, time_in_force);\n\n// after\nlet order = order_factory.limit(instrument_id, side, qty, price, time_in_force);","handlingStrategy":"validation","validationCode":"use nautilus_model::enums::OrderType;\nfn is_kraken_spot_order_type(t: &OrderType) -> bool {\n    matches!(t, OrderType::Limit | OrderType::Market | OrderType::StopMarket | OrderType::StopLimit\n        | OrderType::MarketIfTouched | OrderType::LimitIfTouched\n        | OrderType::TrailingStopMarket | OrderType::TrailingStopLimit)\n}","typeGuard":"fn supported_on_kraken_spot(t: &OrderType) -> bool {\n    !matches!(t, OrderType::LimitOnClose | OrderType::MarketToLimit)\n}","tryCatchPattern":"if !is_kraken_spot_order_type(&order.order_type()) {\n    return Err(format!(\"order type {:?} not supported on Kraken Spot\", order.order_type()));\n}\nclient.submit_order(order).await?;","preventionTips":["Set supported_order_types on the Kraken Spot execution client config","Restrict strategy order factories to venue-supported types","Emulate LOC/MIT semantics with supported stop/limit types when needed"],"tags":["order-type","unsupported-feature","kraken-spot","order-submission"],"backgroundTag":"unsupported-enum-value","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}