Trading
The C# SDK provides all trading APIs through TradeClient. All requests use the TigerRequest<TResponse> generic wrapper and are called asynchronously via await tradeClient.ExecuteAsync(request). Full runnable example:
using TigerOpenAPI.Common;
using TigerOpenAPI.Trade;
using TigerOpenAPI.Trade.Response;
using TigerOpenAPI.Trade.Model;
TigerConfig config = new TigerConfig()
{
ConfigFilePath = "/path/to/tiger_openapi_config.properties"
};
TradeClient tradeClient = new TradeClient(config);
// Get positions
TigerRequest<PositionsResponse> request = new TigerRequest<PositionsResponse>()
{
ApiMethodName = TradeApiService.POSITIONS,
ModelValue = new PositionsModel() { Account = config.DefaultAccount }
};
PositionsResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine(response);Contract Query
contract Query Contract Info
Description
Query detailed information for a contract including name, currency, and minimum trade unit.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Symbol | string | Yes | Contract symbol, e.g. "AAPL", "00700" |
| SecType | string | Yes | Security type: "STK" (stock) / "OPT" (option) / "FUT" (future) / "WAR" (warrant) / "IOPT" (inline warrant) |
Returns
ContractResponse containing contract details with Symbol, Name, Currency, Exchange, LotSize, etc.
Example
// US stock contract
ContractItem contract = ContractItem.BuildStockContract("AAPL", Currency.USD.ToString());
TigerRequest<ContractResponse> request = new TigerRequest<ContractResponse>()
{
ApiMethodName = TradeApiService.CONTRACT,
ModelValue = new ContractModel() { ContractInfo = contract }
};
ContractResponse response = await tradeClient.ExecuteAsync(request);
// HK stock contract
ContractItem hkContract = ContractItem.BuildStockContract("00700", Currency.HKD.ToString());quoteContract Query Derivative Contract
Description
Query detailed info for options or futures contracts, including strike, expiry, multiplier, and other derivative-specific fields.
Example
// US option contract
ContractItem optContract = ContractItem.BuildOptionContract("AAPL", "20250117", 150.0D, "CALL");
// HK warrant contract
ContractItem warContract = ContractItem.BuildWarrantContract("13745", "20211217", 719.38D, Right.CALL.ToString());Orders
Order Object
Orders are built using ContractItem and PlaceOrderModel:
| Field | Type | Description |
|---|---|---|
| Account | string | Account ID |
| ContractInfo | ContractItem | Contract object |
| Action | ActionType | Direction: ActionType.BUY / ActionType.SELL |
| OrderType | OrderType | Type: OrderType.MKT / OrderType.LMT / OrderType.STP / OrderType.STP_LMT / OrderType.TRAIL |
| TotalQuantity | double | Number of shares/contracts |
| LimitPrice | double | Limit price (required for LMT / STP_LMT) |
| AuxPrice | double | Stop trigger price (required for STP / STP_LMT / TRAIL) |
| TimeInForce | TimeInForce | TimeInForce.DAY / TimeInForce.GTC |
| OutsideRth | bool | Allow extended-hours trading (US stocks only) |
placeOrder Place Order
Description
Submit an order to the exchange. Returns an order ID on success.
Example
// Limit buy AAPL
ContractItem contract = ContractItem.BuildStockContract("AAPL", Currency.USD.ToString());
PlaceOrderModel orderModel = PlaceOrderModel.buildLimitOrder(
config.DefaultAccount, contract, ActionType.BUY, 10, 150.0D);
TigerRequest<PlaceOrderResponse> request = new TigerRequest<PlaceOrderResponse>()
{
ApiMethodName = TradeApiService.PLACE_ORDER,
ModelValue = orderModel
};
PlaceOrderResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine("Order ID: " + response.OrderId);
// Market sell
PlaceOrderModel mktOrder = PlaceOrderModel.buildMarketOrder(
config.DefaultAccount, contract, ActionType.SELL, 10);
// Extended hours order
PlaceOrderModel extOrder = PlaceOrderModel.buildLimitOrder(
config.DefaultAccount, contract, ActionType.BUY, 5, 148.0D);
extOrder.OutsideRth = true;
extOrder.TimeInForce = TimeInForce.DAY;Data Sample
Response:
{
"orderId": 12345678,
"status": "Submitted",
"symbol": "AAPL"
}previewOrder Preview Order
Description
Estimate order costs and feasibility without actually submitting to the exchange.
Example
ContractItem contract = ContractItem.BuildStockContract("AAPL", Currency.USD.ToString());
PlaceOrderModel orderModel = PlaceOrderModel.buildLimitOrder(
config.DefaultAccount, contract, ActionType.BUY, 10, 150.0D);
TigerRequest<PreviewOrderResponse> request = new TigerRequest<PreviewOrderResponse>()
{
ApiMethodName = TradeApiService.PREVIEW_ORDER,
ModelValue = orderModel
};
PreviewOrderResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine("Estimated commission: " + response.Commission);Special Order Types
Stop Order (STP)
PlaceOrderModel stpOrder = PlaceOrderModel.buildStopOrder(
config.DefaultAccount, contract, ActionType.SELL, 10, 145.0D);Stop Limit Order (STP_LMT)
PlaceOrderModel stpLmtOrder = PlaceOrderModel.buildStopLimitOrder(
config.DefaultAccount, contract, ActionType.SELL, 10, 145.0D, 144.0D);Trailing Stop Order (TRAIL)
PlaceOrderModel trailOrder = new PlaceOrderModel()
{
Account = config.DefaultAccount,
ContractInfo = contract,
Action = ActionType.SELL,
OrderType = OrderType.TRAIL,
TotalQuantity = 10,
AuxPrice = 5.0D // Trailing amount
};Auction Orders
// Auction market order (AM)
PlaceOrderModel amOrder = new PlaceOrderModel()
{
Account = config.DefaultAccount,
ContractInfo = contract,
Action = ActionType.BUY,
OrderType = OrderType.AUCTION_MKT,
TotalQuantity = 10
};
// Auction limit order (AL)
PlaceOrderModel alOrder = new PlaceOrderModel()
{
Account = config.DefaultAccount,
ContractInfo = contract,
Action = ActionType.BUY,
OrderType = OrderType.AUCTION_LIMIT,
TotalQuantity = 10,
LimitPrice = 150.0D
};Iceberg Order
ContractItem contract = ContractItem.BuildStockContract("AAPL", Currency.USD.ToString());
// Basic parameters (defaults to LIMIT_PRICE mode)
PlaceOrderModel icebergOrder = PlaceOrderModel.BuildIcebergOrder(
config.DefaultAccount, contract, ActionType.BUY, 1000, 180.0, 100);
// Full parameters
// priceType options: ICEBERG_PRICE_TYPE_LIMIT / ICEBERG_PRICE_TYPE_ASK / ICEBERG_PRICE_TYPE_BID / ICEBERG_PRICE_TYPE_LATEST
PlaceOrderModel icebergFull = PlaceOrderModel.BuildIcebergOrder(
config.DefaultAccount, contract, ActionType.BUY, 1000, 180.0,
100, 50, 30, // displaySize, minDisplaySize, checkIntervals
PlaceOrderModel.ICEBERG_PRICE_TYPE_LIMIT, // priceType
startTime, endTime);Option Order
ContractItem optContract = ContractItem.BuildOptionContract("AAPL", "20250117", 150.0D, "CALL");
PlaceOrderModel optOrder = PlaceOrderModel.buildLimitOrder(
config.DefaultAccount, optContract, ActionType.BUY, 1, 9.50D);Futures Order
ContractItem futContract = ContractItem.BuildFutureContract("ES2506", Currency.USD.ToString());
PlaceOrderModel futOrder = PlaceOrderModel.buildLimitOrder(
config.DefaultAccount, futContract, ActionType.BUY, 1, 5900.0D);modifyOrder Modify Order
Description
Modify an open order (not yet fully filled). Supports changing price and quantity.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Id | long | Yes | Order ID to modify |
| LimitPrice | double | No | New limit price |
| TotalQuantity | double | No | New quantity |
Example
ModifyOrderModel modifyModel = new ModifyOrderModel()
{
Account = config.DefaultAccount,
Id = 12345,
LimitPrice = 148.0D,
TotalQuantity = 10
};
TigerRequest<ModifyOrderResponse> request = new TigerRequest<ModifyOrderResponse>()
{
ApiMethodName = TradeApiService.MODIFY_ORDER,
ModelValue = modifyModel
};
ModifyOrderResponse response = await tradeClient.ExecuteAsync(request);Iceberg order modification: Supports modifying
TotalQuantity,LimitPrice,DisplaySize,MinDisplaySize,CheckIntervals,StartTime,EndTime.PriceTypecannot be modified.
cancelOrder Cancel Order
Description
Cancel a pending order. Only orders with pending status can be cancelled.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Id | long | Yes | Order ID to cancel |
Example
CancelOrderModel cancelModel = new CancelOrderModel()
{
Account = config.DefaultAccount,
Id = 12345
};
TigerRequest<CancelOrderResponse> request = new TigerRequest<CancelOrderResponse>()
{
ApiMethodName = TradeApiService.CANCEL_ORDER,
ModelValue = cancelModel
};
CancelOrderResponse response = await tradeClient.ExecuteAsync(request);Order Queries
orders Get All Orders
Description
Query all historical orders for the account across all statuses.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Account ID |
| SecType | string | No | Security type filter |
| Market | Market | No | Market filter |
| Symbol | string | No | Symbol filter |
| StartTime | long | No | Start timestamp (ms) |
| EndTime | long | No | End timestamp (ms) |
| Limit | int | No | Max results, up to 100 |
Returns
OrderBatchResponse containing a list of orders, each with Id, Symbol, Action, Status, TotalQuantity, FilledQuantity, LimitPrice, AvgFillPrice, CreateTime, etc.
Example
TigerRequest<OrderBatchResponse> request = new TigerRequest<OrderBatchResponse>()
{
ApiMethodName = TradeApiService.ORDERS,
ModelValue = new QueryOrderModel() { Account = config.DefaultAccount }
};
OrderBatchResponse response = await tradeClient.ExecuteAsync(request);Data Sample
Response:
[
{
"id": 12345678,
"symbol": "AAPL",
"action": "BUY",
"status": "Filled",
"totalQuantity": 10,
"filledQuantity": 10,
"limitPrice": 150.0,
"avgFillPrice": 149.95,
"createTime": 1735042800000
}
]activeOrders Get Active Orders
Description
Get all open/pending orders that have not been fully filled.
Example
TigerRequest<OrderBatchResponse> request = new TigerRequest<OrderBatchResponse>()
{
ApiMethodName = TradeApiService.ACTIVE_ORDERS,
ModelValue = new QueryOrderModel() { Account = config.DefaultAccount }
};
OrderBatchResponse response = await tradeClient.ExecuteAsync(request);filledOrders Get Filled Orders
Description
Get all fully executed orders.
Example
TigerRequest<OrderBatchResponse> request = new TigerRequest<OrderBatchResponse>()
{
ApiMethodName = TradeApiService.FILLED_ORDERS,
ModelValue = new QueryOrderModel() { Account = config.DefaultAccount }
};
OrderBatchResponse response = await tradeClient.ExecuteAsync(request);inactiveOrders Get Inactive Orders
Description
Get all cancelled or expired orders.
Example
TigerRequest<OrderBatchResponse> request = new TigerRequest<OrderBatchResponse>()
{
ApiMethodName = TradeApiService.INACTIVE_ORDERS,
ModelValue = new QueryOrderModel() { Account = config.DefaultAccount }
};
OrderBatchResponse response = await tradeClient.ExecuteAsync(request);orderTransactions Get Order Fills
Description
Get individual fill records for an order. One order may have multiple partial fills.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Id | long | Yes | Order ID |
Example
TigerRequest<OrderTransactionsResponse> request = new TigerRequest<OrderTransactionsResponse>()
{
ApiMethodName = TradeApiService.ORDER_TRANSACTIONS,
ModelValue = new OrderTransactionsModel() { Account = config.DefaultAccount, Symbol = "AAPL" }
};
OrderTransactionsResponse response = await tradeClient.ExecuteAsync(request);Positions & Assets
positions Get Positions
Description
Query all current positions for the account across stocks, options, and futures.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Account ID |
| SecType | string | No | Security type filter |
| Market | Market | No | Market filter |
| Symbol | string | No | Symbol filter |
Returns
PositionsResponse containing a list of positions, each with Symbol, Quantity, AverageCost, MarketValue, UnrealizedPnl, RealizedPnl, etc.
Example
TigerRequest<PositionsResponse> request = new TigerRequest<PositionsResponse>()
{
ApiMethodName = TradeApiService.POSITIONS,
ModelValue = new PositionsModel() { Account = config.DefaultAccount }
};
PositionsResponse response = await tradeClient.ExecuteAsync(request);Data Sample
Response:
[
{
"symbol": "AAPL",
"quantity": 100,
"averageCost": 145.50,
"marketValue": 22752.0,
"unrealizedPnl": 2202.0,
"realizedPnl": 500.0
}
]assets Get Assets
Description
Query account asset overview including net liquidation, cash balance, and margin usage.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Account ID |
Returns
TigerDictResponse containing NetLiquidation, CashBalance, BuyingPower, GrossPositionValue, UnrealizedPnl, RealizedPnl, etc.
Example
TigerRequest<TigerDictResponse> request = new TigerRequest<TigerDictResponse>()
{
ApiMethodName = TradeApiService.ASSETS,
ModelValue = new GlobalAssetsModel() { Account = config.DefaultAccount }
};
TigerDictResponse response = await tradeClient.ExecuteAsync(request);Data Sample
Response:
{
"account": "123456789",
"netLiquidation": 250000.0,
"cashBalance": 50000.0,
"buyingPower": 100000.0,
"grossPositionValue": 200000.0,
"unrealizedPnl": 5000.0,
"realizedPnl": 3000.0
}primeAssets Get Prime Account Assets
Description
Query consolidated account (Prime account) assets including sub-account summaries.
Example
TigerRequest<PrimeAssetResponse> request = new TigerRequest<PrimeAssetResponse>()
{
ApiMethodName = TradeApiService.PRIME_ASSETS,
ModelValue = new PrimeAssetsModel() { Account = config.DefaultAccount }
};
PrimeAssetResponse response = await tradeClient.ExecuteAsync(request);accountList Get Account List
Description
Query all accounts under the current user, including live and paper trading accounts.
Example
TigerRequest<AccountsResponse> request = new TigerRequest<AccountsResponse>()
{
ApiMethodName = TradeApiService.MANAGED_ACCOUNTS
};
AccountsResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine("Accounts: " + string.Join(", ", response.Accounts));Fund & Asset Management
transferFund Query Deposit/Withdrawal Records
Description
Query deposit and withdrawal records for a trading account.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Trading account ID |
| SegType | SegmentType | No | Segment: SegmentType.SEC / SegmentType.FUT |
| StartDate | string | No | Start date "YYYY-MM-DD" |
| EndDate | string | No | End date "YYYY-MM-DD" |
| Currency | string | No | Currency filter, e.g. "USD" |
| Page | int | No | Page number |
| Limit | int | No | Page size |
Returns
DepositWithdrawResponse → List<DepositWithdrawItem>
| Field | Type | Description |
|---|---|---|
| Id | long | Record ID |
| Type | string | Type |
| Currency | string | Currency |
| Amount | decimal | Amount |
| BusinessDate | string | Business date |
| CompletedStatus | string | Status |
| CreatedAt | long | Created timestamp (ms) |
Example
TigerRequest<DepositWithdrawResponse> request = new TigerRequest<DepositWithdrawResponse>()
{
ApiMethodName = TradeApiService.TRANSFER_FUND,
ModelValue = new DepositWithdrawModel { Account = config.DefaultAccount, SegType = SegmentType.SEC }
};
DepositWithdrawResponse response = await tradeClient.ExecuteAsync(request);fundDetails Query Fund Details
Description
Query fund flow details (capital ledger) for a trading account, supporting pagination.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Trading account ID |
| SegTypes | List<string> | Yes | Segment type list |
| FundType | string | No | Fund flow type filter |
| Currency | string | No | Currency filter |
| StartDate | string | No | Start date |
| EndDate | string | No | End date |
| Start | long | No | Pagination start offset |
| Limit | long | No | Page size |
Returns
FundDetailsResponse → FundDetailsPageItem → List<FundDetailsItem>
| Field | Type | Description |
|---|---|---|
| Page | int | Current page |
| Limit | long | Page size |
| PageCount | int | Total pages |
| ItemCount | long | Total items |
| Items | List<FundDetailsItem> | Detail list |
FundDetailsItem fields: Id, Currency, Type, Desc, ContractName, SegType, Amount, BusinessDate, UpdatedAt
Example
TigerRequest<FundDetailsResponse> request = new TigerRequest<FundDetailsResponse>()
{
ApiMethodName = TradeApiService.FUND_DETAILS,
ModelValue = new FundDetailsModel(config.DefaultAccount, new List<string> { "SEC" })
};
FundDetailsResponse response = await tradeClient.ExecuteAsync(request);aggregateAssets Query Aggregate Assets
Description
Query aggregated asset summary for a trading account, including net liquidation value, margin, available cash, and more.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Trading account ID |
| SegType | string | Yes | Segment: "SEC" / "FUT" |
| BaseCurrency | string | No | Base currency for conversion |
Returns
AggregateAssetResponse → AggregateAssetItem
| Field | Type | Description |
|---|---|---|
| Currency | string | Currency |
| CashBalance | decimal | Cash balance |
| NetLiquidation | decimal | Net liquidation value |
| InitMargin | decimal | Initial margin |
| MaintainMargin | decimal | Maintenance margin |
| AvailableCash | decimal | Available cash |
| ExcessEquity | decimal | Excess equity |
| BuyingPower | decimal | Buying power |
| GrossPositionValue | decimal | Gross position value |
Example
TigerRequest<AggregateAssetResponse> request = new TigerRequest<AggregateAssetResponse>()
{
ApiMethodName = TradeApiService.AGGREGATE_ASSETS,
ModelValue = new AggregateAssetModel(config.DefaultAccount, "SEC")
};
AggregateAssetResponse response = await tradeClient.ExecuteAsync(request);Position Transfer
positionTransfer Initiate Position Transfer
Description
Initiate an internal position transfer between two accounts.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| FromAccount | string | Yes | Source account ID |
| ToAccount | string | Yes | Target account ID |
| Market | string | Yes | Market |
| Items | List<PositionTransferDetail> | Yes | Positions to transfer |
PositionTransferDetail fields: Symbol, SecType, Expiry, Strike, Right, Quantity
Returns
PositionTransferResponse → PositionTransferItem
| Field | Type | Description |
|---|---|---|
| Id | long | Transfer ID |
| Status | string | Status |
| Direction | string | Direction |
| CreatedAt | long | Created timestamp (ms) |
Example
var items = new List<PositionTransferDetail>
{
new PositionTransferDetail { Symbol = "AAPL", SecType = "STK", Quantity = 100 }
};
TigerRequest<PositionTransferResponse> request = new TigerRequest<PositionTransferResponse>()
{
ApiMethodName = TradeApiService.POSITION_TRANSFER,
ModelValue = new PositionTransferModel(config.DefaultAccount, "account_b", "US", items)
};
PositionTransferResponse response = await tradeClient.ExecuteAsync(request);positionTransferRecords Query Position Transfer Records
Description
Query internal position transfer history for an account.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Trading account ID |
| SinceDate | string | No | Start date "YYYY-MM-DD" |
| ToDate | string | No | End date "YYYY-MM-DD" |
| Status | string | No | Status filter |
| Market | string | No | Market filter |
| Symbol | string | No | Symbol filter |
Returns
PositionTransferRecordsResponse → List<PositionTransferRecordItem>
Fields: Id, AccountId, CounterpartyAccountId, Method, Direction, Status, Memo, CreatedAt, UpdatedAt
Example
TigerRequest<PositionTransferRecordsResponse> request = new TigerRequest<PositionTransferRecordsResponse>()
{
ApiMethodName = TradeApiService.POSITION_TRANSFER_RECORDS,
ModelValue = new PositionTransferRecordsModel(config.DefaultAccount, "2025-01-01", "2025-04-01")
};
PositionTransferRecordsResponse response = await tradeClient.ExecuteAsync(request);positionTransferDetail Query Position Transfer Detail
Description
Query the detail of a single position transfer, including per-symbol status.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Id | long | Yes | Transfer ID |
| Account | string | Yes | Trading account ID |
Returns
PositionTransferDetailResponse → PositionTransferDetailItem → List<PositionTransferStockDetail>
PositionTransferStockDetail fields: Symbol, Market, Quantity, Status, Message, UpdatedAt
Example
TigerRequest<PositionTransferDetailResponse> request = new TigerRequest<PositionTransferDetailResponse>()
{
ApiMethodName = TradeApiService.POSITION_TRANSFER_DETAIL,
ModelValue = new PositionTransferDetailModel(transferId, config.DefaultAccount)
};
PositionTransferDetailResponse response = await tradeClient.ExecuteAsync(request);positionTransferExternalRecords Query External Position Transfer Records
Description
Query external broker (ACATS) position transfer records for an account.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| Account | string | Yes | Trading account ID |
| SinceDate | string | No | Start date |
| ToDate | string | No | End date |
| Status | string | No | Status filter |
Returns
PositionTransferExternalRecordsResponse → List<PositionTransferExternalRecordItem>
Key fields: Id, Status, InstitutionName, DtcNumber, TransferMethod, Side, Market, FullPortfolio, AllFinished, CreatedAt
Example
TigerRequest<PositionTransferExternalRecordsResponse> request = new TigerRequest<PositionTransferExternalRecordsResponse>()
{
ApiMethodName = TradeApiService.POSITION_TRANSFER_EXTERNAL_RECORDS,
ModelValue = new PositionTransferRecordsModel(config.DefaultAccount, "2025-01-01", "2025-04-01")
};
PositionTransferExternalRecordsResponse response = await tradeClient.ExecuteAsync(request);Option Exercise
As of v0.4.2, the SDK provides 5 option exercise endpoints, all called via TradeClient.ExecuteAsync().
Exercise Types
| Value | Description |
|---|---|
"Exercise" | Early exercise — exercise the option before expiry |
"Expire" | Early waive — voluntarily waive the right to exercise before expiry |
optionExerciseCheck
Estimates the position change in the underlying stock after exercise or waive.
Request model
| Field | Type | Description |
|---|---|---|
ContractId | long | Option contract ID |
ExerciseType | string | "Exercise" / "Expire" |
Quantity | double | Exercise quantity (> 0) |
ExecutingDate | string | Execution date yyyy-MM-dd (recommended for Exercise) |
IsForce | bool | Whether to force exercise (recommended for Exercise) |
ItmRate | int | ITM rate threshold 0–10 (Expire only) |
SecretKey | string | Trader key for institutional/Prime accounts |
Return (OptionExerciseCheckResponse)
OptionExerciseCheckItem fields:
| Field | Type | Description |
|---|---|---|
AvailableQuantity | double | Exercisable quantity |
Position | double | Current option position |
StkPosition | double | Current underlying stock position |
StkPositionChange | double | Stock position change after exercise |
StkPositionBefore | double | Stock position before exercise |
StkPositionAfter | double | Stock position after exercise |
Symbol | string | Underlying stock symbol |
TigerRequest<OptionExerciseCheckResponse> request = new TigerRequest<OptionExerciseCheckResponse>()
{
ApiMethodName = TradeApiService.OPTION_EXERCISE_CHECK,
ModelValue = new OptionExerciseCheckModel(
contractId: 1234567890L,
exerciseType: "Exercise",
quantity: 1.0,
executingDate: "2025-06-20",
isForce: false,
account: config.DefaultAccount
)
};
OptionExerciseCheckResponse response = await tradeClient.ExecuteAsync(request);
OptionExerciseCheckItem item = response.Item;
Console.WriteLine($"symbol={item.Symbol} availableQty={item.AvailableQuantity}");
Console.WriteLine($"stkBefore={item.StkPositionBefore} stkAfter={item.StkPositionAfter}");optionExercisePosition
Returns the list of option positions that can be exercised or waived.
Request model
| Field | Type | Description |
|---|---|---|
ExerciseType | string | "Exercise" / "Expire" |
SecretKey | string | Trader key for institutional/Prime accounts |
Return (OptionExercisePositionResponse)
Pagination fields: PageNum, PageSize, ItemCount, PageCount
OptionExercisePositionItem fields:
| Field | Type | Description |
|---|---|---|
ContractId | long | Option contract ID |
Symbol | string | Option contract symbol |
StkSymbol | string | Underlying stock symbol |
ExpireDate | string | Expiry date yyyy-MM-dd |
Strike | string | Strike price |
CallPut | string | CALL / PUT |
Market | string | Market |
AccountId | long | Account ID |
Position | double | Position quantity |
AvailableQuantity | double | Exercisable quantity |
TigerRequest<OptionExercisePositionResponse> request = new TigerRequest<OptionExercisePositionResponse>()
{
ApiMethodName = TradeApiService.OPTION_EXERCISE_POSITION,
ModelValue = new OptionExercisePositionModel(
exerciseType: "Exercise",
account: config.DefaultAccount
)
};
OptionExercisePositionResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine($"itemCount={response.ItemCount} pageCount={response.PageCount}");
foreach (OptionExercisePositionItem pos in response.Items)
{
Console.WriteLine($"contractId={pos.ContractId} symbol={pos.Symbol} availableQty={pos.AvailableQuantity}");
}optionExerciseSubmit
Submits an early exercise or early waive request.
Note: Call
optionExerciseCheckfirst to confirm the position impact.ExecutingDateandIsForceare only applicable toExercisetype;ItmRateis only applicable toExpiretype.
Request model
| Field | Type | Description |
|---|---|---|
ContractId | long | Option contract ID |
ExerciseType | string | "Exercise" / "Expire" |
Quantity | double | Exercise quantity (> 0) |
ExecutingDate | string | Execution date (required for Exercise) |
IsForce | bool | Force exercise flag (required for Exercise) |
ItmRate | int | ITM rate threshold 0–10 (Expire only) |
SecretKey | string | Trader key for institutional/Prime accounts |
Returns: OptionExerciseSubmitResponse with Success (bool) field.
// Early exercise
TigerRequest<OptionExerciseSubmitResponse> request = new TigerRequest<OptionExerciseSubmitResponse>()
{
ApiMethodName = TradeApiService.OPTION_EXERCISE_SUBMIT,
ModelValue = new OptionExerciseSubmitModel(
contractId: 1234567890L,
exerciseType: "Exercise",
quantity: 1.0,
executingDate: "2025-06-20",
isForce: false,
account: config.DefaultAccount
)
};
OptionExerciseSubmitResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine(response.Success ? "Submitted successfully" : "Submission failed");optionExerciseRecord
Returns paginated exercise/waive request records.
Request model
| Field | Type | Description |
|---|---|---|
Page | int | Page number, starts from 1 (default 1) |
Size | int | Page size, 1–100 (default 20) |
Status | string | Status filter: New / Cancel / Success / Fail |
ExerciseType | string | Type filter: Exercise / Expire |
Symbol | string | Underlying symbol filter |
OrderBy | string | Sort field: symbol / expire_date / strike / is_call |
SecretKey | string | Trader key for institutional/Prime accounts |
OptionExerciseRecordItem fields:
| Field | Type | Description |
|---|---|---|
Id | long | Record ID |
ContractId | long | Option contract ID |
Symbol | string | Option contract symbol |
StkSymbol | string | Underlying stock symbol |
ExpireDate | string | Expiry date |
Strike | string | Strike price |
CallPut | string | CALL / PUT |
ExerciseType | string | Exercise / Expire |
RequestQuantity | double | Requested quantity |
Quantity | double | Actual exercised quantity |
Status | string | New / Cancel / Success / Fail |
ExecutingDate | string | Execution date |
ItmRate | int | ITM rate |
IsForce | bool | Force exercise flag |
Reason | string | Rejection reason (if any) |
AccountId | long | Account ID |
TigerRequest<OptionExerciseRecordResponse> request = new TigerRequest<OptionExerciseRecordResponse>()
{
ApiMethodName = TradeApiService.OPTION_EXERCISE_RECORD,
ModelValue = new OptionExerciseRecordModel(
page: 1,
size: 20,
account: config.DefaultAccount
)
};
OptionExerciseRecordResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine($"itemCount={response.ItemCount} pageCount={response.PageCount}");
foreach (OptionExerciseRecordItem r in response.Items)
{
Console.WriteLine($"id={r.Id} type={r.ExerciseType} status={r.Status}");
}optionExerciseCancel
Cancels a pending exercise request by its record ID.
Request model
| Field | Type | Description |
|---|---|---|
Id | long | Exercise record ID (from optionExerciseRecord) |
SecretKey | string | Trader key for institutional/Prime accounts |
Returns: OptionExerciseCancelResponse with Success (bool) field.
TigerRequest<OptionExerciseCancelResponse> request = new TigerRequest<OptionExerciseCancelResponse>()
{
ApiMethodName = TradeApiService.OPTION_EXERCISE_CANCEL,
ModelValue = new OptionExerciseCancelModel(
id: recordId,
account: config.DefaultAccount
)
};
OptionExerciseCancelResponse response = await tradeClient.ExecuteAsync(request);
Console.WriteLine(response.Success ? "Cancelled successfully" : "Cancellation failed");