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
- Remove trigger_price from the request and supply trailing_offset instead, which Kraken uses as the activation distance.
- If an exact activation price is required, use a regular StopMarket/StopLimit order with trigger_price instead of a trailing-stop order type.
- 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
- Keep a venue-capability table that lists which order parameters each venue/order-type combination accepts.
- Never blanket-populate trigger_price for all stop-order types in shared order builders.
- Add unit tests covering every order type x parameter combination you submit to Kraken Spot.
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
- Unsupported trigger type for Kraken Spot: {other:?} (only La
- Unsupported time in force: {time_in_force:?}
- limit_price is required for order type {order_type:?}
- leverage requires spot_account_type=Margin (current: Cash)
- Leverage not supported for {raw_symbol} on {side_label} side
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/3b8823567522f118.
Report an issue: GitHub.