取消或修改订单
取消订单
对应的请求类:TigerHttpRequest(MethodName.CANCEL_ORDER)
说明
撤销已下的订单。撤单同下单类似,为异步执行。成功响应的 data 中仅返回订单 ID,表示撤单请求已被接受,不表示订单已经撤销。请再次查询订单,同时检查订单 status 和 cancelStatus;最终结果应以两者共同反映的订单状态为准。
使用 TradeOrderRequest 提交订单后,被提交的订单会根据不同情况进入多种状态。已成交或被系统拒绝的订单无法被撤销,只有订单处于已提交或部分成交的状态,才可被撤销。请参考 TigerHttpRequest(MethodName.ORDERS) 方法的说明来了解可能出现的订单状态。
对于批量下单,可用 TigerHttpRequest(MethodName.ACTIVE_ORDERS) 取得待成交的订单列表,依次撤单。对于已经请求过撤单的订单,不要重复请求,可在撤单命令执行后,等待一段时间再次检查待成交的订单。
参数
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| account | string | Yes | 用户授权账户:DU000001 |
| id | long | Yes | 订单号,下单时返回的 ID |
| secret_key | string | No | 交易员密钥,机构用户专用 |
返回
| 名称 | 类型 | 说明 |
|---|---|---|
| id | long | 唯一单号,可用于查询订单/修改订单/取消订单 |
示例
TigerHttpClient client = TigerHttpClient.getInstance().clientConfig(
ClientConfig.DEFAULT_CONFIG);
TigerHttpRequest request = new TigerHttpRequest(MethodName.CANCEL_ORDER);
String bizContent = TradeParamBuilder.instance()
.account("DU000001")
.id(100000000000000001L)
.buildJson();
request.setBizContent(bizContent);
TigerHttpResponse response = client.execute(request);
JSONObject data = JSON.parseObject(response.getData());
Long id = data.getLong("id");返回示例
{
"code": 0,
"message": null,
"timestamp": 1525938835697,
"data": {
"id":100000000000000001
}
}请求频率
基础限流为 120 次/分钟。
修改订单
对应的请求类:TigerHttpRequest(MethodName.MODIFY_ORDER)
说明
改单规则因账户类型和原订单类型而异:
- Global 账户: 不适用“所有改单都必须显式提交至少一个变更字段”或“
order_type一定不能提交”的统一规则。可修改字段及省略行为取决于原订单类型;只提交该订单类型支持的字段。 - Prime/Paper 账户: 系统按原订单类型处理改单,不能通过
order_type将订单改成另一种类型。LMT、STP、STP_LMT 和 TRAIL 等订单须按原订单类型提供有效的数量、价格或跟踪参数;具体组合见下表。
零值与省略按账户路径处理:
| 账户路径 | total_quantity=0 | 适用价格字段为 0 | order_type | time_in_force 省略 |
|---|---|---|---|---|
| Global | 最终请求 order_type=LMT 时沿用原数量 | 最终请求 order_type=LMT 时沿用原限价 | 显式值保留;省略时复制原订单类型 | 补全为 DAY |
| Prime/Paper | 不作为新数量下发 | LMT/STP/STP_LMT/TRAIL 对应价格不作为新值下发;多腿订单允许负价格 | 服务端查询原订单并强制使用原订单类型 | 补全为 DAY |
Prime/Paper 普通订单请求必须至少包含一个对原订单类型有效的数量、价格或跟踪参数;冰山单可仅修改展示数量、检查间隔或 algo_params 中的生效时间,规则见下方说明。
参数
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| account | string | Yes | 用户授权账户:DU000001 |
| id | long | Yes | 订单 id,下单时返回 |
| order_type | string | No | Global 账户是否需要及如何处理取决于原订单;Prime/Paper 按查询到的原订单类型处理,不能用此字段转换订单类型 |
| total_quantity | long | No | 订单数量 (港股,沪港通,窝轮,牛熊证有最小数量限制) |
| total_quantity_scale | int | No | 下单数量的偏移量,默认为 0。碎股单的 total_quantity 和 total_quantity_scale 结合起来代表真实下单数量,如 total_quantity=111 total_quantity_scale=2,那么,真实 quantity=111*10^(-2)=1.11 |
| limit_price | double | No | 新限价,适用于原订单为 LMT 或 STP_LMT 的普通订单;是否必须与 total_quantity 等字段组合取决于账户和原订单类型。Prime/Paper 冰山单不支持修改此字段 |
| aux_price | double | No | 新止损价,适用于原订单为 STP 或 STP_LMT;原订单为 TRAIL 时表示跟踪差额。是否必须与其他字段组合取决于账户和原订单类型 |
| trailing_percent | double | No | 原订单为 TRAIL 时,可提供 aux_price 或 trailing_percent;同时提供时优先使用 trailing_percent |
| cash_amount | double | No | 改单不支持修改订单金额。Prime/Paper 请求传入该字段会被拒绝;Global 账户也不应将其作为可修改字段提交 |
| display_size | int | No | 仅用于 Prime/Paper 冰山单改单,表示每次展示数量 |
| min_display_size | int | No | 仅用于 Prime/Paper 冰山单改单,表示最小展示数量 |
| check_intervals | int | No | 仅用于 Prime/Paper 冰山单改单,表示价格检查间隔(秒) |
| price_type | string | No | Prime/Paper 冰山单改单当前不支持修改该字段 |
| start_time | long | No | 顶层字段不用于冰山单改单。Prime/Paper 冰山单须通过 algo_params 传入 start_time,Unix 毫秒时间戳 |
| end_time | long | No | 顶层字段不用于冰山单改单。Prime/Paper 冰山单须通过 algo_params 传入 end_time,Unix 毫秒时间戳 |
| algo_params | List<TagValue> | No | Prime/Paper 冰山单修改生效时间时,在此列表中传入 start_time 和/或 end_time |
| secret_key | string | No | 交易员密钥,机构用户专用 |
Prime/Paper 冰山单改单: 支持修改
total_quantity、display_size、min_display_size、check_intervals,以及通过algo_params传入的start_time、end_time。不支持修改limit_price或price_type。顶层start_time、end_time字段不用于冰山单改单。Global 账户不在此支持范围内。
TradeParamBuilder没有display_size、min_display_size、check_intervals、price_type、start_time或end_time的便捷方法。algo_params可通过TradeParamBuilder.algoParams(...)设置;冰山单生效时间须放在其中。当前构建器没有展示类字段的对应改单方法。如需修改展示类字段,请手动构造
biz_contentJSON,并通过TigerHttpRequest.setBizContent(...)提交;不要将这些字段放入algo_params:JSONObject params = new JSONObject(); params.put("account", "DU000001"); params.put("id", 100000000000000001L); params.put("display_size", 100); params.put("min_display_size", 50); params.put("check_intervals", 30); TigerHttpRequest request = new TigerHttpRequest(MethodName.MODIFY_ORDER); request.setBizContent(params.toJSONString());
返回
| 名称 | 类型 | 说明 |
|---|---|---|
| id | long | 唯一单号,可用于查询订单/修改订单/取消订单 |
成功响应的 data 中仅返回订单 ID,不报告最终改单状态。请再次查询订单,同时检查 status 和 replaceStatus。replaceStatus=REPLACED 表示改单已确认成功,replaceStatus=FAILED 表示改单失败;其他中间状态仍需继续查询,并结合订单 status 判断。
示例
TigerHttpClient client = TigerHttpClient.getInstance().clientConfig(
ClientConfig.DEFAULT_CONFIG);
TigerHttpRequest request = new TigerHttpRequest(MethodName.MODIFY_ORDER);
// 假设该 ID 对应一个仍可修改的 LMT 或 STP_LMT 订单。
String bizContent = TradeParamBuilder.instance()
.account("DU000001")
.id(100000000000000001L)
.totalQuantity(200L)
.limitPrice(60.0)
.buildJson();
request.setBizContent(bizContent);
TigerHttpResponse response = client.execute(request);
JSONObject data = JSON.parseObject(response.getData());
Long id = data.getLong("id");返回示例
{
"code": 0,
"message": null,
"timestamp": 1525938835697,
"data": {
"id":100000000000000001
}
}请求频率
基础限流为 120 次/分钟。
Updated 5 days ago
