订单查询
获取订单详情
签名
pub async fn get_order(&self, req: GetOrderRequest) -> Result<Option<Order>, TigerError>说明
根据订单 ID 获取单个订单详情。id 或 order_id 至少传一个。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.id | Option<i64> | 条件必填:id / order_id 至少一个 | None(不序列化) |
| req.order_id | Option<i64> | 条件必填:id / order_id 至少一个 | None(不序列化) |
| req.is_brief | Option<bool> | 可选 | None(不序列化) |
| req.show_charges | Option<bool> | 可选 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
返回
Result<Option<Order>, TigerError>
| 字段 | 类型 | 说明 |
|---|---|---|
| id | i64 | 全局订单 ID |
| order_id | i64 | 订单编号 |
| account | String | 账户 |
| symbol | String | 股票代码 |
| sec_type | String | 证券类型 |
| action | String | 交易方向 BUY/SELL |
| order_type | String | 订单类型 MKT/LMT/STP/STP_LMT/TRAIL |
| total_quantity | i64 | 下单数量 |
| filled_quantity | i64 | 已成交数量 |
| limit_price | f64 | 限价 |
| aux_price | f64 | 止损/跟踪价 |
| avg_fill_price | f64 | 按成交价格加权计算的成交均价,不含佣金和其他费用 |
| status | String | 订单状态 |
| time_in_force | String | 有效期 DAY/GTC/GTD |
| outside_rth | bool | 是否允许盘前盘后 |
| commission | f64 | 佣金;模型使用非可空数值,字段缺失与明确返回 0 都表现为 0 |
| realized_pnl | f64 | 已实现盈亏;佣金和 GST 通过独立字段返回。准确的计算口径和币种请以账户结单为准 |
| open_time | i64 | 下单时间(毫秒) |
| update_time | i64 | 更新时间(毫秒) |
| latest_time | i64 | 最后状态变更时间 |
| name | String | 股票名称 |
| currency | String | 币种 |
| market | String | 市场 |
| user_mark | String | 用户备注 |
| can_modify | bool | 是否可改单 |
| can_cancel | bool | 是否可撤单 |
gst、replace_status 和 cancel_status 也由 Order 模型公开。gst 使用非可空数值,无法区分字段缺失和明确返回的 0;replace_status/cancel_status 用于跟踪异步改单和撤单请求。
示例
use tigeropen::config::ClientConfig;
use tigeropen::model::trade_requests::GetOrderRequest;
use tigeropen::trade::TradeClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = ClientConfig::builder().build()?;
let trade = TradeClient::from_config(config);
let order = trade.get_order(GetOrderRequest { id: Some(31234567), ..Default::default() }).await?;
if let Some(o) = order {
println!("{} {} {} qty={} filled={} status={}", o.symbol, o.action, o.order_type, o.total_quantity, o.filled_quantity, o.status);
}
Ok(())
}返回示例
{
"id": 31234567,
"orderId": 100234,
"account": "402901",
"symbol": "AAPL",
"secType": "STK",
"action": "BUY",
"orderType": "LMT",
"totalQuantity": 100,
"filledQuantity": 100,
"limitPrice": 195.50,
"avgFillPrice": 195.48,
"status": "Filled",
"timeInForce": "DAY",
"outsideRth": true,
"commission": 1.99,
"realizedPnl": 0.0,
"openTime": 1719216000000,
"currency": "USD",
"market": "US",
"canModify": false,
"canCancel": false
}请求频率
基础限流为 120 次/分钟。
获取订单列表
签名
pub async fn get_orders(&self, req: OrdersRequest) -> Result<Vec<Order>, TigerError>说明
获取账户所有订单,支持按状态、证券类型、时间等过滤。
start_date 和 end_date 均为可选;省略任一边界表示不应用对应方向的时间过滤。接口不限制最大查询跨度,但单次返回数量受 limit 限制。建议指定合理的有界时间范围。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.sec_type | Option<String> | 可选 | None(不序列化) |
| req.market | Option<String> | 可选 | None(不序列化) |
| req.symbol | Option<String> | 可选 | None(不序列化) |
| req.start_date | Option<i64> | 可选;开始时间,Unix 毫秒时间戳 | None(不序列化) |
| req.end_date | Option<i64> | 可选;结束时间,Unix 毫秒时间戳 | None(不序列化) |
| req.limit | Option<i32> | 可选;返回数量上限 | None(不序列化) |
| req.is_brief | Option<bool> | 可选 | None(不序列化) |
| req.states | Option<Vec<String>> | 可选 | None(不序列化) |
| req.sort_by | Option<String> | 可选 | None(不序列化) |
| req.seg_type | Option<String> | 可选 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
| req.page_token | Option<String> | 可选;分页令牌 | None(不序列化) |
| req.parent_id | Option<i64> | 可选 | None(不序列化) |
返回
Result<Vec<Order>, TigerError>
返回字段同 获取订单详情。
示例
let orders = trade.get_orders(OrdersRequest { limit: Some(20), ..Default::default() }).await?;
for o in &orders {
println!("[{}] {} {} {} qty={} status={}", o.id, o.symbol, o.action, o.order_type, o.total_quantity, o.status);
}返回示例
[
{
"id": 31234567,
"orderId": 100234,
"account": "402901",
"symbol": "AAPL",
"action": "BUY",
"orderType": "LMT",
"totalQuantity": 100,
"filledQuantity": 100,
"status": "Filled",
"limitPrice": 195.50,
"avgFillPrice": 195.48,
"commission": 1.99,
"openTime": 1719216000000
}
]请求频率
基础限流为 120 次/分钟。
获取待成交订单
签名
pub async fn get_active_orders(&self, req: OrdersRequest) -> Result<Vec<Order>, TigerError>说明
获取当前活跃(待成交)的订单。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.sec_type | Option<String> | 可选 | None(不序列化) |
| req.market | Option<String> | 可选 | None(不序列化) |
| req.symbol | Option<String> | 可选 | None(不序列化) |
| req.start_date | Option<i64> | 可选;开始时间,Unix 毫秒时间戳 | None(不序列化) |
| req.end_date | Option<i64> | 可选;结束时间,Unix 毫秒时间戳 | None(不序列化) |
| req.limit | Option<i32> | 可选;返回数量上限 | None(不序列化) |
| req.is_brief | Option<bool> | 可选 | None(不序列化) |
| req.states | Option<Vec<String>> | 可选 | None(不序列化) |
| req.sort_by | Option<String> | 可选 | None(不序列化) |
| req.seg_type | Option<String> | 可选 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
| req.page_token | Option<String> | 可选;分页令牌 | None(不序列化) |
| req.parent_id | Option<i64> | 可选 | None(不序列化) |
返回
Result<Vec<Order>, TigerError>
返回字段同 获取订单详情。
示例
let active = trade.get_active_orders(OrdersRequest::default()).await?;
println!("当前待成交订单 {} 笔", active.len());返回示例
[{"id":31234567,"symbol":"AAPL","status":"Submitted"}]请求频率
基础限流为 120 次/分钟。
获取已撤销订单
签名
pub async fn get_inactive_orders(&self, req: OrdersRequest) -> Result<Vec<Order>, TigerError>说明
获取已撤销或失效的订单。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.sec_type | Option<String> | 可选 | None(不序列化) |
| req.market | Option<String> | 可选 | None(不序列化) |
| req.symbol | Option<String> | 可选 | None(不序列化) |
| req.start_date | Option<i64> | 可选;开始时间,Unix 毫秒时间戳 | None(不序列化) |
| req.end_date | Option<i64> | 可选;结束时间,Unix 毫秒时间戳 | None(不序列化) |
| req.limit | Option<i32> | 可选;返回数量上限 | None(不序列化) |
| req.is_brief | Option<bool> | 可选 | None(不序列化) |
| req.states | Option<Vec<String>> | 可选 | None(不序列化) |
| req.sort_by | Option<String> | 可选 | None(不序列化) |
| req.seg_type | Option<String> | 可选 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
| req.page_token | Option<String> | 可选;分页令牌 | None(不序列化) |
| req.parent_id | Option<i64> | 可选 | None(不序列化) |
返回
Result<Vec<Order>, TigerError>
返回字段同 获取订单详情。
示例
let inactive = trade.get_inactive_orders(OrdersRequest::default()).await?;返回示例
[{"id":31234567,"symbol":"AAPL","status":"Cancelled"}]请求频率
基础限流为 120 次/分钟。
获取已成交订单
签名
pub async fn get_filled_orders(&self, req: OrdersRequest) -> Result<Vec<Order>, TigerError>说明
获取已成交的订单。可通过 start_date/end_date 过滤时间范围(13 位毫秒时间戳)。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.sec_type | Option<String> | 可选 | None(不序列化) |
| req.market | Option<String> | 可选 | None(不序列化) |
| req.symbol | Option<String> | 可选 | None(不序列化) |
| req.start_date | Option<i64> | 可选;开始时间,Unix 毫秒时间戳 | None(不序列化) |
| req.end_date | Option<i64> | 可选;结束时间,Unix 毫秒时间戳 | None(不序列化) |
| req.limit | Option<i32> | 可选;返回数量上限 | None(不序列化) |
| req.is_brief | Option<bool> | 可选 | None(不序列化) |
| req.states | Option<Vec<String>> | 可选 | None(不序列化) |
| req.sort_by | Option<String> | 可选 | None(不序列化) |
| req.seg_type | Option<String> | 可选 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
| req.page_token | Option<String> | 可选;分页令牌 | None(不序列化) |
| req.parent_id | Option<i64> | 可选 | None(不序列化) |
返回
Result<Vec<Order>, TigerError>
返回字段同 获取订单详情。
示例
let filled = trade.get_filled_orders(OrdersRequest::default()).await?;
for o in &filled {
println!("{} {} 成交均价={} 佣金={}", o.symbol, o.action, o.avg_fill_price, o.commission);
}返回示例
[{"id":31234567,"symbol":"AAPL","status":"Filled","filledQuantity":100,"avgFillPrice":195.48}]请求频率
基础限流为 120 次/分钟。
获取成交记录
签名
pub async fn get_order_transactions(&self, req: OrderTransactionsRequest) -> Result<Vec<Transaction>, TigerError>说明
获取订单的成交明细记录。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.order_id | Option<i64> | 可选;按订单 ID 过滤 | None(不序列化) |
| req.symbol | Option<String> | 服务端必填;SDK 不预校验 | None(不序列化) |
| req.sec_type | Option<String> | 可选;按证券类型过滤 | None(不序列化) |
| req.start_date | Option<i64> | 可选;开始时间,Unix 毫秒时间戳 | None(不序列化) |
| req.end_date | Option<i64> | 可选;结束时间,Unix 毫秒时间戳 | None(不序列化) |
| req.limit | Option<i32> | 可选;返回数量上限 | None(不序列化) |
| req.expiry | Option<String> | 可选 | None(不序列化) |
| req.strike | Option<f64> | 可选 | None(不序列化) |
| req.put_call | Option<String> | 可选 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
| req.page_token | Option<String> | 可选;分页令牌 | None(不序列化) |
返回
Result<Vec<Transaction>, TigerError>
| 字段 | 类型 | 说明 |
|---|---|---|
| id | i64 | 成交 ID |
| order_id | i64 | 订单编号 |
| account | String | 账户 |
| symbol | String | 股票代码 |
| sec_type | String | 证券类型 |
| action | String | 交易方向 |
| filled_price | f64 | 成交价格 |
| filled_quantity | i64 | 成交数量 |
| filled_amount | f64 | 成交金额 |
| commission | f64 | 佣金 |
| transacted_at | String | 成交时间 |
| transaction_time | i64 | 成交时间戳(毫秒) |
| currency | String | 币种 |
| market | String | 市场 |
示例
use tigeropen::model::trade_requests::OrderTransactionsRequest;
let txns = trade.get_order_transactions(OrderTransactionsRequest {
symbol: Some("AAPL".into()),
..Default::default()
}).await?;
for t in &txns {
println!("成交 {} {} 价格={} 数量={}", t.symbol, t.action, t.filled_price, t.filled_quantity);
}返回示例
[
{
"id": 987654,
"orderId": 100234,
"account": "402901",
"symbol": "AAPL",
"secType": "STK",
"action": "BUY",
"filledPrice": 195.48,
"filledQuantity": 100,
"filledAmount": 19548.0,
"commission": 1.99,
"transactedAt": "2025-06-24T15:30:01Z",
"transactionTime": 1719240601000,
"currency": "USD",
"market": "US"
}
]请求频率
基础限流为 60 次/分钟。
Updated 6 days ago
