Place Orders

Place Order

Signature

pub async fn place_order(&self, order: OrderRequest) -> Result<Option<PlaceOrderResult>, TigerError>

Description

Submit a real order. Requires trading permissions and sufficient buying power. Use preview_order to validate first.

Parameters

ParameterRust typeRequirementSDK default
order.accountOption<String>Do not set; the SDK always overwrites it with the TradeClient accountTradeClient account
order.idOption<i64>Do not set when placing an order; the server returns this global order ID after successful placementNone (omitted)
order.order_idOption<i64>Do not set when placing an order; the server returns this account-sequential order number after successful placementNone (omitted)
order.actionOption<String>Required by the server; legal values: BUY, SELL; not prevalidated by the SDKNone (omitted)
order.order_typeOption<String>Required by the server; legal values: MKT, LMT, STP, STP_LMT, VWAP, TWAP, TRAIL, ICEBERG; not prevalidated by the SDKNone (omitted)
order.total_quantityOption<i64>Required by the server; not prevalidated by the SDKNone (omitted)
order.limit_priceOption<f64>Required for LMT/STP_LMTNone (omitted)
order.aux_priceOption<f64>Required for STP/STP_LMT; for TRAIL, this is the trailing amount and should be used instead of trailing_percent as recommendedNone (omitted)
order.trailing_percentOption<f64>For TRAIL, use one of this field or aux_price as recommended; if set, must be greater than 0 and less than 100None (omitted)
order.time_in_forceOption<String>Optional; legal values: DAY, GTC, GTDNone (omitted)
order.outside_rthOption<bool>Optional; whether to allow pre-market and after-hours tradingNone (omitted)
order.order_legsOption<Vec<OrderLegRequest>>Optional; attached profit-taker and stop-loss ordersNone (omitted)
order.algo_paramsOption<AlgoParamsRequest>Optional; algorithm-order parametersNone (omitted)
order.symbolOption<String>Required by the server; not prevalidated by the SDKNone (omitted)
order.sec_typeOption<String>Required by the server; legal values: STK, OPT, FUT, WAR, IOPT, FUND, FOREX, MLEG, CC; not prevalidated by the SDKNone (omitted)
order.marketOption<String>OptionalNone (omitted)
order.currencyOption<String>OptionalNone (omitted)
order.expiryOption<String>Optional; option expiry date, for example 2024-01-19None (omitted)
order.strikeOption<String>OptionalNone (omitted)
order.rightOption<String>Required for OPT; legal values: CALL, PUTNone (omitted)
order.identifierOption<String>OptionalNone (omitted)
order.remarkOption<String>OptionalNone (omitted)
order.user_markOption<String>Optional; user remarkNone (omitted)
order.display_sizeOption<i64>OptionalNone (omitted)
order.min_display_sizeOption<i64>OptionalNone (omitted)
order.check_intervalsOption<i64>OptionalNone (omitted)
order.price_typeOption<String>Optional for ICEBERG; legal values: LIMIT_PRICE, ASK_PRICE, BID_PRICE, LATEST_PRICENone (omitted)
order.start_timeOption<i64>Optional; Iceberg effective start time as a Unix millisecond timestampNone (omitted)
order.end_timeOption<i64>Optional; Iceberg effective end time as a Unix millisecond timestampNone (omitted)
order.secret_keyOption<String>Optional; institutional-account trading keyInjected from client configuration when available; otherwise omitted
order.adjust_limitOption<f64>Optional; limit-price offset for scenarios such as STPNone (omitted)
order.expire_timeOption<i64>Required for GTD; Unix millisecond timestampNone (omitted)
order.trading_session_typeOption<String>OptionalNone (omitted)
order.exchangeOption<String>OptionalNone (omitted)
order.multiplierOption<String>OptionalNone (omitted)
order.local_symbolOption<String>OptionalNone (omitted)
order.alloc_accountsOption<Vec<String>>OptionalNone (omitted)
order.alloc_sharesOption<Vec<f64>>OptionalNone (omitted)
order.total_quantity_scaleOption<i32>OptionalNone (omitted)
order.attach_typeOption<String>Optional; legal values: PROFIT, LOSS, BRACKETSNone (omitted)
order.profit_taker_order_idOption<i64>OptionalNone (omitted)
order.profit_taker_priceOption<f64>OptionalNone (omitted)
order.profit_taker_tifOption<String>OptionalNone (omitted)
order.profit_taker_rthOption<bool>OptionalNone (omitted)
order.stop_loss_order_typeOption<String>Optional for stop-loss attachments; common values: STP, STP_LMT, TRAILNone (omitted)
order.stop_loss_order_idOption<i64>OptionalNone (omitted)
order.stop_loss_priceOption<f64>OptionalNone (omitted)
order.stop_loss_limit_priceOption<f64>OptionalNone (omitted)
order.stop_loss_tifOption<String>OptionalNone (omitted)
order.stop_loss_trailing_percentOption<f64>For a TRAIL stop-loss attachment, use one of this field or stop_loss_trailing_amount as recommended; if set, must be greater than 0 and less than 100None (omitted)
order.stop_loss_trailing_amountOption<f64>For a TRAIL stop-loss attachment, use one of this field or stop_loss_trailing_percent as recommended; if set, must be nonzeroNone (omitted)
order.combo_typeOption<String>OptionalNone (omitted)
order.contract_legsOption<Vec<ContractLegRequest>>OptionalNone (omitted)
order.oca_ordersOption<Vec<Box<OrderRequest>>>OptionalNone (omitted)
order.cash_amountOption<f64>OptionalNone (omitted)

