nautechsystems/nautilus_trader · error
Unsupported order type: {order_type:?}
Error message
Unsupported order type: {order_type:?} What it means
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.
Source
Thrown at crates/adapters/kraken/src/http/spot/client.rs:3029
let raw_symbol = instrument.raw_symbol().inner();
let asset_class = Self::asset_class_for(&instrument);
let kraken_side = match order_side {
OrderSide::Buy => KrakenOrderSide::Buy,
OrderSide::Sell => KrakenOrderSide::Sell,
};
let kraken_order_type = match order_type {
OrderType::Market => KrakenOrderType::Market,
OrderType::Limit => KrakenOrderType::Limit,
OrderType::StopMarket => KrakenOrderType::StopLoss,
OrderType::StopLimit => KrakenOrderType::StopLossLimit,
OrderType::MarketIfTouched => KrakenOrderType::TakeProfit,
OrderType::LimitIfTouched => KrakenOrderType::TakeProfitLimit,
OrderType::TrailingStopMarket => KrakenOrderType::TrailingStop,
OrderType::TrailingStopLimit => KrakenOrderType::TrailingStopLimit,
_ => anyhow::bail!("Unsupported order type: {order_type:?}"),
};
let mut oflags = Vec::new();
let is_limit_order = matches!(
order_type,
OrderType::Limit
| OrderType::StopLimit
| OrderType::LimitIfTouched
| OrderType::TrailingStopLimit
);
if time_in_force == TimeInForce::Fok && order_type != OrderType::Limit {
anyhow::bail!("FOK time in force only supported for LIMIT orders on Kraken Spot");
}
let (timeinforce, expiretm) =
compute_time_in_force(is_limit_order, time_in_force, expire_time)?;
View on GitHub (pinned to 18893faf8b)
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.
Example fix
// before let order = order_factory.limit_on_close(instrument_id, side, qty, price, time_in_force); // after let order = order_factory.limit(instrument_id, side, qty, price, time_in_force);
Defensive patterns
Strategy: validation
Validate before calling
use nautilus_model::enums::OrderType;
fn is_kraken_spot_order_type(t: &OrderType) -> bool {
matches!(t, OrderType::Limit | OrderType::Market | OrderType::StopMarket | OrderType::StopLimit
| OrderType::MarketIfTouched | OrderType::LimitIfTouched
| OrderType::TrailingStopMarket | OrderType::TrailingStopLimit)
} Type guard
fn supported_on_kraken_spot(t: &OrderType) -> bool {
!matches!(t, OrderType::LimitOnClose | OrderType::MarketToLimit)
} Try / catch
if !is_kraken_spot_order_type(&order.order_type()) {
return Err(format!("order type {:?} not supported on Kraken Spot", order.order_type()));
}
client.submit_order(order).await?; Prevention
- 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
When it happens
Trigger: Submitting an order with OrderType variants outside the explicitly mapped set — e.g. OrderType::LimitIfTouched, MarketToLimit, or LimitOnClose — via the spot submit path.
Common situations: 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.
Related errors
- AX does not support reduce-only orders
- Architect AX adapter cannot encode quote_quantity; submit a
- Architect AX adapter cannot encode display_qty iceberg instr
- unsupported order type for Bybit: {order_type}
- Unsupported order type for Hyperliquid: {order_type:?}
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/384eda120dbea00a.
Report an issue: GitHub.