nautechsystems/nautilus_trader · error
Unsupported trigger type for Kraken Futures: {other:?} (only
Error message
Unsupported trigger type for Kraken Futures: {other:?} (only LastPrice, MarkPrice, and IndexPrice supported) What it means
Kraken Futures triggers only support LastPrice, MarkPrice, and IndexPrice signals. The adapter maps Nautilus TriggerType to KrakenTriggerSignal and bails for any other TriggerType variant (e.g. BidPrice, AskPrice, or conditional trigger types) rather than silently substituting.
Source
Thrown at crates/adapters/kraken/src/http/futures/client.rs:2712
| KrakenSendStatus::ReduceOnlyWouldIncreasePosition)
)
}
fn is_futures_modify_rejection(status: &str) -> bool {
status.parse::<KrakenSendStatus>().is_ok_and(|status| {
status == KrakenSendStatus::NotFound || is_futures_submit_rejection(status.as_ref())
})
}
fn map_futures_trigger_signal(
trigger_type: Option<TriggerType>,
) -> anyhow::Result<Option<KrakenTriggerSignal>> {
match trigger_type {
None => Ok(None),
Some(TriggerType::Default | TriggerType::LastPrice) => Ok(Some(KrakenTriggerSignal::Last)),
Some(TriggerType::MarkPrice) => Ok(Some(KrakenTriggerSignal::Mark)),
Some(TriggerType::IndexPrice) => Ok(Some(KrakenTriggerSignal::Index)),
Some(other) => anyhow::bail!(
"Unsupported trigger type for Kraken Futures: {other:?} (only LastPrice, MarkPrice, and IndexPrice supported)"
),
}
}
fn parse_multi_collateral_balances(account: &FuturesAccount, balances: &mut Vec<AccountBalance>) {
for (currency_code, currency_info) in &account.currencies {
if currency_info.quantity.is_zero() {
continue;
}
let currency = Currency::new(
currency_code.as_str(),
8,
0,
currency_code.as_str(),
CurrencyType::Crypto,
);View on GitHub (pinned to 18893faf8b)
Solutions
- Change the order's trigger type to MarkPrice (Kraken Futures default) or LastPrice/IndexPrice.
- Remove the explicit trigger_type so it defaults to Kraken's Last signal.
- If bid/ask triggering is required, implement trigger detection locally and submit plain orders when the condition is met.
Example fix
// before
let order = order_factory.stop_market(
..., TriggerType::BidPrice,
);
// after
let order = order_factory.stop_market(
..., TriggerType::MarkPrice,
); Defensive patterns
Strategy: validation
Validate before calling
use nautilus_model::enums::TriggerType;
const SUPPORTED: [TriggerType; 4] = [TriggerType::Default, TriggerType::LastPrice, TriggerType::MarkPrice, TriggerType::IndexPrice];
if let Some(t) = trigger_type {
if !SUPPORTED.contains(t) {
return Err(format!("trigger {t:?} unsupported on Kraken Futures"));
}
} Type guard
fn is_kraken_futures_trigger(t: &TriggerType) -> bool {
matches!(t, TriggerType::Default | TriggerType::LastPrice | TriggerType::MarkPrice | TriggerType::IndexPrice)
} Try / catch
match client.submit_order(order).await {
Err(e) if e.to_string().contains("Unsupported trigger type") => {
log::error!("use MarkPrice/LastPrice/IndexPrice triggers on Kraken Futures");
}
Err(e) => return Err(e),
Ok(r) => r,
} Prevention
- Restrict strategy templates to MarkPrice/LastPrice triggers for Kraken Futures
- Declare supported trigger types in venue/execution client configuration
- Never copy bid/ask trigger logic from spot or FX venue adapters
When it happens
Trigger: Submitting a stop/conditional order whose TriggerType is anything other than None, Default, LastPrice, MarkPrice, or IndexPrice — e.g. TriggerType::BidPrice or TriggerType::AskPrice from a strategy ported from another venue adapter.
Common situations: Strategies copied from FX/spot venues that use bid/ask triggers; configuration specifying conditional triggers Kraken Futures does not offer; cross-venue abstractions assuming all trigger types exist everywhere.
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 Hyperliquid: {order_type:?}
- No order, orderTrigger, or orderPriorExecution data in event
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/a07829371d6e7e0e.
Report an issue: GitHub.