Response

Result<Option<PlaceOrderResult>, TigerError>

FieldTypeDescription
idi64Global order ID
order_idi64Account-sequential order number
sub_idsVec<i64>Sub-order IDs
ordersVec<Order>Orders returned with the placement result; empty when none are returned

Example

use tigeropen::config::ClientConfig;
use tigeropen::model::order::limit_order;
use tigeropen::trade::TradeClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = ClientConfig::builder().build()?;
    let account = config.account.clone();
    let trade = TradeClient::from_config(config);

    let order = limit_order(&account, "AAPL", "STK", "BUY", 100, 195.50);
    let result = trade.place_order(order).await?;
    if let Some(r) = result {
        println!("Order placed, id={}, order_id={}", r.id, r.order_id);
    }
    Ok(())
}

Response Example

{
  "id": 31234567,
  "order_id": 100234,
  "subIds": []
}

Rate limit

The base rate limit is 120 requests/min.


Preview Order

Signature

pub async fn preview_order(&self, order: OrderRequest) -> Result<Option<PreviewResult>, TigerError>

Description

Preview an order without actually submitting it. Use to check commission, margin requirements, and feasibility.

Parameters

ParameterRust typeRequirementSDK default
order.accountOption<String>Do not set; the SDK always overwrites it with the TradeClient accountTradeClient account
order.idOption<i64>Not used for preview; leave as NoneNone (omitted)
order.order_idOption<i64>Not used for preview; leave as NoneNone (omitted)
order.actionOption<String>Required by the server; legal values: BUY, SELL; not prevalidated by the SDKNone (omitted)
order.order_typeOption<String>Required by the server; legal values: MKT, LMT, STP, STP_LMT, VWAP, TWAP, TRAIL, ICEBERG; not prevalidated by the SDKNone (omitted)
order.total_quantityOption<i64>Required by the server; not prevalidated by the SDKNone (omitted)
order.limit_priceOption<f64>Required for LMT/STP_LMTNone (omitted)
order.aux_priceOption<f64>Required for STP/STP_LMT; for TRAIL, this is the trailing amount and should be used instead of trailing_percent as recommendedNone (omitted)
order.trailing_percentOption<f64>For TRAIL, use one of this field or aux_price as recommended; if set, must be greater than 0 and less than 100None (omitted)
order.time_in_forceOption<String>Optional; legal values: DAY, GTC, GTDNone (omitted)
order.outside_rthOption<bool>Optional; whether to allow pre-market and after-hours tradingNone (omitted)
order.order_legsOption<Vec<OrderLegRequest>>Optional; attached profit-taker and stop-loss ordersNone (omitted)
order.algo_paramsOption<AlgoParamsRequest>Optional; algorithm-order parametersNone (omitted)
order.symbolOption<String>Required by the server; not prevalidated by the SDKNone (omitted)
order.sec_typeOption<String>Required by the server; legal values: STK, OPT, FUT, WAR, IOPT, FUND, FOREX, MLEG, CC; not prevalidated by the SDKNone (omitted)
order.marketOption<String>OptionalNone (omitted)
order.currencyOption<String>OptionalNone (omitted)
order.expiryOption<String>Optional; option expiry date, for example 2024-01-19None (omitted)
order.strikeOption<String>OptionalNone (omitted)
order.rightOption<String>Required for OPT; legal values: CALL, PUTNone (omitted)
order.identifierOption<String>OptionalNone (omitted)
order.remarkOption<String>OptionalNone (omitted)
order.user_markOption<String>Optional; user remarkNone (omitted)
order.display_sizeOption<i64>OptionalNone (omitted)
order.min_display_sizeOption<i64>OptionalNone (omitted)
order.check_intervalsOption<i64>OptionalNone (omitted)
order.price_typeOption<String>Optional for ICEBERG; legal values: LIMIT_PRICE, ASK_PRICE, BID_PRICE, LATEST_PRICENone (omitted)
order.start_timeOption<i64>Optional; Iceberg effective start time as a Unix millisecond timestampNone (omitted)
order.end_timeOption<i64>Optional; Iceberg effective end time as a Unix millisecond timestampNone (omitted)
order.secret_keyOption<String>Optional; institutional-account trading keyInjected from client configuration when available; otherwise omitted
order.adjust_limitOption<f64>Optional; limit-price offset for scenarios such as STPNone (omitted)
order.expire_timeOption<i64>Required for GTD; Unix millisecond timestampNone (omitted)
order.trading_session_typeOption<String>OptionalNone (omitted)
order.exchangeOption<String>OptionalNone (omitted)
order.multiplierOption<String>OptionalNone (omitted)
order.local_symbolOption<String>OptionalNone (omitted)
order.alloc_accountsOption<Vec<String>>OptionalNone (omitted)
order.alloc_sharesOption<Vec<f64>>OptionalNone (omitted)
order.total_quantity_scaleOption<i32>OptionalNone (omitted)
order.attach_typeOption<String>Optional; legal values: PROFIT, LOSS, BRACKETSNone (omitted)
order.profit_taker_order_idOption<i64>OptionalNone (omitted)
order.profit_taker_priceOption<f64>OptionalNone (omitted)
order.profit_taker_tifOption<String>OptionalNone (omitted)
order.profit_taker_rthOption<bool>OptionalNone (omitted)
order.stop_loss_order_typeOption<String>Optional for stop-loss attachments; common values: STP, STP_LMT, TRAILNone (omitted)
order.stop_loss_order_idOption<i64>OptionalNone (omitted)
order.stop_loss_priceOption<f64>OptionalNone (omitted)
order.stop_loss_limit_priceOption<f64>OptionalNone (omitted)
order.stop_loss_tifOption<String>OptionalNone (omitted)
order.stop_loss_trailing_percentOption<f64>For a TRAIL stop-loss attachment, use one of this field or stop_loss_trailing_amount as recommended; if set, must be greater than 0 and less than 100None (omitted)
order.stop_loss_trailing_amountOption<f64>For a TRAIL stop-loss attachment, use one of this field or stop_loss_trailing_percent as recommended; if set, must be nonzeroNone (omitted)
order.combo_typeOption<String>OptionalNone (omitted)
order.contract_legsOption<Vec<ContractLegRequest>>OptionalNone (omitted)
order.oca_ordersOption<Vec<Box<OrderRequest>>>OptionalNone (omitted)
order.cash_amountOption<f64>OptionalNone (omitted)

