nautechsystems/nautilus_trader · error

No result in ticker response

Error message

No result in ticker response

What it means

request_ticker requires a `result` payload from Deribit's public/ticker. The HTTP request succeeded but the JSON-RPC response contained no `result`, so no TickerData can be returned. Deribit typically omits `result` when it returns an error object instead.

Source

Thrown at crates/adapters/deribit/src/http/client.rs:1890

    /// Requests ticker data for a single instrument.
    ///
    /// Returns the `DeribitTicker` including its option-chain reference price.
    ///
    /// # Errors
    ///
    /// Returns an error if the request fails.
    pub async fn request_ticker(&self, instrument_name: &str) -> anyhow::Result<DeribitTicker> {
        let params = GetTickerParams {
            instrument_name: instrument_name.to_string(),
        };
        let response = self
            .inner
            .get_ticker(params)
            .await
            .map_err(|e| anyhow::anyhow!(e))?;
        response
            .result
            .ok_or_else(|| anyhow::anyhow!("No result in ticker response"))
    }

    /// Requests book summaries for a currency via `public/get_book_summary_by_currency`.
    ///
    /// Defaults to product kind `option`.
    /// Entries include mark/IV, bid-ask, volumes, and `underlying_price` (forward) when present.
    ///
    /// # Errors
    ///
    /// Returns an error if the request fails.
    pub async fn request_book_summaries(
        &self,
        currency: &str,
    ) -> anyhow::Result<Vec<DeribitBookSummaryRaw>> {
        self.request_book_summaries_kind(currency, Some("option"))
            .await
    }

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Validate the instrument_name against the current instrument list for the connected environment.
  2. Check the response `error` field/logs for the JSON-RPC error code and message.
  3. Regenerate/refresh the instrument universe periodically so delisted instruments are not requested.

Example fix

// before
response
    .result
    .ok_or_else(|| anyhow::anyhow!("No result in ticker response"))
// after
response.result.ok_or_else(|| {
    anyhow::anyhow!(
        "No result in ticker response for {instrument_name} (error: {:?})",
        response.error
    )
})
Defensive patterns

Strategy: validation

Validate before calling

// Verify instrument exists before requesting its ticker
let instruments = client.request_instruments(currency, kind).await?;
assert!(instruments.iter().any(|i| i.name == instrument_name));

Try / catch

match client.request_ticker(instrument).await {
    Ok(t) => handle(t),
    Err(e) if e.to_string().contains("No result in ticker response") => mark_instrument_unavailable(instrument),
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Calling request_ticker with an instrument_name the endpoint cannot resolve (typo, expired/delisted instrument, wrong kind), producing an error response with null/absent result.

Common situations: Querying an expired futures/options instrument, a typo'd instrument name, or using the test environment for an instrument that only exists in production.

Understand the failure class

Background: "empty response", "returned no data", "empty embeddings": what HTTP 200-with-empty-body errors mean across libraries — this error's family across 36 libraries.

Related errors


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