行情查询

Rust SDK 通过 QuoteClient 提供全部行情接口。所有方法均以 get_* 命名并返回强类型响应(如 Vec<MarketState>Vec<Brief>Vec<Kline> 等),请求参数通过结构体或扁平函数参数传入,内部以 snake_case 序列化发往服务端,响应以 camelCase 反序列化。以下为完整可运行示例:

use tigeropen::config::ClientConfig;
use tigeropen::model::quote_requests::BriefRequest;
use tigeropen::quote::QuoteClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = ClientConfig::builder().build()?;
    // v0.5.0 起:直接用 from_config() 创建,无需手动构造 HttpClient
    let qc = QuoteClient::from_config(config);

    // 获取市场状态
    let states = qc.get_market_state("US").await?;
    println!("美股市场状态: {:?}", states);

    // 获取实时报价
    let briefs = qc.get_real_time_quote(BriefRequest {
        symbols: Some(vec!["AAPL".to_string(), "TSLA".to_string()]),
        ..Default::default()
    }).await?;
    println!("实时报价: {:?}", briefs);

    // 获取 K 线数据(v0.5.0 起支持多 symbol)
    let klines = qc.get_kline(&["AAPL", "TSLA"], "day").await?;
    println!("K 线数据: {:?}", klines);

    Ok(())
}

通用

get_market_state 获取市场状态

qc.get_market_state(market: &str) -> Result<Vec<MarketState>, TigerError>

说明

查询指定市场(美股、港股等)的当前交易状态,包括是否开盘、下次开盘时间等。

参数

参数名类型是否必填描述
market&str市场代码,如 "US"(美股)、"HK"(港股)、"CN"(A股)

返回

Result<Vec<MarketState>, TigerError>

每个 MarketState 包含 marketmarket_statusstatusopen_time 字段。

示例

let states = qc.get_market_state("US").await?;
if let Some(s) = states.first() {
    println!("market={} status={} openTime={}", s.market, s.market_status, s.open_time);
}

// 查询港股市场状态
let hk_states = qc.get_market_state("HK").await?;

数据示例

请求参数:

{ "market": "US" }

返回数据:

[
  {
    "market": "US",
    "marketStatus": "TRADING",
    "status": "trading",
    "openTime": "2025-05-06 09:30:00"
  }
]

get_trading_calendar 查询交易日历

async fn get_trading_calendar(&self, req: TradingCalendarRequest) -> Result<Vec<TradingCalendar>, TigerError>

说明

查询指定市场的交易日历(哪些天开市 / 休市)。

参数

参数名类型是否必填描述
req.marketOption<String>市场代码,如 "US"
req.begin_dateOption<String>起始日期,格式 "YYYY-MM-DD"
req.end_dateOption<String>截止日期,格式 "YYYY-MM-DD"

示例

use tigeropen::model::quote_requests::TradingCalendarRequest;

let calendar = qc.get_trading_calendar(TradingCalendarRequest {
    market: Some("US".to_string()),
    begin_date: Some("2025-01-01".to_string()),
    end_date: Some("2025-12-31".to_string()),
    ..Default::default()
}).await?;

grab_quote_permission 获取行情权限

qc.grab_quote_permission() -> Result<Vec<QuotePermission>, TigerError>

说明

查询当前账户开通的行情权限列表,确认是否有权限访问实时行情数据。

参数

无参数。

返回

Result<Vec<QuotePermission>, TigerError>

每个元素包含 name(权限标识)、expire_at(毫秒时间戳)。

示例

let perms = qc.grab_quote_permission().await?;
for p in &perms {
    println!("{} expire_at={}", p.name, p.expire_at);
}

数据示例

返回数据:

[
  { "name": "US_BASIC", "expireAt": 1767225600000 },
  { "name": "HK_BASIC", "expireAt": 1767225600000 },
  { "name": "US_REALTIME", "expireAt": 1767225600000 }
]

get_kline_quota 查询 K 线配额

async fn get_kline_quota(&self) -> Result<KlineQuota, TigerError>

说明

查询当前账户的分钟 K 线访问配额(已用 / 总量)。

示例

let quota = qc.get_kline_quota().await?;
println!("used={} total={}", quota.used, quota.quota);

股票行情

get_symbols 查询股票代码列表

async fn get_symbols(&self, req: SymbolsRequest) -> Result<Vec<String>, TigerError>

说明

查询指定市场/分类下的股票代码列表。

参数

参数名类型是否必填描述
req.marketOption<String>市场代码,如 "US""HK"
req.sec_typeOption<String>证券类型
req.include_otcOption<bool>是否包含 OTC

示例

use tigeropen::model::quote_requests::SymbolsRequest;
let symbols = qc.get_symbols(SymbolsRequest { market: Some("US".to_string()), ..Default::default() }).await?;
println!("symbols={}", symbols.len());

get_symbol_names 查询股票名称

async fn get_symbol_names(&self, req: SymbolNamesRequest) -> Result<Vec<SymbolName>, TigerError>

说明

批量查询股票的中英文名称。

示例

use tigeropen::model::quote_requests::SymbolNamesRequest;
let names = qc.get_symbol_names(SymbolNamesRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    ..Default::default()
}).await?;

get_trade_metas 查询交易信息

async fn get_trade_metas(&self, req: TradeMetasRequest) -> Result<Vec<TradeMeta>, TigerError>

说明

查询股票的交易属性(手数、最小变动价位、涨跌停等)。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>股票代码列表,最多50只

示例

use tigeropen::model::quote_requests::TradeMetasRequest;
let metas = qc.get_trade_metas(TradeMetasRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    ..Default::default()
}).await?;

