Futures

get_all_future_contracts

Signature


pub async fn get_all_future_contracts( &self, req: AllFutureContractsRequest, ) -> Result<Vec<FutureContractInfo>, TigerError>

Description

Filter by type/exchange.

Parameters

ParameterRust typeRequirementSDK default
req.contract_typeOption<String>Conditional: at least one of contract_type / exchangeNone (omitted)
req.exchangeOption<String>Conditional: at least one of contract_type / exchangeNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureContractInfo>, TigerError>. continuous: bool, trade: bool, r#type: String, contract_code: String, ib_code: String, name: String, contract_month: String, last_trading_date: String, first_notice_date: String, last_bidding_close_time: i64, currency: String, exchange_code: String, multiplier: f64, min_tick: f64, display_multiplier: f64, exchange: String, product_worth: String, delivery_mode: String, product_type: String, product_scale: String, last_trading_timestamp: i64.

Contracts.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_all_future_contracts(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_all_future_contracts(AllFutureContractsRequest { contract_type: Some("ES".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "continuous": false,
    "trade": true,
    "type": "FUT",
    "contract_code": "ES2509",
    "ib_code": "ES",
    "name": "E-mini S&P 500",
    "contract_month": "202509",
    "last_trading_date": "2025-09-19"
  }
]


get_current_future_contract

Signature


pub async fn get_current_future_contract( &self, req: FutureContractSingleRequest, ) -> Result<Option<FutureContractInfo>, TigerError>

Description

Current main contract, normally by type.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codeOption<String>Conditional: at least one of contract_code / contract_typeNone (omitted)
req.contract_typeOption<String>Conditional: at least one of contract_code / contract_typeNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Option<FutureContractInfo>, TigerError>. continuous: bool, trade: bool, r#type: String, contract_code: String, ib_code: String, name: String, contract_month: String, last_trading_date: String, first_notice_date: String, last_bidding_close_time: i64, currency: String, exchange_code: String, multiplier: f64, min_tick: f64, display_multiplier: f64, exchange: String, product_worth: String, delivery_mode: String, product_type: String, product_scale: String, last_trading_timestamp: i64.

Optional contract.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_current_future_contract(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_current_future_contract(FutureContractSingleRequest { contract_code: Some("ES2609".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

{
  "continuous": false,
  "trade": true,
  "type": "FUT",
  "contract_code": "ES2509",
  "ib_code": "ES",
  "name": "E-mini S&P 500",
  "contract_month": "202509",
  "last_trading_date": "2025-09-19"
}

get_future_continuous_contracts

Signature


pub async fn get_future_continuous_contracts( &self, req: FutureContinuousContractsRequest, ) -> Result<Vec<FutureContractInfo>, TigerError>

Description

contract_type required.

Parameters

ParameterRust typeRequirementSDK default
req.contract_typeOption<String>OptionalNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureContractInfo>, TigerError>. continuous: bool, trade: bool, r#type: String, contract_code: String, ib_code: String, name: String, contract_month: String, last_trading_date: String, first_notice_date: String, last_bidding_close_time: i64, currency: String, exchange_code: String, multiplier: f64, min_tick: f64, display_multiplier: f64, exchange: String, product_worth: String, delivery_mode: String, product_type: String, product_scale: String, last_trading_timestamp: i64.

Continuous contracts.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_continuous_contracts(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_continuous_contracts(FutureContinuousContractsRequest { contract_type: Some("ES".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "continuous": false,
    "trade": true,
    "type": "FUT",
    "contract_code": "ES2509",
    "ib_code": "ES",
    "name": "E-mini S&P 500",
    "contract_month": "202509",
    "last_trading_date": "2025-09-19"
  }
]

get_future_contract

Signature


pub async fn get_future_contract( &self, req: FutureContractSingleRequest, ) -> Result<Vec<FutureContractInfo>, TigerError>

Description

Query by contract code or type; normalizes object to Vec.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codeOption<String>Conditional: at least one of contract_code / contract_typeNone (omitted)
req.contract_typeOption<String>Conditional: at least one of contract_code / contract_typeNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureContractInfo>, TigerError>. continuous: bool, trade: bool, r#type: String, contract_code: String, ib_code: String, name: String, contract_month: String, last_trading_date: String, first_notice_date: String, last_bidding_close_time: i64, currency: String, exchange_code: String, multiplier: f64, min_tick: f64, display_multiplier: f64, exchange: String, product_worth: String, delivery_mode: String, product_type: String, product_scale: String, last_trading_timestamp: i64.

Contracts.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_contract(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_contract(FutureContractSingleRequest { contract_code: Some("ES2609".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "continuous": false,
    "trade": true,
    "type": "FUT",
    "contract_code": "ES2509",
    "ib_code": "ES",
    "name": "E-mini S&P 500",
    "contract_month": "202509",
    "last_trading_date": "2025-09-19"
  }
]

get_future_contracts

Signature


pub async fn get_future_contracts( &self, exchange_code: &str, ) -> Result<Vec<FutureContractInfo>, TigerError>

Description

Exchange code required.

Parameters

ParameterRust typeRequirementSDK default
exchange_code&strRequiredNone

Return

  • QuoteClient: Result<Vec<FutureContractInfo>, TigerError>. continuous: bool, trade: bool, r#type: String, contract_code: String, ib_code: String, name: String, contract_month: String, last_trading_date: String, first_notice_date: String, last_bidding_close_time: i64, currency: String, exchange_code: String, multiplier: f64, min_tick: f64, display_multiplier: f64, exchange: String, product_worth: String, delivery_mode: String, product_type: String, product_scale: String, last_trading_timestamp: i64.

Contract code/month/dates/currency/multiplier/tick/exchange.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_contracts(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_contracts("CME").await?;

    Ok(())

}

Response example

[
  {
    "continuous": false,
    "trade": true,
    "type": "FUT",
    "contract_code": "ES2509",
    "ib_code": "ES",
    "name": "E-mini S&P 500",
    "contract_month": "202509",
    "last_trading_date": "2025-09-19"
  }
]

get_future_depth

Signature


pub async fn get_future_depth( &self, req: FutureDepthRequest, ) -> Result<Vec<FutureDepth>, TigerError>

Description

contract_codes required.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codesOption<Vec<String>>Required by server; SDK does not pre-validateNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureDepth>, TigerError>. contract_code: String, timestamp: i64, asks: Vec

Contract and book levels.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_depth(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_depth(FutureDepthRequest { contract_codes: Some(vec!["ES2609".into()]), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "contract_code": "ES2509",
    "timestamp": 1738180800000,
    "asks": [
      {
        "price": 5638.25,
        "volume": 120
      },
      {
        "price": 5638.5,
        "volume": 85
      }
    ],
    "bids": [
      {
        "price": 5638.0,
        "volume": 95
      },
      {
        "price": 5637.75,
        "volume": 110
      }
    ]
  }
]

get_future_exchange

Signature


pub async fn get_future_exchange(&self) -> Result<Vec<FutureExchange>, TigerError>

Description

Supported exchanges; no parameters.

Parameters

ParameterRust typeRequirementSDK default
none-Required by Rust typeNone

Return

  • QuoteClient: Result<Vec<FutureExchange>, TigerError>. code: String, name: String, zone_id: String.

code/name/zone_id.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_exchange(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_exchange().await?;

    Ok(())

}

Response example

[
  {
    "code": "CME",
    "name": "Chicago Mercantile Exchange",
    "zone_id": "America/Chicago"
  }
]

get_future_history_main_contract

Signature


pub async fn get_future_history_main_contract( &self, req: FutureHistoryMainContractRequest, ) -> Result<Vec<FutureMainContractHistory>, TigerError>

Description

Contract codes and optional millisecond range.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codesOption<Vec<String>>Required by server; SDK does not pre-validateNone (omitted)
req.begin_timeOption<i64>OptionalNone (omitted)
req.end_timeOption<i64>OptionalNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureMainContractHistory>, TigerError>. contract_code: String, symbol: String, begin_date: String, end_date: String.

contract/symbol/begin/end dates.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_history_main_contract(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_history_main_contract(FutureHistoryMainContractRequest { contract_codes: Some(vec!["ES2609".into()]), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "contract_code": "ES2509",
    "symbol": "ES",
    "begin_date": "2025-06-20",
    "end_date": "2025-09-19"
  }
]

get_future_kline

Signature


pub async fn get_future_kline( &self, mut req: FutureKlineRequest, ) -> Result<Vec<FutureKline>, TigerError>

Description

Contract and period required; SDK changes Some(0) times to Some(-1).

Parameters

ParameterRust typeRequirementSDK default
req.contract_codesOption<Vec<String>>Conditional: at least one of contract_code / contract_codesNone (omitted)
req.contract_codeOption<String>Conditional: at least one of contract_code / contract_codesNone (omitted)
req.periodOption<String>Required by server; SDK does not pre-validateNone (omitted)
req.begin_timeOption<i64>OptionalSDK changes Some(0) to Some(-1)
req.end_timeOption<i64>OptionalSDK changes Some(0) to Some(-1)
req.begin_indexOption<i32>OptionalNone (omitted)
req.end_indexOption<i32>OptionalNone (omitted)
req.limitOption<i32>OptionalNone (omitted)
req.page_tokenOption<String>OptionalNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureKline>, TigerError>. contract_code: String, next_page_token: String, items: Vec

contract/token/items.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_kline(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_kline(FutureKlineRequest { contract_code: Some("ES2609".into()), period: Some("day".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "contract_code": "ES2509",
    "next_page_token": "eyJzIjoiMTczODE4MDgwMDAwMCJ9",
    "items": [
      {
        "time": 1738094400000,
        "volume": 1423500,
        "open": 5610.25,
        "close": 5638.0,
        "high": 5645.75,
        "low": 5605.25,
        "last_time": 1738180799000,
        "open_interest": 2150000,
        "settlement": 5635.5
      }
    ]
  }
]

get_future_kline_by_page

Signature


pub async fn get_future_kline_by_page( &self, req: FutureKlineByPageRequest, ) -> Result<Vec<FutureKlineItem>, TigerError>

Description

Client pagination defaults: page 200, total 1000; absent/zero times become -1.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codeOption<String>Required by server; SDK does not pre-validateNone (omitted)
req.periodOption<String>Required by server; SDK does not pre-validateNone (omitted)
req.begin_timeOption<i64>OptionalNone (omitted)
req.end_timeOption<i64>OptionalNone (omitted)
req.total_sizeOption<i32>Optional1000 when None
req.page_sizeOption<i32>Optional200 when None
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureKlineItem>, TigerError>. time: i64, volume: i64, open: f64, close: f64, high: f64, low: f64, last_time: i64, open_interest: i64, settlement: f64.

Flattened items.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_kline_by_page(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_kline_by_page(FutureKlineByPageRequest { contract_code: Some("ES2609".into()), period: Some("day".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "time": 1738180800000,
    "volume": 1523847,
    "open": 5620.5,
    "close": 5638.0,
    "high": 5645.75,
    "low": 5605.25,
    "last_time": 1738180800000,
    "open_interest": 2150000
  }
]

get_future_real_time_quote

Signature


pub async fn get_future_real_time_quote( &self, req: FutureRealTimeQuoteRequest, ) -> Result<Vec<FutureQuote>, TigerError>

Description

contract_codes and futures quote permission required.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codesOption<Vec<String>>Required by server; SDK does not pre-validateNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureQuote>, TigerError>. contract_code: String, latest_price: f64, latest_size: i64, latest_time: i64, bid_price: f64, ask_price: f64, bid_size: i64, ask_size: i64, open_interest: i64, open_interest_change: i64, volume: i64, open: f64, high: f64, low: f64, settlement: f64, limit_up: f64, limit_down: f64, avg_price: f64.

Price, BBO, volume, OI, OHLC, settlement, limits.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_real_time_quote(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_real_time_quote(FutureRealTimeQuoteRequest { contract_codes: Some(vec!["ES2609".into()]), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "contract_code": "ES2509",
    "latest_price": 5638.0,
    "latest_size": 15,
    "latest_time": 1738180800000,
    "bid_price": 5638.0,
    "ask_price": 5638.25,
    "bid_size": 300,
    "ask_size": 300
  }
]

get_future_trade_ticks

Signature


pub async fn get_future_trade_ticks( &self, req: FutureTradeTicksRequest, ) -> Result<Vec<FutureTradeTickItem>, TigerError>

Description

v3; contract required; SDK default end_index=30.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codeOption<String>Required by server; SDK does not pre-validateNone (omitted)
req.begin_indexOption<i32>OptionalNone (omitted)
req.end_indexOption<i32>OptionalSDK changes None to 30
req.limitOption<i32>OptionalNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Vec<FutureTradeTickItem>, TigerError>. contract_code: String, index: i64, time: i64, price: f64, volume: i64, direction: String.

contract/index/time/price/volume/direction.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_trade_ticks(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_trade_ticks(FutureTradeTicksRequest { contract_code: Some("ES2609".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

[
  {
    "contract_code": "ES2509",
    "index": 1,
    "time": 1738180800000,
    "price": 5638.25,
    "volume": 1523847,
    "direction": "BUY"
  }
]

get_future_trading_times

Signature


pub async fn get_future_trading_times( &self, req: FutureTradingTimesRequest, ) -> Result<Option<FutureTradingTime>, TigerError>

Description

Contract required; trading date optional.

Parameters

ParameterRust typeRequirementSDK default
req.contract_codeOption<String>Required by server; SDK does not pre-validateNone (omitted)
req.trading_dateOption<String>OptionalNone (omitted)
req.langOption<String>OptionalNone (omitted)

Return

  • QuoteClient: Result<Option<FutureTradingTime>, TigerError>. contract_code: String, biz_date: String, zone: String, trading_times: Vec

contract/biz_date/zone/segments.

Example


use std::sync::Arc;

use tigeropen::client::http_client::HttpClient;

use tigeropen::config::ClientConfig;

use tigeropen::error::TigerError;

use tigeropen::model::order::*;

use tigeropen::model::quote::*;

use tigeropen::model::quote_requests::*;

use tigeropen::model::trade_requests::*;

use tigeropen::push::*;

use tigeropen::quote::QuoteClient;

use tigeropen::trade::TradeClient;

async fn example_get_future_trading_times(config: ClientConfig, quote: &QuoteClient, trade: &TradeClient, push: &Arc<PushClient>) -> Result<(), TigerError> {

    let result_0 = quote.get_future_trading_times(FutureTradingTimesRequest { contract_code: Some("ES2609".into()), ..Default::default() }).await?;

    Ok(())

}

Response example

{
  "contract_code": "ES2509",
  "biz_date": "2025-01-29",
  "zone": "America/Chicago",
  "trading_times": [
    {
      "start": 1738015800000,
      "end": 1738094400000,
      "type": "TRADING"
    },
    {
      "start": 1738094400000,
      "end": 1738101600000,
      "type": "POST_MARKET"
    }
  ]
}


Did this page help you?