{"record":{"id":"a07829371d6e7e0e","repo":"nautechsystems/nautilus_trader","slug":"unsupported-trigger-type-for-kraken-futures-othe","errorCode":null,"errorMessage":"Unsupported trigger type for Kraken Futures: {other:?} (only LastPrice, MarkPrice, and IndexPrice supported)","messagePattern":"Unsupported trigger type for Kraken Futures: (.+?) \\(only LastPrice, MarkPrice, and IndexPrice supported\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/kraken/src/http/futures/client.rs","lineNumber":2712,"sourceCode":"            | KrakenSendStatus::ReduceOnlyWouldIncreasePosition)\n    )\n}\n\nfn is_futures_modify_rejection(status: &str) -> bool {\n    status.parse::<KrakenSendStatus>().is_ok_and(|status| {\n        status == KrakenSendStatus::NotFound || is_futures_submit_rejection(status.as_ref())\n    })\n}\n\nfn map_futures_trigger_signal(\n    trigger_type: Option<TriggerType>,\n) -> anyhow::Result<Option<KrakenTriggerSignal>> {\n    match trigger_type {\n        None => Ok(None),\n        Some(TriggerType::Default | TriggerType::LastPrice) => Ok(Some(KrakenTriggerSignal::Last)),\n        Some(TriggerType::MarkPrice) => Ok(Some(KrakenTriggerSignal::Mark)),\n        Some(TriggerType::IndexPrice) => Ok(Some(KrakenTriggerSignal::Index)),\n        Some(other) => anyhow::bail!(\n            \"Unsupported trigger type for Kraken Futures: {other:?} (only LastPrice, MarkPrice, and IndexPrice supported)\"\n        ),\n    }\n}\n\nfn parse_multi_collateral_balances(account: &FuturesAccount, balances: &mut Vec<AccountBalance>) {\n    for (currency_code, currency_info) in &account.currencies {\n        if currency_info.quantity.is_zero() {\n            continue;\n        }\n\n        let currency = Currency::new(\n            currency_code.as_str(),\n            8,\n            0,\n            currency_code.as_str(),\n            CurrencyType::Crypto,\n        );","sourceCodeStart":2694,"sourceCodeEnd":2730,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/kraken/src/http/futures/client.rs#L2694-L2730","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nlet order = order_factory.stop_market(\n    ..., TriggerType::BidPrice,\n);\n\n// after\nlet order = order_factory.stop_market(\n    ..., TriggerType::MarkPrice,\n);","handlingStrategy":"validation","validationCode":"use nautilus_model::enums::TriggerType;\nconst SUPPORTED: [TriggerType; 4] = [TriggerType::Default, TriggerType::LastPrice, TriggerType::MarkPrice, TriggerType::IndexPrice];\nif let Some(t) = trigger_type {\n    if !SUPPORTED.contains(t) {\n        return Err(format!(\"trigger {t:?} unsupported on Kraken Futures\"));\n    }\n}","typeGuard":"fn is_kraken_futures_trigger(t: &TriggerType) -> bool {\n    matches!(t, TriggerType::Default | TriggerType::LastPrice | TriggerType::MarkPrice | TriggerType::IndexPrice)\n}","tryCatchPattern":"match client.submit_order(order).await {\n    Err(e) if e.to_string().contains(\"Unsupported trigger type\") => {\n        log::error!(\"use MarkPrice/LastPrice/IndexPrice triggers on Kraken Futures\");\n    }\n    Err(e) => return Err(e),\n    Ok(r) => r,\n}","preventionTips":["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"],"tags":["trigger-type","unsupported-feature","kraken-futures","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"}