get_real_time_quote 获取实时报价

async fn get_real_time_quote(&self, req: BriefRequest) -> Result<Vec<Brief>, TigerError>

说明

批量获取股票的实时快照行情,包括最新价、涨跌幅、成交量等核心字段。内部调用服务端 brief 接口。

参数

参数名类型是否必填描述
symbolsOption<Vec<String>>股票代码列表,最多100只,如 vec!["AAPL".to_string()]
include_hour_tradingOption<bool>是否包含盘前盘后
sec_typeOption<String>证券类型
langOption<String>语言

返回

Result<Vec<Brief>, TigerError>

每个 Brief 包含 symbollatest_pricepre_closechangechange_ratevolumeopenhighlowask_price / bid_pricelatest_time 等字段。

示例

use tigeropen::model::quote_requests::BriefRequest;

let briefs = qc.get_real_time_quote(BriefRequest {
    symbols: Some(vec!["AAPL".to_string(), "TSLA".to_string(), "00700".to_string()]),
    ..Default::default()
}).await?;
for b in &briefs {
    println!("{} latest={:.2} change_rate={:.4}", b.symbol, b.latest_price, b.change_rate);
}

数据示例

请求参数:

{ "symbols": ["AAPL", "TSLA"] }

返回数据:

[
  {
    "symbol": "AAPL",
    "latestPrice": 227.52,
    "preClose": 225.01,
    "change": 2.51,
    "changeRate": 0.01115,
    "volume": 62345678,
    "open": 225.50,
    "high": 228.10,
    "low": 224.80,
    "askPrice": 227.53,
    "askSize": 300,
    "bidPrice": 227.52,
    "bidSize": 400,
    "latestTime": 1735042800000
  },
  {
    "symbol": "TSLA",
    "latestPrice": 410.44,
    "preClose": 403.84,
    "change": 6.60,
    "changeRate": 0.01634,
    "volume": 98765432,
    "open": 405.00,
    "high": 415.20,
    "low": 402.30,
    "latestTime": 1735042800000
  }
]

get_delayed_quote 获取延迟行情

async fn get_delayed_quote(&self, req: BriefRequest) -> Result<Vec<Brief>, TigerError>

说明

获取股票延迟行情(不需要实时行情权限)。参数结构与 get_real_time_quote 相同。

示例

use tigeropen::model::quote_requests::BriefRequest;
let delay = qc.get_delayed_quote(BriefRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    ..Default::default()
}).await?;

get_kline 获取K线数据

qc.get_kline(symbols: &[&str], period: &str) -> Result<Vec<Kline>, TigerError>

说明

获取一只或多只股票的历史 K 线数据,支持日线、周线、月线及分钟级别。v0.5.0 起第一个参数改为切片,支持批量查询。

参数

参数名类型是否必填描述
symbols&[&str]股票代码切片,如 &["AAPL"]&["AAPL", "TSLA"]
period&strK 线周期:"day" / "week" / "month" / "year" / "1min" / "5min" / "15min" / "30min" / "60min"

返回

Result<Vec<Kline>, TigerError>

每个 Kline 包含 symbolperiodnext_page_token,以及 items: Vec<KlineItem>KlineItemtimeopenhighlowclosevolumeamount

示例

// 单只股票日线
let klines = qc.get_kline(&["AAPL"], "day").await?;
if let Some(k) = klines.first() {
    println!("{} bars={}", k.symbol, k.items.len());
}

// 多只股票批量查询(v0.5.0+)
let klines = qc.get_kline(&["AAPL", "TSLA"], "day").await?;

// 获取 5 分钟 K 线
let klines_5min = qc.get_kline(&["AAPL"], "5min").await?;

数据示例

请求参数:

{ "symbols": ["AAPL", "TSLA"], "period": "day" }

返回数据:

[
  {
    "symbol": "AAPL",
    "period": "day",
    "items": [
      {
        "time": 1734912000000,
        "open": 222.56,
        "high": 225.72,
        "low": 222.11,
        "close": 225.01,
        "volume": 55234100
      },
      {
        "time": 1734998400000,
        "open": 225.50,
        "high": 228.10,
        "low": 224.80,
        "close": 227.52,
        "volume": 62345678
      }
    ]
  }
]

get_timeline 获取分时数据

qc.get_timeline(symbols: &[&str]) -> Result<Vec<Timeline>, TigerError>

说明

获取当日分时走势数据(逐分钟价格与成交量),用于绘制分时图。内部使用 v3.0 接口。

参数

参数名类型是否必填描述
symbols&[&str]股票代码切片,最多50个

返回

Result<Vec<Timeline>, TigerError>

每个 Timeline 包含 symbolperiodpre_close,以及 intraday / pre_hours / after_hours 三个可选 TimelineBucket;每个桶的 itemstimepricevolumeavg_price 字段。

示例

let timeline = qc.get_timeline(&["AAPL", "TSLA"]).await?;
if let Some(t) = timeline.first() {
    let points = t.intraday.as_ref().map(|b| b.items.len()).unwrap_or(0);
    println!("{} intraday_points={} preClose={:.2}", t.symbol, points, t.pre_close);
}

数据示例

请求参数:

{ "symbols": ["AAPL"] }

返回数据:

[
  {
    "symbol": "AAPL",
    "period": "day",
    "preClose": 225.01,
    "intraday": {
      "items": [
        { "time": 1735020600000, "price": 225.50, "volume": 3021456, "avgPrice": 225.48 },
        { "time": 1735020660000, "price": 225.80, "volume": 1234567, "avgPrice": 225.55 }
      ]
    }
  }
]