Response

Result<Option<PreviewResult>, TigerError>

FieldTypeDescription
is_passboolWhether the order is feasible
accountStringAccount
commissionf64Estimated commission
commission_currencyStringCommission currency
margin_currencyStringMargin currency
init_marginf64Initial margin
init_margin_beforef64Initial margin before preview
maint_marginf64Maintenance margin
maint_margin_beforef64Maintenance margin before preview
equity_with_loanf64Equity with loan value
equity_with_loan_beforef64Equity with loan before preview
available_eef64Available excess equity after the hypothetical fill, in margin_currency
excess_liquidityf64Excess liquidity after the hypothetical fill, in margin_currency
overnight_liquidationf64Overnight excess liquidity after the hypothetical fill, in margin_currency
gstf64Goods and services tax
messageStringMessage

These three asset fields may be absent for account types or scenarios where they do not apply. The Rust model uses non-nullable f64 values, so a missing field and an explicit zero both appear as 0.

Example

let order = limit_order(&account, "AAPL", "STK", "BUY", 100, 195.50);
let preview = trade.preview_order(order).await?;
if let Some(p) = preview {
    println!("pass={} commission={} margin={}", p.is_pass, p.commission, p.init_margin);
}

Response Example

{
  "isPass": true,
  "commission": 1.99,
  "commissionCurrency": "USD",
  "initMargin": 9775.0,
  "maintMargin": 9775.0,
  "equityWithLoan": 50000.0,
  "availableEE": 40225.0,
  "message": ""
}

Did this page help you?