nautechsystems/nautilus_trader · error

Kraken Spot trailing stops do not support activation trigger

Error message

Kraken Spot trailing stops do not support activation trigger prices

What it means

Kraken Spot trailing-stop orders (TrailingStopMarket / TrailingStopLimit) define their activation level via a trailing offset only. The adapter rejects any request that also supplies an activation trigger price, because Kraken's spot API has no field for it and silently ignoring it would change order semantics.

Source

Thrown at crates/adapters/kraken/src/http/spot/client.rs:3082

        let is_conditional = matches!(
            order_type,
            OrderType::StopMarket
                | OrderType::StopLimit
                | OrderType::MarketIfTouched
                | OrderType::LimitIfTouched
                | OrderType::TrailingStopMarket
                | OrderType::TrailingStopLimit
        );

        let is_trailing = matches!(
            order_type,
            OrderType::TrailingStopMarket | OrderType::TrailingStopLimit
        );

        if is_trailing {
            if trigger_price.is_some() {
                anyhow::bail!(
                    "Kraken Spot trailing stops do not support activation trigger prices"
                );
            }

            if let Some(offset) = trailing_offset {
                builder.price(offset.to_string());
            }

            if let Some(offset) = limit_offset {
                builder.price2(offset.to_string());
            }
        } else if is_conditional {
            if let Some(trigger) = trigger_price {
                builder.price(trigger.to_string());
            }

            if let Some(limit) = price {
                builder.price2(limit.to_string());

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Remove trigger_price from the request and supply trailing_offset instead, which Kraken uses as the activation distance.
  2. If an exact activation price is required, use a regular StopMarket/StopLimit order with trigger_price instead of a trailing-stop order type.
  3. Wrap order construction in a venue-specific validation that clears trigger_price for trailing order types before calling the Kraken adapter.

Example fix

// before
submit(OrderType::TrailingStopMarket, trigger_price: Some(price), trailing_offset: Some(offset))
// after
submit(OrderType::TrailingStopMarket, trigger_price: None, trailing_offset: Some(offset))
Defensive patterns

Strategy: validation

Validate before calling

if matches!(order_type, OrderType::TrailingStopMarket | OrderType::TrailingStopLimit) && trigger_price.is_some() {
    return Err("Kraken Spot trailing stops use trailing_offset, not trigger_price");
}

Try / catch

match client.submit_order(req) {
    Err(e) if e.to_string().contains("activation trigger prices") => {
        // rebuild request without trigger_price and retry
    }
    result => result?,
}

Prevention

When it happens

Trigger: Submitting a TrailingStopMarket or TrailingStopLimit order via the Kraken Spot HTTP client with trigger_price set to Some(...) while a trailing_offset is intended to define activation.

Common situations: Porting strategy code from futures or other spot exchanges where stop orders always take an explicit trigger price; copying a generic order-request builder that populates trigger_price for all stop-order types.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/3b8823567522f118. Report an issue: GitHub.