期权行权
提交行权
签名
pub async fn submit_option_exercise(&self, mut req: OptionExerciseSubmitRequest) -> Result<Option<bool>, TigerError>说明
提交期权行权或到期处理请求。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.secret_key | Option<String> | 可选 | None(不序列化) |
| req.contract_id | Option<i64> | 服务端必填;SDK 不预校验 | None(不序列化) |
| req.exercise_type | Option<String> | 服务端必填;合法值为 Exercise、Expire;SDK 不预校验 | None(不序列化) |
| req.quantity | Option<f64> | 服务端必填;SDK 不预校验 | None(不序列化) |
| req.executing_date | Option<String> | Exercise 条件必填;格式 yyyy-MM-dd | None(不序列化) |
| req.is_force | Option<bool> | Exercise 条件必填 | None(不序列化) |
| req.itm_rate | Option<i32> | Expire 条件必填,范围 0..10 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
返回
Result<Option<bool>, TigerError>
返回 Some(true) 表示请求已受理。
示例
use tigeropen::model::trade_requests::OptionExerciseSubmitRequest;
let success = trade.submit_option_exercise(OptionExerciseSubmitRequest {
contract_id: Some(55678),
exercise_type: Some("Exercise".into()),
quantity: Some(1.0),
executing_date: Some("2026-09-19".into()),
is_force: Some(false),
..Default::default()
}).await?;
println!("行权提交: {:?}", success);返回示例
true请求频率
基础限流为 60 次/分钟。
取消行权
签名
pub async fn cancel_option_exercise(&self, mut req: OptionExerciseCancelRequest) -> Result<Option<bool>, TigerError>说明
取消已提交的行权记录,仅 New 等可撤状态的行权记录可取消。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.secret_key | Option<String> | 可选 | None(不序列化) |
| req.id | Option<i64> | 服务端必填;SDK 不预校验 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
返回
Result<Option<bool>, TigerError>
返回 Some(true) 表示取消成功。
示例
use tigeropen::model::trade_requests::OptionExerciseCancelRequest;
let cancelled = trade.cancel_option_exercise(OptionExerciseCancelRequest {
id: Some(12345),
..Default::default()
}).await?;
println!("取消行权: {:?}", cancelled);返回示例
true请求频率
基础限流为 60 次/分钟。
行权检查
签名
pub async fn option_exercise_check(&self, mut req: OptionExerciseCheckRequest) -> Result<Option<OptionExerciseCheckResult>, TigerError>说明
检查期权行权可行性,验证持仓是否满足行权条件。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.secret_key | Option<String> | 可选 | None(不序列化) |
| req.contract_id | Option<i64> | 服务端必填;SDK 不预校验 | None(不序列化) |
| req.exercise_type | Option<String> | 服务端必填;合法值为 Exercise、Expire;SDK 不预校验 | None(不序列化) |
| req.quantity | Option<f64> | 服务端必填;SDK 不预校验 | None(不序列化) |
| req.executing_date | Option<String> | Exercise 建议提供;格式 yyyy-MM-dd | None(不序列化) |
| req.is_force | Option<bool> | Exercise 建议提供 | None(不序列化) |
| req.itm_rate | Option<i32> | Expire 可选,范围 0..10 | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
返回
Result<Option<OptionExerciseCheckResult>, TigerError>;空 data 返回 None。字段为 available_quantity、position、stk_position、stk_position_change、stk_position_before、stk_position_after 和 symbol。
示例
use tigeropen::model::trade_requests::OptionExerciseCheckRequest;
let ok = trade.option_exercise_check(OptionExerciseCheckRequest {
contract_id: Some(55678),
exercise_type: Some("Exercise".into()),
quantity: Some(1.0),
executing_date: Some("2026-09-19".into()),
..Default::default()
}).await?;
if let Some(check) = ok {
println!(
"可用数量={} 期权持仓={} 正股持仓={} 正股变动={} 变动前={} 变动后={} 标的={}",
check.available_quantity,
check.position,
check.stk_position,
check.stk_position_change,
check.stk_position_before,
check.stk_position_after,
check.symbol
);
}返回示例
{"availableQuantity":1.0,"position":1.0,"stkPosition":0.0,"stkPositionChange":100.0,"stkPositionBefore":0.0,"stkPositionAfter":100.0,"symbol":"AAPL"}请求频率
基础限流为 60 次/分钟。
获取行权持仓
签名
pub async fn get_option_exercise_positions(&self, mut req: OptionExercisePositionRequest) -> Result<Option<OptionExercisePositionPageResult>, TigerError>说明
获取可行权的期权持仓列表。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.secret_key | Option<String> | 可选 | None(不序列化) |
| req.exercise_type | Option<String> | 服务端必填;合法值为 Exercise、Expire | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
返回
Result<Option<OptionExercisePositionPageResult>, TigerError>;空 data 返回 None。
| 字段 | 类型 | 说明 |
|---|---|---|
| page_num/page_size | i32 | 当前页码/页大小 |
| item_count/page_count | i32 | 总记录数/总页数 |
| items | Vec<OptionExercisePosition> | 持仓列表;条目字段为 contract_id、symbol、stk_symbol、expire_date、strike、call_put、market、account_id、position、available_quantity |
示例
use tigeropen::model::trade_requests::OptionExercisePositionRequest;
let positions = trade.get_option_exercise_positions(
OptionExercisePositionRequest {
exercise_type: Some("Exercise".into()),
..Default::default()
}
).await?;
if let Some(page) = positions {
for p in &page.items { println!("{} {} strike={} qty={}", p.symbol, p.call_put, p.strike, p.position); }
}返回示例
{"pageNum":1,"pageSize":20,"itemCount":1,"pageCount":1,"items":[{"contractId":55678,"symbol":"AAPL","stkSymbol":"AAPL","expireDate":"20260919","strike":"200","callPut":"CALL","market":"US","accountId":123,"position":2.0,"availableQuantity":2.0}]}请求频率
基础限流为 60 次/分钟。
获取行权记录
签名
pub async fn get_option_exercise_records(&self, mut req: OptionExerciseRecordsRequest) -> Result<Option<OptionExerciseRecordPageResult>, TigerError>说明
获取历史行权/到期处理记录。
参数
| 参数 | Rust 类型 | 必填性/条件 | SDK 默认值 |
|---|---|---|---|
| req.account | Option<String> | 可选;多数 TradeClient 方法在 None 时注入默认账户 | None(不序列化) |
| req.secret_key | Option<String> | 可选 | None(不序列化) |
| req.page | Option<i32> | 可选;从 1 开始 | 服务端默认 1 |
| req.size | Option<i32> | 可选;范围 1–100 | 服务端默认 20 |
| req.status | Option<String> | 可选;合法值为 New、Cancel、Success、Fail | None(不序列化) |
| req.exercise_type | Option<String> | 可选;合法值为 Exercise、Expire | None(不序列化) |
| req.symbol | Option<String> | 可选 | None(不序列化) |
| req.order_by | Option<String> | 可选;合法值为 symbol、expire_date、strike、is_call | None(不序列化) |
| req.lang | Option<String> | 可选 | None(不序列化) |
返回
Result<Option<OptionExerciseRecordPageResult>, TigerError>;空 data 返回 None。分页字段为 page_num、page_size、item_count、page_count 和 items;每项保留 id、contract_id、symbol、stk_symbol、expire_date、strike、call_put、exercise_type、request_quantity、quantity、status、executing_date、itm_rate、is_force、reason、account_id。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | i64 | 记录 ID |
| contract_id | i64 | 合约 ID |
| symbol | String | 股票代码 |
| stk_symbol | String | 正股代码 |
| expire_date | String | 到期日 |
| strike | String | 行权价 |
| call_put | String | CALL/PUT |
| exercise_type | String | Exercise/Expire;JSON 字段名为 type |
| request_quantity | f64 | 申请数量 |
| quantity | f64 | 行权数量 |
| status | String | 状态 |
| executing_date | String | 执行日期 |
| itm_rate | i32 | 价内率 |
| is_force | bool | 是否强制行权 |
| reason | String | 原因 |
| account_id | i64 | 账户 ID |
示例
use tigeropen::model::trade_requests::OptionExerciseRecordsRequest;
let records = trade.get_option_exercise_records(
OptionExerciseRecordsRequest::default()
).await?;
if let Some(page) = records {
for r in &page.items { println!("{} {} qty={} status={}", r.symbol, r.exercise_type, r.quantity, r.status); }
}返回示例
{"pageNum":1,"pageSize":20,"itemCount":1,"pageCount":1,"items":[{"id":12345,"contractId":55678,"symbol":"AAPL","stkSymbol":"AAPL","expireDate":"20260919","strike":"200","callPut":"CALL","type":"Exercise","requestQuantity":1.0,"quantity":1.0,"status":"New","executingDate":"2026-09-19","itmRate":0,"isForce":false,"reason":"","accountId":123}]}请求频率
基础限流为 60 次/分钟。
Updated 6 days ago