get_timeline_history 获取历史分时

async fn get_timeline_history(&self, req: TimelineHistoryRequest) -> Result<Vec<Timeline>, TigerError>

说明

获取历史某日的分时数据。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>股票代码列表,最多50只
req.dateOption<String>日期,格式 "YYYY-MM-DD"

示例

use tigeropen::model::quote_requests::TimelineHistoryRequest;
let tl = qc.get_timeline_history(TimelineHistoryRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    date: Some("2025-05-01".to_string()),
    ..Default::default()
}).await?;

get_trade_tick 获取逐笔成交

async fn get_trade_tick(&self, req: TradeTickRequest) -> Result<Vec<TradeTick>, TigerError>

说明

获取最新逐笔成交记录,每一笔成交的价格、数量和方向(买/卖)。

参数

参数名类型是否必填描述
symbolsOption<Vec<String>>股票代码列表,最多50只
begin_indexOption<i32>起始序号
end_indexOption<i32>结束序号
limitOption<i32>返回条数上限
langOption<String>语言

返回

Result<Vec<TradeTick>, TigerError>

每个 TradeTicksymbolbegin_indexend_indexitems;每条 items 包含 timepricevolumetype(方向字段,Rust 里为 r#type)。

示例

use tigeropen::model::quote_requests::TradeTickRequest;

let ticks = qc.get_trade_tick(TradeTickRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    ..Default::default()
}).await?;
if let Some(t) = ticks.first() {
    println!("{} ticks={}", t.symbol, t.items.len());
}

数据示例

请求参数:

{ "symbols": ["AAPL"] }

返回数据:

[
  {
    "symbol": "AAPL",
    "beginIndex": 0,
    "endIndex": 1,
    "items": [
      { "time": 1735042780000, "price": 227.52, "volume": 100, "type": "B" },
      { "time": 1735042781000, "price": 227.50, "volume": 200, "type": "S" }
    ]
  }
]

get_quote_depth 获取深度行情

async fn get_quote_depth(&self, req: DepthQuoteRequest) -> Result<Vec<Depth>, TigerError>

说明

获取买卖盘口深度数据。

参数

参数名类型是否必填描述
symbolsOption<Vec<String>>股票代码列表,最多50只
marketOption<String>市场代码,如 "US""HK"
langOption<String>语言

返回

Result<Vec<Depth>, TigerError>

每个 Depthsymbolasks(卖盘)、bids(买盘),其中每档 DepthLevel 包含 pricecountvolume 字段。

示例

use tigeropen::model::quote_requests::DepthQuoteRequest;

let depth = qc.get_quote_depth(DepthQuoteRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    market: Some("US".to_string()),
    ..Default::default()
}).await?;
if let Some(d) = depth.first() {
    println!("asks={} bids={}", d.asks.len(), d.bids.len());
}

数据示例

请求参数:

{ "symbols": ["AAPL"], "market": "US" }

返回数据:

[
  {
    "symbol": "AAPL",
    "asks": [
      { "price": 227.53, "volume": 300, "count": 2 },
      { "price": 227.55, "volume": 500, "count": 4 }
    ],
    "bids": [
      { "price": 227.52, "volume": 400, "count": 3 },
      { "price": 227.50, "volume": 600, "count": 5 }
    ]
  }
]

get_stock_broker 查询券商席位

async fn get_stock_broker(&self, req: StockBrokerRequest) -> Result<Vec<StockBroker>, TigerError>

说明

查询港股盘口委托的券商席位明细(需港股 Level2 牌照)。

示例

use tigeropen::model::quote_requests::StockBrokerRequest;
let brokers = qc.get_stock_broker(StockBrokerRequest {
    symbol: Some("00700".to_string()),
    ..Default::default()
}).await?;

get_capital_flow 获取资金流向

qc.get_capital_flow(symbol: &str, market: &str, period: &str) -> Result<Option<CapitalFlow>, TigerError>

说明

获取股票的资金流向时间序列数据。

参数

参数名类型是否必填描述
symbol&str股票代码
market&str市场代码,如 "US"
period&str周期:"intraday" / "day" / "week" / "month"

返回

Result<Option<CapitalFlow>, TigerError>

返回对象包含 symbolperioditems: Vec<CapitalFlowItem>,每条 itemstimetimestampnet_inflow

示例

if let Some(cf) = qc.get_capital_flow("AAPL", "US", "day").await? {
    println!("{} period={} rows={}", cf.symbol, cf.period, cf.items.len());
}

数据示例

返回数据:

{
  "symbol": "AAPL",
  "period": "day",
  "items": [
    { "time": "2025-05-05", "timestamp": 1746403200000, "netInflow": 111111101 },
    { "time": "2025-05-06", "timestamp": 1746489600000, "netInflow": -25430000 }
  ]
}

get_capital_distribution 获取资金分布

qc.get_capital_distribution(symbol: &str, market: &str) -> Result<Option<CapitalDistribution>, TigerError>

说明

获取股票当前资金分布快照,按大单/中单/小单维度展示流入流出。

参数

参数名类型是否必填描述
symbol&str股票代码
market&str市场代码,如 "US"

返回

Result<Option<CapitalDistribution>, TigerError>

返回对象包含 symbolnet_inflowin_allin_bigin_midin_smallout_allout_bigout_midout_small 等字段。

示例

if let Some(cd) = qc.get_capital_distribution("AAPL", "US").await? {
    println!("{} netInflow={:.2}", cd.symbol, cd.net_inflow);
}

数据示例

返回数据:

{
  "symbol": "AAPL",
  "netInflow": 1111111101,
  "inAll": 8234567890,
  "inBig": 5123456789,
  "inMid": 2012345678,
  "inSmall": 1098765432,
  "outAll": 7123456789,
  "outBig": 4012345678,
  "outMid": 1800000000,
  "outSmall": 1311111111
}

get_trade_rank 查询交易排行

async fn get_trade_rank(&self, req: TradeRankRequest) -> Result<Vec<TradeRankItem>, TigerError>

说明

查询指定市场的成交量/额排行榜。

参数

参数名类型是否必填描述
req.marketString市场代码

get_short_interest 查询做空兴趣

async fn get_short_interest(&self, req: ShortInterestRequest) -> Result<Vec<ShortInterest>, TigerError>

说明

查询美股借空利率、可借空股数等。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>股票代码列表,最多50只

get_stock_industry 查询股票行业

async fn get_stock_industry(&self, req: StockIndustryRequest) -> Result<Vec<StockIndustry>, TigerError>

说明

查询股票所属 GICS 行业分类。

参数

参数名类型是否必填描述
req.symbolOption<String>股票代码
req.marketOption<String>市场代码

期权行情

get_option_expiration 获取期权到期日

qc.get_option_expiration(symbols: &[&str]) -> Result<Vec<OptionExpiration>, TigerError>

说明

获取一只或多只标的股票的所有期权到期日列表,用于构建期权链查询条件。v0.5.0 起参数改为切片,支持批量查询。

参数

参数名类型是否必填描述
symbols&[&str]标的股票代码切片,如 &["AAPL"]&["AAPL", "TSLA"]

返回

Result<Vec<OptionExpiration>, TigerError>

每个元素含 symboldates"YYYY-MM-DD" 字符串数组)、timestamps(毫秒时间戳数组),以及可选的 option_symbolsperiodscounts

示例

// 单只股票
let exps = qc.get_option_expiration(&["AAPL"]).await?;
if let Some(e) = exps.first() {
    println!("dates={} first={}", e.dates.len(), e.dates.first().unwrap_or(&"".into()));
}

// 批量查询(v0.5.0+)
let exps = qc.get_option_expiration(&["AAPL", "TSLA"]).await?;

数据示例

请求参数:

{ "symbols": ["AAPL"] }

返回数据:

[
  {
    "symbol": "AAPL",
    "dates": ["2025-01-17", "2025-02-21", "2025-03-21", "2025-06-20", "2025-09-19"],
    "timestamps": [1737072000000, 1740096000000, 1742515200000, 1750377600000, 1758240000000]
  }
]

get_option_symbols 期权代码列表

async fn get_option_symbols(&self, req: OptionSymbolsRequest) -> Result<Vec<String>, TigerError>

说明

获取指定市场下所有可交易的期权标的代码列表。

参数

参数名类型是否必填描述
req.marketOption<String>市场代码,如 "US"

get_option_chain 获取期权链

qc.get_option_chain(req: OptionChainRequest) -> Result<Vec<OptionChain>, TigerError>

说明

获取一对或多对「标的 + 到期日」的完整期权链,包含所有行权价的认购和认沽期权信息。SDK 内部将 OptionChainItem 的日期字符串按市场时区(美股 America/New_York、港股 Asia/Hong_Kong)转换为毫秒时间戳,封装为 option_basic 数组发送(使用 v3.0 接口)。v0.5.3 起改为接收 OptionChainRequest 结构体。

参数

参数名类型是否必填描述
req.option_basicOption<Vec<OptionChainItem>>期权链查询条目,每条含 symbolexpiry(毫秒时间戳)
req.marketOption<String>市场代码,如 "HK"

OptionChainItem 构造方式

方法说明
OptionChainItem::from_date("AAPL", "2025-01-17")?日期字符串,按 symbol 自动推断时区
OptionChainItem::from_date_tz("AAPL", "2025-01-17", "America/New_York")?指定时区
OptionChainItem::new("AAPL", 1737072000000)直接传毫秒时间戳

返回

Result<Vec<OptionChain>, TigerError>

每个 OptionChain 包含 symbolexpiry(毫秒)、items: Vec<OptionChainRow>;每行 OptionChainRowcallput 两个可选 OptionLegOptionLegidentifierstrikerightlatest_pricebid_price / ask_priceimplied_voldeltagammathetavegarho 等字段。

示例

use tigeropen::model::quote_requests::{OptionChainItem, OptionChainRequest};

// 单个查询(日期字符串,自动推断时区)
let chain = qc.get_option_chain(OptionChainRequest::new(vec![
    OptionChainItem::from_date("AAPL", "2025-01-17")?,
])).await?;
if let Some(row) = chain.first().and_then(|c| c.items.first()) {
    let call_id = row.call.as_ref().map(|l| l.identifier.clone()).unwrap_or_default();
    println!("call={}", call_id);
}

// 批量查询
let chains = qc.get_option_chain(OptionChainRequest::new(vec![
    OptionChainItem::from_date("AAPL", "2025-01-17")?,
    OptionChainItem::from_date("TSLA", "2025-02-21")?,
])).await?;

数据示例

返回数据:

[
  {
    "symbol": "AAPL",
    "expiry": 1737072000000,
    "items": [
      {
        "call": {
          "identifier": "AAPL  250117C00220000",
          "strike": "220",
          "right": "CALL",
          "latestPrice": 9.50,
          "impliedVol": 0.285,
          "delta": 0.612
        },
        "put": {
          "identifier": "AAPL  250117P00220000",
          "strike": "220",
          "right": "PUT",
          "latestPrice": 2.10,
          "impliedVol": 0.312
        }
      }
    ]
  }
]

