nautechsystems/nautilus_trader · error
FOK not supported by Kraken Futures, use IOC instead
Error message
FOK not supported by Kraken Futures, use IOC instead
What it means
Kraken Futures does not support Fill-or-Kill time in force for limit orders. build_send_order_params explicitly rejects TimeInForce::Fok with this message, advising IOC as the closest supported alternative.
Source
Thrown at crates/adapters/kraken/src/http/futures/client.rs:1951
let raw_symbol = instrument.raw_symbol().inner();
// Map order type and time-in-force to Kraken order type
// Kraken Futures encodes TIF in the orderType field:
// - lmt = limit (GTC)
// - ioc = immediate-or-cancel
// - post = post-only (maker only)
// - mkt = market
let kraken_order_type = match order_type {
OrderType::Market => KrakenFuturesOrderType::Market,
OrderType::Limit => {
if post_only {
KrakenFuturesOrderType::Post
} else {
match time_in_force {
TimeInForce::Ioc => KrakenFuturesOrderType::Ioc,
TimeInForce::Fok => {
anyhow::bail!("FOK not supported by Kraken Futures, use IOC instead")
}
TimeInForce::Gtd => {
anyhow::bail!("GTD not supported by Kraken Futures, use GTC instead")
}
_ => KrakenFuturesOrderType::Limit, // GTC is default
}
}
}
OrderType::StopMarket | OrderType::StopLimit => KrakenFuturesOrderType::Stop,
OrderType::MarketIfTouched | OrderType::LimitIfTouched => {
KrakenFuturesOrderType::TakeProfit
}
_ => anyhow::bail!("Unsupported order type: {order_type:?}"),
};
let kraken_side = KrakenOrderSide::from(order_side);
let mut builder = KrakenFuturesSendOrderParamsBuilder::default();View on GitHub (pinned to 18893faf8b)
Solutions
- Change the order's time_in_force to Ioc.
- Use Gtc if immediate-or-cancel semantics are not strictly required.
- Adjust strategy config so FOK is never emitted for the Kraken Futures venue.
Example fix
// before builder.time_in_force(TimeInForce::Fok) // after builder.time_in_force(TimeInForce::Ioc)
Defensive patterns
Strategy: validation
Validate before calling
fn tif_futures_supported(tif: TimeInForce) -> bool {
!matches!(tif, TimeInForce::Fok | TimeInForce::Gtd)
} Prevention
- Map FOK to IOC in a venue-specific order translator before submission.
- Keep per-venue TIF whitelist in strategy config.
- Test order emitters against Kraken Futures TIF rules in a staging run.
When it happens
Trigger: Submitting a Limit order via submit_order/send_order_batches with time_in_force = Fok on the Kraken Futures adapter.
Common situations: Reusing order parameters tuned for other venues (e.g. FOK-heavy strategies from Binance/Coinbase) against Kraken Futures; strategy config defaulting to FOK.
Related errors
- GTD not supported by Kraken Futures, use GTC instead
- Unsupported order type: {order_type:?}
- Market orders on Betfair are only supported with AtTheClose
- GTD time in force is not supported for BitMEX order submit;
- Unsupported time_in_force {other:?} for Deribit
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/524ba31b37a5422c.
Report an issue: GitHub.