get_option_quote 获取期权报价

qc.get_option_quote(req: OptionQuoteRequest) -> Result<Vec<OptionBrief>, TigerError>

说明

批量获取期权合约的实时报价;SDK 内部自动把 OCC 期权 identifier 解析为 symbol / expiry(毫秒) / right"CALL" / "PUT") / strike(字符串,如 "150.0")组成的 option_basic 数组(使用 v2.0 接口)。OptionBriefBrief 的类型别名。v0.5.3 起改为接收 OptionQuoteRequest 结构体,strike 序列化为 JSON string("310.0" 格式,与 Java/Go/TypeScript SDK 一致;修复了旧版本返回 latestPrice=0 的问题)。

参数

参数名类型是否必填描述
req.option_basicOption<Vec<OptionContractItem>>期权合约列表,最多30个
req.marketOption<String>市场代码

OptionContractItem 构造方式

方法说明
OptionContractItem::from_occ("AAPL 250117C00150000")?OCC 格式,按 symbol 自动推断时区(推荐)
OptionContractItem::from_occ_tz("AAPL 250117C00150000", "America/New_York")?指定时区
OptionContractItem::new("AAPL", 1737072000000, "CALL", "150.0")直接传时间戳和浮点 strike

返回

Result<Vec<OptionBrief>, TigerError>

字段与 Brief 相同,包含 symbollatest_pricepre_closechangevolumeopen_interestmultiplierexpirystrikerightask_price / bid_price 等。

示例

use tigeropen::model::quote_requests::{OptionContractItem, OptionQuoteRequest};

let opt_briefs = qc.get_option_quote(OptionQuoteRequest::new(vec![
    OptionContractItem::from_occ("AAPL  250117C00150000")?,
])).await?;
if let Some(b) = opt_briefs.first() {
    println!("{} latest={:.4}", b.symbol, b.latest_price);
}

数据示例

返回数据:

[
  {
    "symbol": "AAPL",
    "expiry": "2025-01-17",
    "strike": "150",
    "right": "CALL",
    "latestPrice": 9.50,
    "preClose": 9.10,
    "change": 0.40,
    "openInterest": 12540,
    "volume": 3820,
    "multiplier": 100
  }
]

get_option_kline 获取期权K线

qc.get_option_kline(req: OptionKlineRequest) -> Result<Vec<OptionKline>, TigerError>

说明

获取一个或多个期权合约的历史 K 线数据。SDK 内部自动解析 identifier 并以 option_query 数组形式发送(使用 v2.0 接口)。OptionKlineKline 的类型别名。v0.5.3 起改为接收 OptionKlineRequest 结构体,strike 序列化为 JSON string("310.0" 格式,与 Java/Go/TypeScript SDK 一致;修复了旧版本返回空数据的问题)。

参数

参数名类型是否必填描述
req.option_queryOption<Vec<OptionKlineItem>>K 线查询条目列表
req.marketOption<String>市场代码

OptionKlineItem 构造方式

方法说明
OptionKlineItem::from_occ("AAPL 250117C00150000", "day")?OCC 格式 + 周期(推荐)
OptionKlineItem::from_occ_tz("AAPL 250117C00150000", "day", "America/New_York")?指定时区
OptionKlineItem::new("AAPL", 1737072000000, "CALL", "150.0", "day")直接构造

OptionKlineItem 还支持可选字段 begin_time / end_time(毫秒时间戳)和 limit 控制返回数量:

let mut item = OptionKlineItem::from_occ("AAPL  250117C00150000", "day")?;
item.begin_time = Some(begin_ms);
item.limit = Some(60);

返回

Result<Vec<OptionKline>, TigerError>

结构与股票 K 线一致(symbolperioditems: Vec<KlineItem>)。

示例

use tigeropen::model::quote_requests::{OptionKlineItem, OptionKlineRequest};

// 单个合约
let opt_kline = qc.get_option_kline(OptionKlineRequest {
    option_query: Some(vec![
        OptionKlineItem::from_occ("AAPL  250117C00150000", "day")?,
    ]),
    ..Default::default()
}).await?;
if let Some(k) = opt_kline.first() {
    println!("bars={}", k.items.len());
}

// 批量查询
let opt_klines = qc.get_option_kline(OptionKlineRequest {
    option_query: Some(vec![
        OptionKlineItem::from_occ("AAPL  250117C00150000", "day")?,
        OptionKlineItem::from_occ("AAPL  250117P00150000", "day")?,
    ]),
    ..Default::default()
}).await?;

数据示例

返回数据:

[
  {
    "symbol": "AAPL  250117C00150000",
    "period": "day",
    "items": [
      { "time": 1734912000000, "open": 8.80, "high": 9.60, "low": 8.70, "close": 9.10, "volume": 2100 },
      { "time": 1734998400000, "open": 9.10, "high": 9.80, "low": 9.00, "close": 9.50, "volume": 3820 }
    ]
  }
]

get_option_trade_ticks 期权逐笔成交

async fn get_option_trade_ticks(&self, req: OptionTradeTickRequest) -> Result<Vec<TradeTick>, TigerError>

说明

获取期权合约的逐笔成交记录。


get_option_timeline 期权分时

async fn get_option_timeline(&self, req: OptionTimelineRequest) -> Result<Vec<Timeline>, TigerError>

说明

获取期权合约的分时走势数据。


get_option_depth 期权盘口深度

async fn get_option_depth(&self, req: OptionDepthRequest) -> Result<Vec<Depth>, TigerError>

说明

获取期权合约的买卖盘口深度数据。


get_option_analysis 期权分析

async fn get_option_analysis(&self, req: OptionAnalysisRequest) -> Result<Vec<OptionAnalysis>, TigerError>

说明

获取期权标的的历史波动率与隐含波动率分析数据。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>标的代码,最多10只(与 symbol_items 二选一)
req.symbol_itemsOption<Vec<OptionAnalysisSymbol>>带 period 的标的列表,用于 per-symbol 不同周期查询
req.marketOption<String>市场,如 "US""HK"
req.periodOption<String>历史波动率周期,如 "26week"

返回

Result<Vec<OptionAnalysis>, TigerError>

每个 OptionAnalysis 包含:

字段类型描述
symbolString标的代码
implied_vol_30_daysf6430 日隐含波动率
his_volatilityf64历史波动率
iv_his_v_ratiof64隐含波动率 / 历史波动率
call_put_ratiof64认购/认沽比率
implied_vol_metricOption<ImpliedVolMetric>隐含波动率百分位指标(periodpercentilerank
volatility_listVec<OptionVolatilityPoint>波动率历史序列(implied_volhis_volatilitytimestamp

示例

use tigeropen::model::OptionAnalysisRequest;

let analyses = qc.get_option_analysis(OptionAnalysisRequest {
    symbols: Some(vec!["AAPL".to_string()]),
    market: Some("US".to_string()),
    period: Some("26week".to_string()),
    ..Default::default()
}).await?;

for a in &analyses {
    println!(
        "{}: iv30d={:.4} hv={:.4} iv/hv={:.4}",
        a.symbol, a.implied_vol_30_days, a.his_volatility, a.iv_his_v_ratio
    );
    if let Some(m) = &a.implied_vol_metric {
        println!("  percentile={:.2} rank={:.2}", m.percentile, m.rank);
    }
}

期货行情

get_future_exchange 获取期货交易所列表

qc.get_future_exchange() -> Result<Vec<FutureExchange>, TigerError>

说明

获取平台支持的所有期货交易所列表。

参数

无参数。

返回

Result<Vec<FutureExchange>, TigerError>

每个元素包含 code(交易所代码,如 "CME")、namezone_id

示例

let exchanges = qc.get_future_exchange().await?;
for e in &exchanges {
    println!("{} {} ({})", e.code, e.name, e.zone_id);
}

数据示例

返回数据:

[
  { "code": "CME", "name": "Chicago Mercantile Exchange", "zoneId": "America/Chicago" },
  { "code": "CBOT", "name": "Chicago Board of Trade", "zoneId": "America/Chicago" },
  { "code": "NYMEX", "name": "New York Mercantile Exchange", "zoneId": "America/New_York" },
  { "code": "HKEX", "name": "Hong Kong Exchanges and Clearing", "zoneId": "Asia/Hong_Kong" }
]

get_future_contracts 获取期货合约列表

qc.get_future_contracts(exchange_code: &str) -> Result<Vec<FutureContractInfo>, TigerError>

说明

获取指定交易所下所有可交易期货合约列表。方法名在服务端为 future_contract_by_exchange_code,请求键为 exchange_code

参数

参数名类型是否必填描述
exchange_code&str交易所代码,如 "CME""HKEX"

返回

Result<Vec<FutureContractInfo>, TigerError>

每个元素包含 contract_codenametypecontract_monthlast_trading_datecurrencymultipliermin_tickexchange 等字段。

示例

let contracts = qc.get_future_contracts("CME").await?;
if let Some(c) = contracts.first() {
    println!("first contract={}", c.contract_code);
}

数据示例

请求参数:

{ "exchange_code": "CME" }

返回数据:

[
  {
    "contractCode": "ES2506",
    "name": "E-mini S&P 500",
    "type": "index",
    "contractMonth": "202506",
    "lastTradingDate": "2025-06-20",
    "currency": "USD",
    "multiplier": 50,
    "minTick": 0.25,
    "exchange": "CME"
  },
  {
    "contractCode": "NQ2506",
    "name": "E-mini NASDAQ-100",
    "type": "index",
    "contractMonth": "202506",
    "currency": "USD",
    "multiplier": 20,
    "minTick": 0.25,
    "exchange": "CME"
  }
]

get_future_contract 查询单个期货合约

async fn get_future_contract(&self, req: FutureContractRequest) -> Result<Option<FutureContractInfo>, TigerError>

说明

按合约代码或品种代码查询单个期货合约信息。

参数

参数名类型是否必填描述
req.contract_codeOption<String>合约代码,如 "CL2609"
req.type_Option<String>品种代码,如 "CL"

get_all_future_contracts 查询全部期货合约

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

说明

按品种代码查询该品种下全部合约。

参数

参数名类型是否必填描述
req.type_Option<String>品种代码,如 "CL"
req.exchangeOption<String>交易所代码

get_current_future_contract 查询主力合约

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

说明

查询指定品种当前的主力合约。

示例

use tigeropen::model::quote_requests::FutureContractRequest;
let main = qc.get_current_future_contract(FutureContractRequest {
    type_: Some("CL".to_string()),
    ..Default::default()
}).await?;
if let Some(c) = main {
    println!("current main: {}", c.contract_code);
}

get_future_continuous_contracts 查询连续合约

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

说明

查询指定品种的连续合约序列。


get_future_history_main_contract 查询历史主力合约

async fn get_future_history_main_contract(&self, req: FutureHistoryRequest) -> Result<Vec<FutureContractInfo>, TigerError>

说明

查询历史上各时段的主力合约切换记录。


get_future_real_time_quote 获取期货实时报价

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

说明

批量获取期货合约的实时行情数据。

参数

参数名类型是否必填描述
contract_codesOption<Vec<String>>期货合约代码列表,最多50个,如 vec!["ES2506".to_string()]
langOption<String>语言

返回

Result<Vec<FutureQuote>, TigerError>

每个元素包含 contract_codelatest_pricebid_price / ask_pricevolumeopen_interestopenhighlowsettlementlimit_up / limit_down 等字段。

示例

use tigeropen::model::quote_requests::FutureBriefRequest;

let fut_quotes = qc.get_future_real_time_quote(FutureBriefRequest {
    contract_codes: Some(vec!["ES2506".to_string(), "NQ2506".to_string()]),
    ..Default::default()
}).await?;
for q in &fut_quotes {
    println!("{} latest={:.4}", q.contract_code, q.latest_price);
}

数据示例

请求参数:

{ "contract_codes": ["ES2506", "NQ2506"] }

返回数据:

[
  {
    "contractCode": "ES2506",
    "latestPrice": 5920.50,
    "latestTime": 1735042800000,
    "bidPrice": 5920.25,
    "askPrice": 5920.75,
    "volume": 1234567,
    "openInterest": 2345678,
    "open": 5900.00,
    "high": 5935.00,
    "low": 5895.00,
    "settlement": 5895.25
  }
]

get_future_kline 获取期货K线

qc.get_future_kline(req: FutureKlineRequest) -> Result<Vec<FutureKline>, TigerError>

说明

获取期货合约的历史 K 线数据。FutureKlineRequest 是结构化请求;若 begin_time / end_time0,SDK 会自动填入 -1 表示不限制。

参数

参数名类型是否必填描述
req.contract_codesVec<String>期货合约代码列表,如 vec!["ES2506".into()]
req.periodStringK 线周期:"day" / "week" / "1min" / "5min" / "15min" / "30min" / "60min"
req.begin_timei64开始时间(毫秒),-10 表示不限
req.end_timei64结束时间(毫秒),-10 表示不限
req.limitOption<i32>返回条数限制
req.page_tokenOption<String>分页令牌

返回

Result<Vec<FutureKline>, TigerError>

每个元素含 items: Vec<FutureKlineItem>next_page_tokenFutureKlineItemtimeopenhighlowclosevolumelast_timeopen_interestsettlement

示例

use tigeropen::model::quote::FutureKlineRequest;

let fut_kline = qc.get_future_kline(FutureKlineRequest {
    contract_codes: vec!["ES2506".into()],
    period: "day".into(),
    begin_time: -1,
    end_time: -1,
    limit: None,
    page_token: None,
}).await?;
if let Some(k) = fut_kline.first() {
    println!("bars={}", k.items.len());
}

数据示例

返回数据:

[
  {
    "items": [
      {
        "time": 1734912000000,
        "open": 5870.00,
        "high": 5900.00,
        "low": 5860.00,
        "close": 5895.25,
        "volume": 1023456,
        "openInterest": 2340000,
        "settlement": 5895.25
      },
      {
        "time": 1734998400000,
        "open": 5900.00,
        "high": 5935.00,
        "low": 5895.00,
        "close": 5920.50,
        "volume": 1234567
      }
    ]
  }
]

get_future_trade_ticks 期货逐笔成交

async fn get_future_trade_ticks(&self, req: FutureTradeTickRequest) -> Result<Vec<TradeTick>, TigerError>

说明

获取期货合约的逐笔成交记录。

参数

参数名类型是否必填描述
req.contract_codeOption<String>合约代码
req.begin_indexOption<i32>起始序号
req.end_indexOption<i32>结束序号
req.limitOption<i32>返回条数上限

get_future_depth 期货深度行情

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

说明

获取期货合约的买卖盘口深度数据。

参数

参数名类型是否必填描述
req.contract_codesOption<Vec<String>>合约代码列表

get_future_trading_times 期货交易时间

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

说明

查询指定期货合约的交易时段列表(含夜盘)。

参数

参数名类型是否必填描述
req.contract_codeOption<String>合约代码
req.trading_dateOption<String>交易日

基金

get_fund_symbols 基金代码列表

async fn get_fund_symbols(&self, req: FundSymbolsRequest) -> Result<Vec<String>, TigerError>

说明

获取平台支持的基金代码列表。


get_fund_contracts 基金合约信息

async fn get_fund_contracts(&self, req: FundContractsRequest) -> Result<Vec<FundContract>, TigerError>

说明

批量查询基金合约的基本信息,包括名称、货币、基金类型、净资产值等。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>基金代码列表

get_fund_quote 基金实时报价

async fn get_fund_quote(&self, req: FundQuoteRequest) -> Result<Vec<FundQuote>, TigerError>

说明

获取基金最新净值及涨跌信息。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>基金代码列表

示例

use tigeropen::model::quote_requests::FundQuoteRequest;
let q = qc.get_fund_quote(FundQuoteRequest {
    symbols: Some(vec!["SPY".to_string()]),
    ..Default::default()
}).await?;

get_fund_history_quote 基金历史行情

async fn get_fund_history_quote(&self, req: FundHistoryQuoteRequest) -> Result<Vec<FundHistoryQuote>, TigerError>

说明

获取基金历史净值序列。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>基金代码列表,最多500只
req.begin_timeOption<i64>起始毫秒时间戳
req.end_timeOption<i64>结束毫秒时间戳
req.limitOption<i32>返回条数上限

窝轮

get_warrant_quote 窝轮实时报价

async fn get_warrant_quote(&self, req: WarrantBriefsRequest) -> Result<Vec<Brief>, TigerError>

说明

批量获取窝轮合约的实时报价数据,包含名称、发行商、标的、到期日等信息。

参数

参数名类型是否必填描述
req.symbolsOption<Vec<String>>窝轮代码列表

get_warrant_filter 窝轮筛选

async fn get_warrant_filter(&self, req: WarrantFilterRequest) -> Result<Vec<WarrantFilterResult>, TigerError>

说明

按标的、发行商、到期月份等条件筛选窝轮列表,支持分页和排序。

参数

参数名类型是否必填描述
req.symbolOption<String>标的代码
req.pageOption<i32>页码
req.page_sizeOption<i32>每页条数
req.sort_field_nameOption<String>排序字段
req.issuer_nameOption<String>发行商过滤
req.expire_ymOption<String>到期年月,格式 "yyyyMM"

行业

get_industry_list 查询行业列表

async fn get_industry_list(&self, req: IndustryListRequest) -> Result<Vec<Industry>, TigerError>

说明

查询 GICS 行业层级列表(GSECTOR / GGROUP / GIND / GSUBIND)。

参数

参数名类型是否必填描述
req.levelOption<String>行业层级,如 "GSECTOR"

示例

use tigeropen::model::quote_requests::IndustryListRequest;

let industries = qc.get_industry_list(IndustryListRequest {
    level: Some("GSECTOR".to_string()),
    ..Default::default()
}).await?;

get_industry_stocks 查询行业成分股

async fn get_industry_stocks(&self, req: IndustryStocksRequest) -> Result<Vec<String>, TigerError>

说明

查询指定行业下的股票代码列表。

参数

参数名类型是否必填描述
req.industry_idOption<String>行业 ID
req.marketOption<String>市场代码

选股器

market_scanner 选股器

qc.market_scanner(req: MarketScannerRequest) -> Result<Option<ScannerResult>, TigerError>

说明

根据自定义条件筛选符合要求的股票,支持按市值、涨跌幅、成交量、技术指标等多维度过滤(使用 v1.0 接口)。

参数

参数名类型是否必填描述
req.marketString市场代码,如 "US"
req.pageOption<i32>页码,从 0 开始
req.page_sizeOption<i32>每页条数
req.cursor_idOption<String>游标分页 ID
req.base_filter_listOption<Vec<Value>>基础字段过滤条件数组
req.accumulate_filter_listOption<Vec<Value>>累计字段过滤条件数组
req.financial_filter_listOption<Vec<Value>>财务字段过滤条件数组
req.multi_tags_filter_listOption<Vec<Value>>多标签过滤条件数组
req.sort_field_dataOption<Value>排序字段
req.multi_tags_fieldsOption<Vec<String>>多标签字段列表

返回

Result<Option<ScannerResult>, TigerError>

返回对象包含 pagetotal_pagetotal_countpage_sizecursor_id,以及 items: Vec<ScannerResultItem>(每项含 symbolmarket 及分类数据列表)。

示例

use tigeropen::model::quote::MarketScannerRequest;

if let Some(r) = qc.market_scanner(MarketScannerRequest {
    market: "US".into(),
    page: Some(0),
    page_size: Some(10),
    ..Default::default()
}).await? {
    println!("page={}/{} items={}", r.page, r.total_page, r.items.len());
}

数据示例

返回数据:

{
  "page": 0,
  "totalPage": 50,
  "totalCount": 500,
  "pageSize": 10,
  "items": [
    {
      "symbol": "AAPL",
      "market": "US",
      "baseDataList": [
        { "index": 0, "name": "latest_price", "data": 227.52 }
      ]
    },
    {
      "symbol": "NVDA",
      "market": "US",
      "baseDataList": [
        { "index": 0, "name": "latest_price", "data": 138.85 }
      ]
    }
  ]
}

get_market_scanner_tags 选股器标签

async fn get_market_scanner_tags(&self, req: MarketScannerTagsRequest) -> Result<Vec<MarketScannerTagGroup>, TigerError>

说明

查询选股器支持的过滤字段标签列表,用于构建 multi_tags_filter_list 参数。返回按市场分组的标签列表,每组包含多个标签字段及其可选值。

v0.5.4 Breaking:返回类型从 Result<Option<MarketScannerTags>> 改为 Result<Vec<MarketScannerTagGroup>>MarketScannerTags 已标记为 deprecated,请改用 MarketScannerTagGroup

参数

参数名类型是否必填描述
req.marketOption<String>市场代码,如 "US"
req.multi_tags_fieldsOption<Vec<String>>要查询的标签字段名,如 vec!["MultiTagField_Industry".into()]

返回

Result<Vec<MarketScannerTagGroup>, TigerError>

每个 MarketScannerTagGroup 包含:

字段类型描述
marketString市场代码
multi_tag_fieldString标签字段名
tag_listVec<MarketScannerTag>该字段下的标签列表

每个 MarketScannerTag 包含 field(字段)、name(显示名)、values(可选值列表)。

示例

use tigeropen::model::{MarketScannerTagsRequest, MarketScannerTagGroup};

let groups = qc.get_market_scanner_tags(MarketScannerTagsRequest {
    market: Some("US".to_string()),
    multi_tags_fields: Some(vec!["MultiTagField_Industry".to_string()]),
    ..Default::default()
}).await?;

for g in &groups {
    println!("market={} field={} tags={}", g.market, g.multi_tag_field, g.tag_list.len());
    for tag in &g.tag_list {
        println!("  {} ({}) values={:?}", tag.field, tag.name, tag.values);
    }
}